public void Shield_PlusFive_Enchant()
        {
            // Arrange
            var armorEnhancementBonus = Mock.Of <IModifierTracker>();
            var mockShieldBonusAgg    = new Mock <IArmorClassAggregator>();

            mockShieldBonusAgg.Setup(agg => agg.EnhancementBonuses)
            .Returns(armorEnhancementBonus);
            IArmorClassAggregator shieldBonus = mockShieldBonusAgg.Object;

            var hardnessEnhancementBonus = Mock.Of <IModifierTracker>();
            var mockHardnessAgg          = new Mock <IHardnessAggregator>();

            mockHardnessAgg.Setup(agg => agg.EnhancementBonuses)
            .Returns(hardnessEnhancementBonus);
            IHardnessAggregator hardness = mockHardnessAgg.Object;

            var hitPointsEnhancementBonus = Mock.Of <IModifierTracker>();
            var mockHitPointAgg           = new Mock <IHitPointsAggregator>();

            mockHitPointAgg.Setup(agg => agg.EnhancementBonuses)
            .Returns(hitPointsEnhancementBonus);
            IHitPointsAggregator hitPoints = mockHitPointAgg.Object;

            IEnchantmentAggregator <IShieldEnchantment, Shield> enchantments = null;

            var shield = new Mock <Shield>(MockBehavior.Loose, shieldBonus, hardness, hitPoints, enchantments)
            {
                CallBase = true
            }.Object;

            IShieldEnchantment enchantment = new EnhancementBonus(5);

            // Act
            enchantment.Enchant(shield);

            // Assert
            Mock.Get(armorEnhancementBonus)
            .Verify(ac => ac.Add(It.Is <Func <byte> >(calc => 5 == calc())),
                    "A +5 bonus was not applied to the shield's armor class bonus correctly.");
            Mock.Get(hardnessEnhancementBonus)
            .Verify(bhn => bhn.Add(It.Is <Func <byte> >(calc => 10 == calc())),
                    "A +10 bonus was not applied to the shield's hardness correctly.");
            Mock.Get(hitPointsEnhancementBonus)
            .Verify(hp => hp.Add(It.Is <Func <byte> >(calc => 50 == calc())),
                    "A +50 bonus was not applied to the shield's hit points correctly.");
        }
        public void Armor_PlusOne_Enchant()
        {
            // Arrange
            var armorEnhancementBonus = Mock.Of <IModifierTracker>();
            var mockArmorBonusAgg     = new Mock <IArmorClassAggregator>();

            mockArmorBonusAgg.Setup(agg => agg.EnhancementBonuses)
            .Returns(armorEnhancementBonus);
            IArmorClassAggregator armorBonus = mockArmorBonusAgg.Object;

            var hardnessEnhancementBonus = Mock.Of <IModifierTracker>();
            var mockHardnessAgg          = new Mock <IHardnessAggregator>();

            mockHardnessAgg.Setup(agg => agg.EnhancementBonuses)
            .Returns(hardnessEnhancementBonus);
            IHardnessAggregator hardness = mockHardnessAgg.Object;

            var hitPointsEnhancementBonus = Mock.Of <IModifierTracker>();
            var mockHitPointAgg           = new Mock <IHitPointsAggregator>();

            mockHitPointAgg.Setup(agg => agg.EnhancementBonuses)
            .Returns(hitPointsEnhancementBonus);
            IHitPointsAggregator hitPoints = mockHitPointAgg.Object;

            var armor = new Mock <Core.Domain.Items.Armor.Armor>(MockBehavior.Loose, armorBonus, hardness, hitPoints, null)
            {
                CallBase = true
            }.Object;

            IArmorEnchantment enchantment = new EnhancementBonus(1);

            // Act
            enchantment.Enchant(armor);

            // Assert
            Mock.Get(armorEnhancementBonus)
            .Verify(ac => ac.Add(It.Is <Func <byte> >(calc => 1 == calc())),
                    "A +1 bonus was not applied to the armor's armor class bonus correctly.");
            Mock.Get(hardnessEnhancementBonus)
            .Verify(bhn => bhn.Add(It.Is <Func <byte> >(calc => 2 == calc())),
                    "A +2 bonus was not applied to the armor's hardness correctly.");
            Mock.Get(hitPointsEnhancementBonus)
            .Verify(hp => hp.Add(It.Is <Func <byte> >(calc => 10 == calc())),
                    "A +10 bonus was not applied to the armor's hit points correctly.");
        }