diff --git a/Source/Windows/TeensyRom.Ui/src/TeensyRom.Tests.Unit/ConnectViewModelTests.cs b/Source/Windows/TeensyRom.Ui/src/TeensyRom.Tests.Unit/ConnectViewModelTests.cs index 7fdd63ab..4c3d010c 100644 --- a/Source/Windows/TeensyRom.Ui/src/TeensyRom.Tests.Unit/ConnectViewModelTests.cs +++ b/Source/Windows/TeensyRom.Ui/src/TeensyRom.Tests.Unit/ConnectViewModelTests.cs @@ -11,6 +11,7 @@ using TeensyRom.Core.Serial; using TeensyRom.Core.Serial.State; using TeensyRom.Ui.Features.Connect; +using TeensyRom.Ui.Services; namespace TeensyRom.Tests.Unit { @@ -21,6 +22,7 @@ public class ConnectViewModelTests private readonly ILoggingService _logMock = Substitute.For(); private readonly IObservableSerialPort _observableSerialPort = Substitute.For(); private readonly IAlertService _alertService = Substitute.For(); + private readonly IDialogService _dialogService = Substitute.For(); [Fact] @@ -29,7 +31,7 @@ public void Given_SerialPortsDoNotExist_SerialPortsEmpty() //Arrange _serialMock.Ports.Returns(new BehaviorSubject(Array.Empty()).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Assert viewModel.Ports.Should().BeNullOrEmpty(); @@ -41,7 +43,7 @@ public void Given_SerialPortsDoNotExist_NotConnected_And_NotConnectable() //Arrange _serialMock.Ports.Returns(new BehaviorSubject(Array.Empty()).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Assert viewModel.IsConnected.Should().BeFalse(); @@ -54,7 +56,7 @@ public void Given_SerialPortsExist_SerialPortsDisplayed() //Arrange _serialMock.Ports.Returns(new BehaviorSubject(["COM3", "COM4"]).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Assert viewModel.Ports.Should().BeEquivalentTo(new[] { "Auto-detect", "COM3", "COM4" }); @@ -66,7 +68,7 @@ public void Given_SerialPortsExist_AutoIsSelected() //Arrange _serialMock.Ports.Returns(new BehaviorSubject(["COM3", "COM4"]).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Assert viewModel.SelectedPort.Should().BeEquivalentTo("Auto-detect"); @@ -78,7 +80,7 @@ public void Given_SerialPortsExist_WhenSerialPortSelected_SerialPortSet() //Arrange _serialMock.Ports.Returns(new BehaviorSubject(["COM3", "COM4"]).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act viewModel.SelectedPort = "COM4"; @@ -93,7 +95,7 @@ public void Given_SerialPortsExist_WhenAutoSelect_PortIsNotSet() //Arrange _serialMock.Ports.Returns(new BehaviorSubject(["COM3", "COM4"]).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act viewModel.SelectedPort = "Auto-detect"; @@ -110,7 +112,7 @@ public void Given_SerialConnectedState_IsConnectedTrue() //Arrange _serialMock.CurrentState.Returns(new BehaviorSubject(new SerialConnectedState(_observableSerialPort)).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Assert viewModel.IsConnected.Should().BeTrue(); @@ -122,7 +124,7 @@ public void Given_NoSerialPortsExist_IsConnectableFalse() //Arrange _serialMock.Ports.Returns(new BehaviorSubject(Array.Empty()).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Assert viewModel.IsConnectable.Should().BeFalse(); @@ -134,7 +136,7 @@ public void Given_SerialConnectableState_IsConnectableTrue() //Arrange _serialMock.CurrentState.Returns(new BehaviorSubject(new SerialConnectableState(_observableSerialPort)).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Assert viewModel.IsConnectable.Should().BeTrue(); @@ -163,7 +165,7 @@ public void Given_IsConnectable_When_ConnectCommandExecuted_WithAutoPort_Retries .When(x => x.SetPort(Arg.Is(s => s != "COM3"))) .Do(_ => currentStateSubject.OnNext(new SerialConnectableState(_observableSerialPort))); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act viewModel.ConnectCommand.Execute().Subscribe(); @@ -184,7 +186,7 @@ public async Task Given_IsConnectable_When_ConnectCommandExecuted_AndConnectionF .Send(Arg.Any()) .Returns(new ResetResult { IsSuccess = false, Error = "Error Message" }); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act viewModel.ConnectCommand.Execute().Subscribe(); @@ -205,7 +207,7 @@ public void Given_IsConnectable_When_ConnectCommandExecuted_And_SinglePortSelect .Send(Arg.Any()) .Returns(new ResetResult { IsSuccess = false, Error = "Error Message" }); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); viewModel.SelectedPort = "COM3"; //Act @@ -223,7 +225,7 @@ public void Given_IsConnectable_When_ConnectCommandExecuted_And_SinglePortSelect _serialMock.CurrentState.Returns(new BehaviorSubject(new SerialConnectableState(_observableSerialPort)).AsObservable()); _serialMock.Ports.Returns(new BehaviorSubject(["COM1", "COM2", "COM3", "COM4"]).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); viewModel.SelectedPort = "COM3"; //Act @@ -241,7 +243,7 @@ public void Given_IsConnected_When_DisconnectCommandExecuted_SerialPortClosed() _serialMock.CurrentState.Returns(new BehaviorSubject(new SerialConnectedState(_observableSerialPort)).AsObservable()); var logMock = Substitute.For(); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, logMock, _alertService, _dialogService); //Act viewModel.DisconnectCommand.Execute().Subscribe(); @@ -257,7 +259,7 @@ public void Given_IsConnected_When_PingCommandExecuted_PingCommandCalled() _serialMock.CurrentState.Returns(new BehaviorSubject(new SerialConnectedState(_observableSerialPort)).AsObservable()); var logMock = Substitute.For(); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, logMock, _alertService, _dialogService); //Act viewModel.PingCommand.Execute().Subscribe(); @@ -273,7 +275,7 @@ public void Given_IsConnected_When_ResetCommandExecuted_ResetCommandCalled() _serialMock.CurrentState.Returns(new BehaviorSubject(new SerialConnectedState(_observableSerialPort)).AsObservable()); var logMock = Substitute.For(); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, logMock, _alertService, _dialogService); //Act viewModel.ResetCommand.Execute().Subscribe(); @@ -289,7 +291,7 @@ public void Given_IsConnected_WhenDisconnectCommandExecuted_SerialPortClosed() //Arrange _serialMock.CurrentState.Returns(new BehaviorSubject(new SerialConnectedState(_observableSerialPort)).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act viewModel.DisconnectCommand.Execute().Subscribe(); @@ -304,7 +306,7 @@ public void Given_IsConnectable_Then_ConnectCommand_CanBeExecuted() { //Arrange _serialMock.CurrentState.Returns(new BehaviorSubject(new SerialConnectableState(_observableSerialPort)).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act var canExecute = viewModel.ConnectCommand.CanExecute.FirstAsync().Wait(); @@ -318,7 +320,7 @@ public void Given_IsNotConnectable_Then_ConnectCommand_CannotBeExecuted() { //Arrange _serialMock.CurrentState.Returns(new BehaviorSubject(new SerialStartState(_observableSerialPort)).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act var canExecute = viewModel.ConnectCommand.CanExecute.FirstAsync().Wait(); @@ -332,7 +334,7 @@ public void Given_IsConnected_Then_DisconnectCommand_CanBeExecuted() { //Arrange _serialMock.CurrentState.Returns(new BehaviorSubject(new SerialConnectedState(_observableSerialPort)).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act var canExecute = viewModel.DisconnectCommand.CanExecute.FirstAsync().Wait(); @@ -346,7 +348,7 @@ public void Given_IsNotConnected_Then_DisconnectCommand_CannotBeExecuted() { //Arrange _serialMock.CurrentState.Returns(new BehaviorSubject(new SerialStartState(_observableSerialPort)).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act var canExecute = viewModel.DisconnectCommand.CanExecute.FirstAsync().Wait(); @@ -360,7 +362,7 @@ public void Given_IsConnected_Then_PingCommand_CanBeExecuted() { //Arrange _serialMock.CurrentState.Returns(new BehaviorSubject(new SerialConnectedState(_observableSerialPort)).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act var canExecute = viewModel.PingCommand.CanExecute.FirstAsync().Wait(); @@ -374,7 +376,7 @@ public void Given_IsNotConnected_Then_PingCommand_CannotBeExecuted() { //Arrange _serialMock.CurrentState.Returns(new BehaviorSubject(new SerialStartState(_observableSerialPort)).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act var canExecute = viewModel.PingCommand.CanExecute.FirstAsync().Wait(); @@ -388,7 +390,7 @@ public void Given_IsConnected_Then_ResetCommand_CanBeExecuted() { //Arrange _serialMock.CurrentState.Returns(new BehaviorSubject(new SerialConnectedState(_observableSerialPort)).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act var canExecute = viewModel.ResetCommand.CanExecute.FirstAsync().Wait(); @@ -402,7 +404,7 @@ public void Given_IsNotConnected_Then_ResetCommand_CannotBeExecuted() { //Arrange _serialMock.CurrentState.Returns(new BehaviorSubject(new SerialStartState(_observableSerialPort)).AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act var canExecute = viewModel.ResetCommand.CanExecute.FirstAsync().Wait(); @@ -417,7 +419,7 @@ public void When_LogServiceEmitsLogs_LogsAreAvailable() //Arrange var logSubject = new BehaviorSubject("log1"); _logMock.Logs.Returns(logSubject.AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act logSubject.OnNext("log2"); @@ -434,7 +436,7 @@ public void Given_LogsExist_When_LogCommandIsCalled_LogsAreCleared() //Arrange var logSubject = new BehaviorSubject("log1"); _logMock.Logs.Returns(logSubject.AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act logSubject.OnNext("log2"); @@ -452,7 +454,7 @@ public void Given_ThereAre20Logs_When_NextLogAdded_FirstLogRemoved() //Arrange var logSubject = new BehaviorSubject("log0"); _logMock.Logs.Returns(logSubject.AsObservable()); - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); foreach (var i in Enumerable.Range(1, 19)) { @@ -471,7 +473,7 @@ public void Given_ThereAre20Logs_When_NextLogAdded_FirstLogRemoved() public void Given_ThereAreNoLogs_Then_ClearLogsCommand_CannotBeExecuted() { //Arrange - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act viewModel.ClearLogsCommand.Execute().Subscribe(); @@ -485,7 +487,7 @@ public void Given_ThereAreNoLogs_Then_ClearLogsCommand_CannotBeExecuted() public void Given_ThereAreLogs_Then_ClearLogsCommand_CannotBeExecuted() { //Arrange - var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService); + var viewModel = new ConnectViewModel(_mediatorMock, _serialMock, _logMock, _alertService, _dialogService); //Act var canExecute = viewModel.ClearLogsCommand.CanExecute.FirstAsync().Wait(); @@ -494,4 +496,5 @@ public void Given_ThereAreLogs_Then_ClearLogsCommand_CannotBeExecuted() canExecute.Should().BeTrue(); } } + //TODO: Add tests to check dialog service behavior. } \ No newline at end of file