public void GivenValidMovement_WhenMoveIsCalled_ThenBotPositionIsUpdated(int x, int y, CardinalPoint cardinalPoint) { var inputMoviment = Movement.L; var movementFactory = NSubstitute.Substitute.For <IBotMovementHandlerFactory>(); var botMovement = Substitute.For <IBotMovementHandler>(); botMovement.CanHandleMovement(Arg.Any <Movement>()).Returns(true); botMovement.HandleMovement(Arg.Any <Position>(), inputMoviment).Returns(new Position(new Coordinates { X = x, Y = y }, cardinalPoint)); movementFactory.CreateMovement(Arg.Any <BotMovement>()).Returns(botMovement); var board = NSubstitute.Substitute.For <IGameBoard>(); board.Columns.Returns(10); board.Rows.Returns(10); var coordinates = new Coordinates { X = 5, Y = 5 }; var bot = new RegularBot(coordinates, CardinalPoint.N, board, movementFactory); bot.Move(inputMoviment); var expectedPosition = new Position(new Coordinates { X = x, Y = y }, cardinalPoint); bot.Position.ShouldBeEquivalentTo(expectedPosition); }
public void GivenMovementAndBotThatCHandleThatMovement_WhenMoveIsCalled_HandleIsCalled() { var inputMoviment = Movement.L; var movementFactory = NSubstitute.Substitute.For <IBotMovementHandlerFactory>(); var botMovement = Substitute.For <IBotMovementHandler>(); movementFactory.CreateMovement(Arg.Any <BotMovement>()).Returns(botMovement); var board = NSubstitute.Substitute.For <IGameBoard>(); board.Columns.Returns(10); board.Rows.Returns(10); var coordinates = new Coordinates { X = 5, Y = 5 }; botMovement.CanHandleMovement(Arg.Any <Movement>()).Returns(true); var bot = new RegularBot(coordinates, CardinalPoint.N, board, movementFactory); bot.Move(inputMoviment); botMovement.Received().HandleMovement(Arg.Is <Position>(p => p.Coordinates.X == coordinates.X && p.Coordinates.Y == coordinates.Y && p.Direction == CardinalPoint.N), inputMoviment); }
public void GivenMovementToOutsideTheBoardGame_WhenMoveIsCalled_ThenExceptionIsRaised(int x, int y) { var inputMoviment = Movement.L; var movementFactory = NSubstitute.Substitute.For <IBotMovementHandlerFactory>(); var botMovement = Substitute.For <IBotMovementHandler>(); botMovement.CanHandleMovement(Arg.Any <Movement>()).Returns(true); botMovement.HandleMovement(Arg.Any <Position>(), inputMoviment).Returns(new Position(new Coordinates { X = x, Y = y }, CardinalPoint.N)); movementFactory.CreateMovement(Arg.Any <BotMovement>()).Returns(botMovement); var board = NSubstitute.Substitute.For <IGameBoard>(); board.Columns.Returns(10); board.Rows.Returns(10); var coordinates = new Coordinates { X = 5, Y = 5 }; var bot = new RegularBot(coordinates, CardinalPoint.N, board, movementFactory); Action action = () => bot.Move(inputMoviment); action.ShouldThrow <BotGameException>(); }
public void GivenMovementAndBotThatCanNotHandleThatMovement_WhenMoveIsCalled_HandleIsNotCalled() { var movementFactory = NSubstitute.Substitute.For <IBotMovementHandlerFactory>(); var movement = Substitute.For <IBotMovementHandler>(); movementFactory.CreateMovement(Arg.Any <BotMovement>()).Returns(movement); var board = NSubstitute.Substitute.For <IGameBoard>(); board.Columns.Returns(10); board.Rows.Returns(10); var coordinates = new Coordinates { X = 5, Y = 5 }; movement.CanHandleMovement(Arg.Any <Movement>()).Returns(false); var bot = new RegularBot(coordinates, CardinalPoint.N, board, movementFactory); bot.Move(Movement.L); movement.DidNotReceive().HandleMovement(Arg.Any <Position>(), Movement.L); }