public void ShouldNotifyPathFinishedIfPathDone()
        {
            DetermineStepState state = new DetermineStepState(playerMock.Object);

            state.OnEntry();
            state.OnDuring();
            playerMock.Verify(f => f.NotifyPathFinished(), Times.Once);
        }
        public void ShouldRequestToLookAtNextPos()
        {
            playerMock.Setup(f => f.HasNextStep()).Returns(true);
            playerMock.Setup(f => f.GetNextStep()).Returns(new Vector2Int(15, 13));
            DetermineStepState state = new DetermineStepState(playerMock.Object);

            state.OnEntry();
            state.OnDuring();
            playerMock.Verify(f => f.RequestLookAt(It.Is <Vector2Int>(v2 => v2 == new Vector2Int(15, 13))), Times.Once);
        }
        public void GoToTargetStateIfNotCombatStarted()
        {
            playerMock.Setup(f => f.HasNextStep()).Returns(true);
            playerMock.Setup(f => f.GetNextStep()).Returns(new Vector2Int(15, 13));
            playerMock.Setup(f => f.GridPosition).Returns(new Vector2Int(15, 13));
            combatManagerMock.Setup(f => f.PlayerEntersTile(It.Is <Vector2Int>(v2 => v2 == new Vector2Int(15, 13)))).Returns(false);
            DetermineStepState state = new DetermineStepState(playerMock.Object);

            state.OnEntry();
            state.HandleEvent(new DetermineStepState.TurningFinishedEvent());
            Assert.IsTrue(state.OnDuring() is GoToTargetState);
        }
        public void ShouldBeAbleToThrowEventStraightAway()
        {
            playerMock.Setup(f => f.HasNextStep()).Returns(true);
            playerMock.Setup(f => f.GetNextStep()).Returns(new Vector2Int(15, 13));
            playerMock.Setup(f => f.GridPosition).Returns(new Vector2Int(15, 13));
            combatManagerMock.Setup(f => f.PlayerEntersTile(It.Is <Vector2Int>(v2 => v2 == new Vector2Int(15, 13)))).Returns(false);
            DetermineStepState state = new DetermineStepState(playerMock.Object);

            playerMock.Setup(f => f.RequestLookAt(It.IsAny <Vector2Int>())).Callback <Vector2Int>(v2 => state.HandleEvent(new DetermineStepState.TurningFinishedEvent()));
            state.OnEntry();

            Assert.IsTrue(state.OnDuring() is GoToTargetState);
        }
        public void ShouldProgressOnEvent()
        {
            playerMock.Setup(f => f.HasNextStep()).Returns(true);
            playerMock.Setup(f => f.GetNextStep()).Returns(new Vector2Int(15, 13));
            DetermineStepState state = new DetermineStepState(playerMock.Object);

            state.OnEntry();
            Assert.IsNull(state.OnDuring());

            for (int i = 0; i < 10; i++)
            {
                // spin to show we're not changing
                Assert.IsNull(state.OnDuring());
            }

            state.HandleEvent(new DetermineStepState.TurningFinishedEvent());
            Assert.IsNotNull(state.OnDuring());
        }