public async Task ShouldProcessCommandsAndTransmitCurrentPosition() { var manouvreCommandParameter = RoverCommandParametersBuilder.WithOneSafeMoveCommand(); var commandRetrieverStub = new Mock <IRetrieveRoverCommands>(); commandRetrieverStub .Setup(x => x.GetAll()) .ReturnsAsync(new[] { manouvreCommandParameter }) .Verifiable(); var transmitterStub = new Mock <ITransmitRoverPosition>(); transmitterStub .Setup(x => x.Transmit(It.IsAny <CurrentRoverPosition>())) .Returns(Task.CompletedTask) .Verifiable(); var useCase = new RoverOperationUsecase( commandRetrieverStub.Object, transmitterStub.Object); await useCase.StartRoverOperation(); commandRetrieverStub.Verify(x => x.GetAll(), Times.Once); transmitterStub.Verify(x => x.Transmit(It.IsAny <CurrentRoverPosition>()), Times.Once); }
public async Task ShouldNotTransmitPositionIfThereAreNoManouvreCommandsToProcess() { var commandRetrieverStub = new Mock <IRetrieveRoverCommands>(); commandRetrieverStub .Setup(x => x.GetAll()) .ReturnsAsync(new[] { RoverCommandParametersBuilder.WithNoManouvreCommands() }); var transmitterStub = new Mock <ITransmitRoverPosition>(); transmitterStub .Setup(x => x.Transmit(It.IsAny <CurrentRoverPosition>())) .Returns(Task.CompletedTask) .Verifiable(); var useCase = new RoverOperationUsecase( commandRetrieverStub.Object, transmitterStub.Object); await useCase.StartRoverOperation(); transmitterStub.Verify(x => x.Transmit(It.IsAny <CurrentRoverPosition>()), Times.Never); }
public async Task ShouldThrowIfCommandForcesRoverToMoveOffTerrain() { var commandRetrieverStub = new Mock <IRetrieveRoverCommands>(); commandRetrieverStub .Setup(x => x.GetAll()) .ReturnsAsync(new[] { RoverCommandParametersBuilder.WithUnsafeManouvreCommand() }); var useCase = new RoverOperationUsecase( commandRetrieverStub.Object, new Mock <ITransmitRoverPosition>().Object); await Assert.ThrowsAsync <InvalidOperationException>(() => useCase.StartRoverOperation()); }
private static Mock <IRetrieveRoverCommands> CreateCommandRetrieverStubWith( int startingX, int startingY, Direction startingHeading) { var manouvreCommandParameter = RoverCommandParametersBuilder.WithOneSafeMoveCommandWithStartingPosition( startingX, startingY, startingHeading); var commandRetrieverStub = new Mock <IRetrieveRoverCommands>(); commandRetrieverStub .Setup(x => x.GetAll()) .ReturnsAsync(new[] { manouvreCommandParameter }); return(commandRetrieverStub); }