def test_effect_end(self):
     error = "StatusEffect wasn't removed upon duration end"
     buff = GenericBuff()
     elemental = CombatElementalBuilder().build()
     elemental.add_status_effect(buff)
     for i in range(buff.turns_remaining):
         elemental.end_turn()
     self.assertEqual(elemental.num_status_effects, 0, error)
 def test_defend_duration(self):
     error = "Defend ended prematurely"
     elemental = CombatElementalBuilder().build()
     defend = DefendEffect()
     elemental.add_status_effect(defend)
     elemental.end_turn()
     num_effects = elemental.num_status_effects
     self.assertEqual(num_effects, 1, error)
 def test_effect_duration_decrement(self):
     error = "StatusEffect duration didn't decrement on turn end"
     buff = EnrageEffect()
     elemental = CombatElementalBuilder().build()
     elemental.add_status_effect(buff)
     duration_before = buff.turns_remaining
     elemental.end_turn()
     self.assertLess(buff.turns_remaining, duration_before, error)
 def test_perma_buff(self):
     error = "A StatusEffect with no duration could incorrectly be decremented"
     elemental = CombatElementalBuilder().build()
     buff = PermaBuff()
     elemental.add_status_effect(buff)
     duration_before = buff.turns_remaining
     elemental.end_turn()  # Remove the effect via duration end
     duration_after = buff.turns_remaining
     self.assertEqual(duration_after, duration_before, error)
 def test_effect_stats_consistency(self):
     error = "Stats gained from a buff incorrectly changed across its duration"
     elemental = CombatElementalBuilder().build()
     buff = GenericBuff()
     elemental.add_status_effect(buff)
     physical_att_before = elemental.physical_att
     elemental.end_turn()  # Remove the effect via duration end
     physical_att_after = elemental.physical_att
     self.assertEqual(physical_att_before, physical_att_after, error)
 def test_unstackable_effect_refresh(self):
     error = "A !can_add_instances StatusEffect didn't refresh its effect's duration when reapplied"
     buff = GenericBuff()
     same_buff = GenericBuff()
     elemental = CombatElementalBuilder().build()
     elemental.add_status_effect(buff)
     duration_before = buff.turns_remaining
     elemental.end_turn()
     elemental.add_status_effect(same_buff)
     self.assertEqual(duration_before, buff.turns_remaining, error)
 def test_effect_stats_end(self):
     error = "Stats change persisted even after the effect ended"
     elemental = CombatElementalBuilder().build()
     physical_att_before = elemental.physical_att
     buff = GenericBuff()
     elemental.add_status_effect(buff)
     for i in range(buff.turns_remaining):
         elemental.end_turn()  # Remove the effect via duration end
     physical_att_after = elemental.physical_att
     self.assertEqual(physical_att_before, physical_att_after, error)
 def test_stonehide_debuff_duration(self):
     error = "Stonehide charge didn't decrement upon receiving damage from a debuff"
     elemental = CombatElementalBuilder().build()
     stonehide = StonehideEffect()
     stonehide.applier = elemental
     elemental.add_status_effect(stonehide)
     rend = RendEffect()
     rend.applier = CombatElementalBuilder().build()
     elemental.add_status_effect(rend)
     elemental.end_turn()
     self.assertEqual(stonehide.charges, 3, error)
 def test_enrage(self):
     error = "Enrage didn't increase damage output"
     elemental = CombatElementalBuilder().build()
     combat = get_mocked_combat()
     combat.get_target = MagicMock(
         return_value=CombatElementalBuilder().build())
     before_buff = ElementalAction(elemental, Claw(), combat)
     before_buff._refresh_target()
     before_buff.execute()
     elemental.add_status_effect(EnrageEffect())
     elemental.end_turn()
     after_buff = ElementalAction(elemental, Claw(), combat)
     after_buff._refresh_target()
     after_buff.execute()
     self.assertGreater(after_buff.final_damage, before_buff.final_damage,
                        error)