class TestTallying(unittest.TestCase): def setUp(self): self.profile = Profile() self.floor = Floor() self.level = Level(self.profile, 1) self.level.floor = self.floor self.level.load_level = mock.Mock() self.level.is_failed = mock.Mock(return_value=False) self.level.floor.other_units = mock.Mock(return_value=[mock.Mock()]) self.warrior = mock.Mock(score=0, abilities={}) self.level.warrior = self.warrior def test_should_add_warrior_score_to_profile(self): self.warrior.score = 30 self.profile.score = 0 self.level.tally_points() self.assertEqual(self.profile.score, 30) def test_should_apply_warrior_abilities_to_profile(self): self.warrior.abilities = {'foo': None, 'bar': None} self.level.tally_points() self.assertEqual(['foo', 'bar'], self.profile.abilities) def test_should_apply_time_bonus_to_profile_score(self): self.level.time_bonus = 20 self.level.tally_points() self.assertEqual(20, self.profile.score) def test_should_give_20_percent_bonus_when_no_other_units_left(self): self.level.floor.other_units = mock.Mock(return_value=[]) self.warrior.score = 10 self.level.time_bonus = 10 self.level.tally_points() self.assertEqual(24, self.profile.score)