public void WindfuryWeapon()
		{
			var hero = new BoardHero(
				_hero.Attack(2).ToEntity(),
				_weapon.Attack(2).Durability(8).Windfury().ToEntity(), 
				true);
			Assert.AreEqual(4, hero.Attack);
		}
		public void WindfuryWeaponAttackSingleCharge()
		{
			var hero = new BoardHero(
				_hero.Attack(6).ToEntity(),
				_weapon.Attack(6).Durability(2).Damage(1).Windfury().ToEntity(),
				true);
			Assert.AreEqual(6, hero.Attack);
		}
		// TODO: optimize this somehow
		public PlayerBoard(List<CardEntity> list, bool activeTurn)
		{
			Cards = new List<IBoardEntity>();
			var filtered = Filter(list);
			var weapon = GetWeapon(filtered);
			foreach(var card in filtered)
			{
				if(card.Entity.IsHero)
				{
					Hero = new BoardHero(card, weapon, activeTurn);
					Cards.Add(Hero);
				}
				else
					Cards.Add(new BoardCard(card, activeTurn));
			}
		}
        // TODO: optimize this somehow
        public PlayerBoard(List <CardEntity> list, bool activeTurn)
        {
            _cards = new List <BoardEntity>();
            var filtered = Filter(list);
            var weapon   = GetWeapon(filtered);

            foreach (var card in filtered)
            {
                if (card.Entity.IsHero)
                {
                    Hero = new BoardHero(card, weapon, activeTurn);
                    _cards.Add(Hero);
                }
                else
                {
                    _cards.Add(new BoardCard(card, activeTurn));
                }
            }
        }
		public void WindfuryWeaponAttackAttackedOnce()
		{
			var hero = new BoardHero(
				_hero.Attack(6).AttacksThisTurn(1).ToEntity(),
				_weapon.Attack(6).Windfury().ToEntity(),
				true);
			Assert.AreEqual(6, hero.Attack);
		}
		public void Attack()
		{
			var hero = new BoardHero(_hero.Attack(6).ToEntity(), null, true);
			Assert.AreEqual(6, hero.Attack);
		}
		public void DontInclude_IfNotActive()
		{
			var hero = new BoardHero(_hero.ToEntity(), null, false);
			Assert.IsFalse(hero.Include);
		}
		public void Include_IfActive()
		{
			var hero = new BoardHero(_hero.ToEntity(), null, true);
			Assert.IsTrue(hero.Include);
		}
		public void WeaponNotEquipped()
		{
			var hero = new BoardHero(_hero.ToEntity(), null, true);
			Assert.IsFalse(hero.HasWeapon);
		}
		public void WeaponEquipped()
		{
			var hero = new BoardHero(_hero.ToEntity(), _weapon.ToEntity(), true);
			Assert.IsTrue(hero.HasWeapon);
		}
		public void HealthWithArmor()
		{
			var hero = new BoardHero(_hero.Armor(4).Damage(14).ToEntity(), null, true);
			Assert.AreEqual(20, hero.Health);
		}
		public void HealthNoArmor()
		{
			var hero = new BoardHero(_hero.Damage(6).ToEntity(), null, true);
			Assert.AreEqual(24, hero.Health);
		}