diff --git a/dungeonsheets/encounter/actions.py b/dungeonsheets/encounter/actions.py index a09e20f..a0da3a3 100644 --- a/dungeonsheets/encounter/actions.py +++ b/dungeonsheets/encounter/actions.py @@ -11,7 +11,7 @@ class Executable(ABC): @abstractmethod def execute(self, subj, obj=None): - return Event(self, subj, obj) + """Execute the given action""" class Action(Executable): diff --git a/dungeonsheets/encounter/encounter.py b/dungeonsheets/encounter/encounter.py index 548b07e..142e059 100644 --- a/dungeonsheets/encounter/encounter.py +++ b/dungeonsheets/encounter/encounter.py @@ -18,17 +18,14 @@ class Encounter: def allies(self, agent): """Who sides with the given agent in an encounter?""" if agent in self.group_a: - return list(set(self.group_a) - set(agent)) + return list(set(self.group_a) - set([agent])) else: - return list(set(self.group_b) - set(agent)) + return list(set(self.group_b) - set([agent])) def reset(self): self.events = [] self.long_rest() - def rating(self): - raise NotImplementedError() # Deadly for Python :/ - def simulate(self): """Who will win?""" @@ -48,6 +45,10 @@ class Encounter: return self.events # Should never get here -- self.is_encounter_over() will end it + def rating(self): + """Encounter Rating""" + raise NotImplementedError() + def is_encounter_over(self): """If all members of one party are at HP <= 0, it's over""" return ( diff --git a/tests/test_encounter.py b/tests/test_encounter.py index eac26d9..b8d98ac 100644 --- a/tests/test_encounter.py +++ b/tests/test_encounter.py @@ -15,8 +15,8 @@ from dungeonsheets.dice import roll class TestEncounter(TestCase): """Tests for features and feature-related activities.""" - def test_simple_rat_fight(self): - """A fight against a giant rat""" + def setUp(self): + char = SimpleRanger() class StravajiaxenAttack(Attack): @@ -24,8 +24,7 @@ class TestEncounter(TestCase): # creating a player character and classes def __init__(self, subj, obj): - self.subj = subj - self.obj = obj + super(StravajiaxenAttack, self).__init__(subj, obj) def execute(self): result = roll(20) + self.subj.dexterity.modifier + self.subj.proficiency_bonus @@ -42,8 +41,7 @@ class TestEncounter(TestCase): class GiantRatAttack(Attack): def __init__(self, subj, obj): - self.subj = subj - self.obj = obj + super(GiantRatAttack, self).__init__(subj, obj) def execute(self): result = roll(20) + 4 @@ -58,8 +56,26 @@ class TestEncounter(TestCase): enemy = GiantRat() enemy.name = "Nameless Rat" # I don't want things to be personal... enemy.default_actions.append(GiantRatAttack) + self.default_player = char + self.default_enemy = enemy - battle = Encounter([char], [enemy]) + def test_encounter_rating(self): + battle = Encounter([self.default_player], [self.default_enemy]) + self.assertRaises(NotImplementedError, battle.rating) + + def test_opponents(self): + battle = Encounter([self.default_player], [self.default_enemy]) + self.assertEqual([self.default_enemy], battle.opponents(self.default_player)) + self.assertEqual([self.default_player], battle.opponents(self.default_enemy)) + + def test_allies(self): + battle = Encounter([self.default_player], [self.default_enemy]) + self.assertEqual(0, len(battle.allies(self.default_player))) + self.assertEqual(0, len(battle.allies(self.default_enemy))) + + def test_simple_rat_fight(self): + """A fight against a giant rat""" + battle = Encounter([self.default_player], [self.default_enemy]) battle.reset() results = battle.simulate() for event in results: