public void NoTactics_ResultGivenBack()
        {
            var results = new TacticsApplication(_outcome, 0).Get();

            Assert.Single(results);
            Assert.Equal(_outcome, results[0]);
        }
        public void OneTacticsWithNoApplicableToken_OneOpenTactics()
        {
            var results = new TacticsApplication(_outcome, 1).Get();

            Assert.Single(results);
            Assert.Single(results[0].Tokens);
            Assert.Equal(RawTokenType.OpenTactics, results[0].Tokens[0].Type);
        }
        public void OpenTacticsWithHigherQuantityOpenTactics_QuantityNotCopied()
        {
            _outcome.Tokens.Add(new RawTokenResult {
                Type = RawTokenType.OpenTactics, Quantity = 2
            });

            var results = new TacticsApplication(_outcome, 1).Get();

            Assert.Equal(1, results[0].Tokens[1].Quantity);
        }
        public void TacticsCopiesTwoDamage_QuantityCopied()
        {
            _outcome.Tokens.Add(new RawTokenResult {
                Type = RawTokenType.Damage, Quantity = 2
            });

            var results = new TacticsApplication(_outcome, 1).Get();

            Assert.Equal(2, results[0].Tokens[1].Quantity);
        }
        public void TwoTacticsWithTwoValueTypes_ThreeResultsProduced(int tactics, int expectedResults)
        {
            _outcome.Tokens.Add(new RawTokenResult {
                Type = RawTokenType.Damage
            });
            _outcome.Tokens.Add(new RawTokenResult {
                Type = RawTokenType.Block
            });

            var results = new TacticsApplication(_outcome, tactics).Get();

            Assert.Equal(expectedResults, results.Count);
        }
        public void TacticsWithOneOtherToken_CorrectType(RawTokenType existingTokenType, RawTokenType expectedTacticsType, bool wasTactics)
        {
            _outcome.Tokens.Add(new RawTokenResult {
                Type = existingTokenType
            });

            var results = new TacticsApplication(_outcome, 1).Get();

            Assert.Single(results);
            Assert.Equal(2, results[0].Tokens.Count);
            Assert.Equal(expectedTacticsType, results[0].Tokens[1].Type);
            Assert.Equal(wasTactics, results[0].Tokens[1].WasTactics);
        }
        public void TacticsWithMultipleValueTypes_EachPermutationProduced()
        {
            _outcome.Tokens.Add(new RawTokenResult {
                Type = RawTokenType.Damage
            });
            _outcome.Tokens.Add(new RawTokenResult {
                Type = RawTokenType.Block
            });

            var results = new TacticsApplication(_outcome, 1).Get();

            Assert.Contains(results, x => x.Tokens[2].Type == RawTokenType.Damage);
            Assert.Contains(results, x => x.Tokens[2].Type == RawTokenType.Block);
        }