dotnet-installer/test/dotnet-test.UnitTests/GivenATestRunnerTestCompletedMessageHandler.cs

123 lines
4.9 KiB
C#
Raw Normal View History

// 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 GivenATestRunnerTestCompletedMessageHandler
{
private Mock<IDotnetTest> _dotnetTestAtTestDiscoveryStartedMock;
private Mock<IDotnetTest> _dotnetTestAtTestExecutionStartedMock;
private Mock<IReportingChannel> _adapterChannelMock;
private Message _validMessage;
private TestRunnerTestCompletedMessageHandler _testRunnerTestCompletedMessageHandler;
public GivenATestRunnerTestCompletedMessageHandler()
{
_dotnetTestAtTestDiscoveryStartedMock = new Mock<IDotnetTest>();
_dotnetTestAtTestDiscoveryStartedMock.Setup(d => d.State).Returns(DotnetTestState.TestDiscoveryStarted);
_dotnetTestAtTestExecutionStartedMock = new Mock<IDotnetTest>();
_dotnetTestAtTestExecutionStartedMock.Setup(d => d.State).Returns(DotnetTestState.TestExecutionStarted);
_adapterChannelMock = new Mock<IReportingChannel>();
_validMessage = new Message
{
MessageType = TestMessageTypes.TestRunnerTestCompleted
};
_testRunnerTestCompletedMessageHandler =
new TestRunnerTestCompletedMessageHandler(_adapterChannelMock.Object);
}
[Fact]
public void It_returns_NoOp_if_the_dotnet_test_state_is_not_TestDiscoveryStarted_or_TestExecutionStarted()
{
var dotnetTestMock = new Mock<IDotnetTest>();
dotnetTestMock.Setup(d => d.State).Returns(DotnetTestState.Terminated);
var nextState = _testRunnerTestCompletedMessageHandler.HandleMessage(
dotnetTestMock.Object,
_validMessage);
nextState.Should().Be(DotnetTestState.NoOp);
}
[Fact]
public void It_returns_NoOp_if_the_message_is_not_TestRunnerTestCompleted_when_state_is_TestDiscoveryStarted()
{
var nextState = _testRunnerTestCompletedMessageHandler.HandleMessage(
_dotnetTestAtTestDiscoveryStartedMock.Object,
new Message { MessageType = "Something different from TestDiscovery.Start" });
nextState.Should().Be(DotnetTestState.NoOp);
}
[Fact]
public void It_returns_NoOp_if_the_message_is_not_TestRunnerTestCompleted_when_state_is_TestExecutionStarted()
{
var nextState = _testRunnerTestCompletedMessageHandler.HandleMessage(
_dotnetTestAtTestExecutionStartedMock.Object,
new Message { MessageType = "Something different from TestDiscovery.Start" });
nextState.Should().Be(DotnetTestState.NoOp);
}
[Fact]
public void It_returns_TestDiscoveryCompleted_when_it_handles_the_message_and_current_state_is_TestDiscoveryStarted()
{
var nextState = _testRunnerTestCompletedMessageHandler.HandleMessage(
_dotnetTestAtTestDiscoveryStartedMock.Object,
_validMessage);
nextState.Should().Be(DotnetTestState.TestDiscoveryCompleted);
}
[Fact]
public void It_sends_a_TestDiscoveryCompleted_when_it_handles_the_message_and_current_state_is_TestDiscoveryStarted()
{
_adapterChannelMock
.Setup(a => a.Send(It.Is<Message>(m => m.MessageType == TestMessageTypes.TestDiscoveryCompleted)))
.Verifiable();
_testRunnerTestCompletedMessageHandler.HandleMessage(
_dotnetTestAtTestDiscoveryStartedMock.Object,
_validMessage);
_adapterChannelMock.Verify();
}
[Fact]
public void It_returns_TestExecutionCompleted_when_it_handles_the_message_and_current_state_is_TestExecutionStarted()
{
var nextState = _testRunnerTestCompletedMessageHandler.HandleMessage(
_dotnetTestAtTestExecutionStartedMock.Object,
_validMessage);
nextState.Should().Be(DotnetTestState.TestExecutionCompleted);
}
[Fact]
public void It_sends_a_TestExecutionCompleted_when_it_handles_the_message_and_current_state_is_TestExecutionStarted()
{
_adapterChannelMock
.Setup(a => a.Send(It.Is<Message>(m => m.MessageType == TestMessageTypes.TestExecutionCompleted)))
.Verifiable();
_testRunnerTestCompletedMessageHandler.HandleMessage(
_dotnetTestAtTestExecutionStartedMock.Object,
_validMessage);
_adapterChannelMock.Verify();
}
}
}