public void WaterHoleAddFoodCannotDecreaseFoodAmountBeyond0()
        {
            var wateringhole = new WateringHole();

            wateringhole.AddFood(10);

            Assert.AreEqual(10, wateringhole.FoodAmount);

            wateringhole.AddFood(-20);

            Assert.AreEqual(0, wateringhole.FoodAmount);
        }
        public void WaterHoleAddFoodDecreasesFoodAmountWhenNegativeValueIsAdded()
        {
            var wateringhole = new WateringHole();

            wateringhole.AddFood(10);

            Assert.AreEqual(10, wateringhole.FoodAmount);

            wateringhole.AddFood(-5);

            Assert.AreEqual(5, wateringhole.FoodAmount);
        }
        public void WateringHoleAddFoodIncreasesFoodAmount()
        {
            var wateringhole = new WateringHole();

            Assert.AreEqual(0, wateringhole.FoodAmount);

            wateringhole.AddFood(10);

            Assert.AreEqual(10, wateringhole.FoodAmount);

            wateringhole.AddFood(20);

            Assert.AreEqual(30, wateringhole.FoodAmount);
        }
        public void WaterholeCanNotBeEatenByPredatorWithFood()
        {
            var wateringhole = new WateringHole();
            var species      = new MockSpecies();

            wateringhole.AddFood(10);
            species.IsPredator = true;
            Assert.IsFalse(wateringhole.CanBeEatenBy(species));
            Assert.AreEqual(10, wateringhole.FoodAmount);
        }
        public void WaterHoleEatCannotEatAsPredator()
        {
            var wateringhole = new WateringHole();
            var species      = new MockSpecies();

            species.IsPredator = true;
            wateringhole.AddFood(10);
            Assert.ThrowsException <InvalidOperationException>(() => wateringhole.Eat(species));
            Assert.AreEqual(10, wateringhole.FoodAmount);
        }
        public void WaterHoleEatCanEat()
        {
            var wateringhole = new WateringHole();
            var species      = new MockSpecies();

            species.IsPredator = false;
            wateringhole.AddFood(10);
            var result = wateringhole.Eat(species);

            Assert.AreEqual(9, wateringhole.FoodAmount);
            Assert.AreEqual(1, result);
        }
        public void WaterHoleTryEatCanEat()
        {
            var wateringhole = new WateringHole();
            var species      = new MockSpecies();

            species.IsPredator = false;
            wateringhole.AddFood(10);
            Assert.AreEqual(10, wateringhole.FoodAmount);
            var result = wateringhole.TryEat(species, out int food);

            Assert.AreEqual(1, food);
            Assert.AreEqual(9, wateringhole.FoodAmount);
            Assert.IsTrue(result);
        }