public void GetDamageTest_1_Energy()
        {
            var attack = new ExtraForUnusedEnergy()
            {
                Damage          = 10,
                MaxExtraDamage  = 20,
                AmountPerEnergy = 10,
                EnergyType      = EnergyTypes.Water,
                Cost            = new ObservableCollection <Energy>
                {
                    new Energy(EnergyTypes.Water, 1)
                }
            };

            var owner = new PokemonCard()
            {
                Attacks = new ObservableCollection <Attack>
                {
                    attack
                }
            };

            owner.AttachedEnergy.Add(new EnergyCard()
            {
                Amount = 1, EnergyType = EnergyTypes.Water
            });

            var player = new Player();

            player.ActivePokemonCard = owner;

            var damage = attack.GetDamage(player, null, null);

            Assert.Equal(10, damage.NormalDamage);
        }
        public void GetDamage_Discard_Extra(int attached, int expected)
        {
            var opponentPokemon = new PokemonCard()
            {
            };
            var opponent = new Player
            {
                ActivePokemonCard = opponentPokemon
            };
            var attack = new ExtraForUnusedEnergy()
            {
                Damage              = 20,
                MaxExtraDamage      = 265750,
                AmountPerEnergy     = 20,
                EnergyType          = EnergyTypes.Fire,
                DiscardUnusedEnergy = true,
                Cost = new ObservableCollection <Energy>
                {
                    new Energy(EnergyTypes.Fire, 1)
                }
            };

            var player = new Player()
            {
                ActivePokemonCard = new PokemonCard()
                {
                    Attacks = new ObservableCollection <Attack>
                    {
                        attack
                    }
                }
            };

            player.ActivePokemonCard.Owner = player;

            for (int i = 0; i < attached; i++)
            {
                player.ActivePokemonCard.AttachedEnergy.Add(new EnergyCard()
                {
                    Amount = 1, EnergyType = EnergyTypes.Fire
                });
            }

            Assert.Equal(expected, attack.GetDamage(player, opponent, new GameField()).NormalDamage);
            Assert.Single(player.ActivePokemonCard.AttachedEnergy);
        }
        public void Seadra_4_Extra(int attachedEnergy)
        {
            var attack = new ExtraForUnusedEnergy()
            {
                Damage          = 20,
                MaxExtraDamage  = 20,
                AmountPerEnergy = 10,
                EnergyType      = EnergyTypes.Water,
                Cost            = new ObservableCollection <Energy>
                {
                    new Energy(EnergyTypes.Water, 1),
                    new Energy(EnergyTypes.Colorless, 1),
                }
            };

            var owner = new PokemonCard()
            {
                Attacks = new ObservableCollection <Attack>
                {
                    attack
                }
            };

            for (int i = 0; i < attachedEnergy; i++)
            {
                owner.AttachedEnergy.Add(new EnergyCard()
                {
                    Amount = 1, EnergyType = EnergyTypes.Water
                });
            }

            var player = new Player();

            player.ActivePokemonCard = owner;

            var damage = attack.GetDamage(player, null, null);

            Assert.Equal(40, damage.NormalDamage);
        }