public void GivenInitativeCostLessThanCurrentInitiative_ThenCurrentInitiativeDecrementedAndActionRun()
            {
                // arrange
                var character    = new Character();
                var bag          = new DiceBag();
                var mockAction   = new Mock <IInitiativeAction>(MockBehavior.Strict);
                var actionResult = new ActionResult("", new DicePoolResults(new List <int>()));
                var cost         = new InitiativeCost()
                {
                    Cost = 5, IsCostRequired = false
                };
                var actual = new InitiativePassSlot()
                {
                    Participant       = character,
                    CurrentInitiative = 7
                };

                mockAction.Setup(x => x.InitiativeCost)
                .Returns(cost);
                mockAction.Setup(x => x.Do(bag, character))
                .Returns(actionResult);

                // act
                actual.PerformAction(bag, mockAction.Object);

                // assert
                Assert.AreEqual(2, actual.CurrentInitiative);
                mockAction.Verify(x => x.Do(bag, character), Times.Once);
            }
            public void GivenActionIsNull_ThrowArgumentNullException()
            {
                // arrange
                var actual = new InitiativePassSlot();

                // act
                actual.PerformAction(new DiceBag(), null);

                // assert
                Assert.Fail("ArgumentNullException should have been thrown.");
            }
            public void GivenDiceBagIsNull_ThrowArgumentNullException()
            {
                // arrange
                var mockAction = new Mock <IInitiativeAction>(MockBehavior.Strict);
                var actual     = new InitiativePassSlot();

                // act
                actual.PerformAction(null, mockAction.Object);

                // assert
                Assert.Fail("ArgumentNullException should have been thrown.");
            }
            public void GivenCurrentInitiativeIsNegative_ThrowInvalidOperationException()
            {
                // arrange
                var mockAction = new Mock <IInitiativeAction>(MockBehavior.Strict);
                var actual     = new InitiativePassSlot()
                {
                    CurrentInitiative = -1
                };

                // act
                actual.PerformAction(new DiceBag(), mockAction.Object);

                // assert
                Assert.Fail("InvalidOperationException should have been thrown.");
            }
            public void GivenInitiativeCostGreaterThanCurrentInitiativeAndCostIsRequired_ThrowInvalidOperationException()
            {
                // arrange
                var mockAction = new Mock <IInitiativeAction>(MockBehavior.Strict);
                var cost       = new InitiativeCost()
                {
                    Cost = 2, IsCostRequired = true
                };
                var actual = new InitiativePassSlot()
                {
                    CurrentInitiative = 1
                };

                mockAction.Setup(x => x.InitiativeCost)
                .Returns(cost);

                // act
                actual.PerformAction(new DiceBag(), mockAction.Object);

                // assert
                Assert.Fail("InvalidOperationException should have been thrown.");
            }