// Copyright (c) .NET Foundation and contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using FluentAssertions; using Microsoft.DotNet.Tools.Test; using Microsoft.Extensions.Testing.Abstractions; using Moq; using Newtonsoft.Json.Linq; using Xunit; namespace Microsoft.Dotnet.Tools.Test.Tests { public class GivenAVersionCheckMessageHandler { private Mock _reportingChannelMock; private VersionCheckMessageHandler _versionCheckMessageHandler; private Message _validMessage; private IDotnetTest _dotnetTestAtInitialState; public GivenAVersionCheckMessageHandler() { _reportingChannelMock = new Mock(); _versionCheckMessageHandler = new VersionCheckMessageHandler(_reportingChannelMock.Object); _validMessage = new Message { MessageType = TestMessageTypes.VersionCheck, Payload = JToken.FromObject(new ProtocolVersionMessage { Version = 99 }) }; var dotnetTestAtInitialStateMock = new Mock(); dotnetTestAtInitialStateMock.Setup(d => d.State).Returns(DotnetTestState.InitialState); _dotnetTestAtInitialState = dotnetTestAtInitialStateMock.Object; } [Fact] public void It_returns_NoOp_if_the_dotnet_test_state_is_not_initial() { var dotnetTestMock = new Mock(); dotnetTestMock.Setup(d => d.State).Returns(DotnetTestState.Terminated); var nextState = _versionCheckMessageHandler.HandleMessage( dotnetTestMock.Object, new Message {MessageType = TestMessageTypes.VersionCheck}); nextState.Should().Be(DotnetTestState.NoOp); } [Fact] public void It_returns_NoOp_if_the_message_is_not_VersionCheck() { var nextState = _versionCheckMessageHandler.HandleMessage( _dotnetTestAtInitialState, new Message { MessageType = "Something different from ProtocolVersion" }); nextState.Should().Be(DotnetTestState.NoOp); } [Fact] public void It_returns_VersionCheckCompleted_when_it_handles_the_message() { var nextState = _versionCheckMessageHandler.HandleMessage(_dotnetTestAtInitialState, _validMessage); nextState.Should().Be(DotnetTestState.VersionCheckCompleted); } [Fact] public void It_returns_a_ProtocolVersion_with_the_SupportedVersion_when_it_handles_the_message() { _reportingChannelMock.Setup(r => r.Send(It.Is(m => m.MessageType == TestMessageTypes.VersionCheck && m.Payload.ToObject().Version == 1))).Verifiable(); _versionCheckMessageHandler.HandleMessage(_dotnetTestAtInitialState, _validMessage); _reportingChannelMock.Verify(); } } }