public void TestHooch()
        {
            var game        = CreateGame();
            var Hero        = game.Hero;
            var attack      = Hero.Stats[EntityStatKind.Strength].CurrentValue;
            var chanceToHit = Hero.Stats[EntityStatKind.ChanceToMeleeHit].CurrentValue;

            var hooch = new Hooch();
            //Assert.AreEqual(hooch.PrimaryStatDescription, "");
            var added = Hero.Inventory.Add(hooch);

            Hero.Consume(hooch);
            Assert.IsTrue(Hero.LastingEffects.Any());
            var le = Hero.LastingEffects.Where(i => i.Type == Roguelike.Effects.EffectType.Hooch);

            Assert.IsTrue(le.Any());

            Action assertGreater = () =>
            {
                var hoochAttack      = Hero.Stats[EntityStatKind.Strength];
                var hoochChanceToHit = Hero.Stats[EntityStatKind.ChanceToMeleeHit];
                Assert.Greater(hoochAttack.CurrentValue, attack);
                Assert.Less(hoochChanceToHit.CurrentValue, chanceToHit);
            };

            assertGreater();

            SkipTurns(1);

            //still on
            assertGreater();

            SkipTurns(6);

            //now shall be off
            Assert.IsFalse(le.Any());
            var hoochAttackAfter      = Hero.Stats[EntityStatKind.Strength];
            var hoochChanceToHitAfter = Hero.Stats[EntityStatKind.ChanceToMeleeHit];

            Assert.AreEqual(hoochAttackAfter.CurrentValue, attack);
            Assert.AreEqual(hoochChanceToHitAfter.CurrentValue, chanceToHit);
        }
        public void TestHoochDrunkTwice()
        {
            var game        = CreateGame();
            var Hero        = game.Hero;
            var attack      = Hero.Stats[EntityStatKind.Strength].CurrentValue;
            var chanceToHit = Hero.Stats[EntityStatKind.ChanceToMeleeHit].CurrentValue;

            var hooch = new Hooch();
            var added = Hero.Inventory.Add(hooch);

            Hero.Consume(hooch);
            Assert.IsTrue(Hero.LastingEffects.Any());
            var le = Hero.LastingEffects.Where(i => i.Type == Roguelike.Effects.EffectType.Hooch);

            Assert.IsTrue(le.Any());
            float strengthWithLE    = 0;
            float chanceToHitWithLE = 0;

            Action assertGreater = () =>
            {
                var hoochAttack      = Hero.Stats[EntityStatKind.Strength];
                var hoochChanceToHit = Hero.Stats[EntityStatKind.ChanceToMeleeHit];
                Assert.Greater(hoochAttack.CurrentValue, attack);
                Assert.Less(hoochChanceToHit.CurrentValue, chanceToHit);
                if (strengthWithLE == 0)
                {
                    strengthWithLE    = hoochAttack.CurrentValue;
                    chanceToHitWithLE = hoochChanceToHit.CurrentValue;
                }
            };

            assertGreater();

            SkipTurns(1);

            //still on
            assertGreater();

            hooch = new Hooch();
            added = Hero.Inventory.Add(hooch);
            Hero.Consume(hooch);

            //shall be same
            var str = Hero.Stats[EntityStatKind.Strength].CurrentValue;

            Assert.AreEqual(str, strengthWithLE);
            Assert.AreEqual(Hero.Stats[EntityStatKind.ChanceToMeleeHit].CurrentValue, chanceToHitWithLE);

            SkipTurns(6);

            //now shall be on - prolonged
            Assert.IsTrue(le.Any());
            SkipTurns(1);
            //now shall be off
            Assert.IsFalse(le.Any());
            var hoochAttackAfter      = Hero.Stats[EntityStatKind.Strength];
            var hoochChanceToHitAfter = Hero.Stats[EntityStatKind.ChanceToMeleeHit];

            Assert.AreEqual(hoochAttackAfter.CurrentValue, attack);
            Assert.AreEqual(hoochChanceToHitAfter.CurrentValue, chanceToHit);
        }