public void GivenClericAndPyromancerOnboard_WhenPlayerCastsCoinAndCircleOfHealing_ThenClericDrawsTwoCards()
        {
            var cleric     = Minions.NorthshireCleric.AsOnboard();
            var pyromancer = Minions.WildPyromancer.AsOnboard();
            var gameState  = GameState.Empty.With(PlayerGameState.Empty.With(_player,
                                                                             minions: x => x.AddRange(new[] { cleric, pyromancer }),
                                                                             hand: x => x.With(new[] { Spells.TheCoin, Spells.CircleOfHealing }),
                                                                             deck: x => x.With(new[] { Minions.BloodfenRaptor, Minions.BoulderfistOgre })));
            var coinAction   = new CastSpellTargetless(_player, Spells.TheCoin);
            var circleAction = new CastSpellTargetless(_player, Spells.CircleOfHealing);

            var newState = _testee.ApplyAction(gameState, coinAction);

            newState = _testee.ApplyAction(newState, circleAction);

            var newHand  = newState.Of(_player).Hand;
            var newBoard = newState.Of(_player).Minions;

            Assert.IsTrue(newHand.Count() == 2);
            Assert.IsTrue(newHand.First() == Minions.BloodfenRaptor);
            Assert.IsTrue(newHand.Last() == Minions.BoulderfistOgre);
            Assert.IsTrue(newBoard.Count == 2);
            Assert.IsTrue(newBoard.First().Health == Minions.NorthshireCleric.Health - 1);
            Assert.IsTrue(newBoard.Last().Health == Minions.WildPyromancer.Health - 1);
        }
        public void GivenOneMinionOnboard_WhenCastsMirrorImage_ThenImagesAreSummonedOnTheRightSideOfBoard()
        {
            var gameState = GameState.Empty.With(
                PlayerGameState.Empty.With(_player, minions: x => x.Add(new Minion(Minions.BloodfenRaptor)), hand: x => x.AddCard(Spells.MirrorImage), remainingMana: x => 10));

            var spellCastAction = new CastSpellTargetless(_player, Spells.MirrorImage);

            var newState = _testee.ApplyAction(gameState, spellCastAction);

            var onBoardMinions = newState.Of(_player).Minions;

            Assert.IsTrue(onBoardMinions.Count == 3);
            Assert.IsTrue(IsSimilar(onBoardMinions[0], Minions.BloodfenRaptor));
            Assert.IsTrue(IsSimilar(onBoardMinions[1], Minions.Uncollectible.MirrorImage));
            Assert.IsTrue(IsSimilar(onBoardMinions[2], Minions.Uncollectible.MirrorImage));
        }