class PointsController(): results_controller = None def __init__(self): self.results_controller = ResultsController() def team_points_for_team(self, team, round): result = self.results_controller.result_for_team(team, round) debate = result.debate if debate.OG == team: return result.og if debate.OO == team: return result.oo if debate.CG == team: return result.cg if debate.CO == team: return result.co def total_points_for_team(self, team, maxround): total = 0 for round in range(1, maxround+1): total += self.team_points_for_team(team, round) return total def speaker_points_for_team(self, team, round): result = self.results_controller.result_for_team(team, round) debate = result.debate if debate.OG == team: return [result.ogsp1, result.ogsp2] if debate.OO == team: return [result.oosp1, result.oosp2] if debate.CG == team: return [result.cgsp1, result.cgsp2] if debate.CO == team: return [result.cosp1, result.cosp2] def team_points_map_for_round(self, round, teams): points = {} for team in teams: points.update({team: self.team_points_for_team(team, round)}) return points
class ResultControllerTestCase(TestCase): def setUp(self): self.resultController = ResultsController() self.result = Result() self.debate = MagicMock() self.debateController = MagicMock() self.team = MagicMock self.debateController.debate_for_round.return_value = self.debate self.debate.result.return_value = self.result self.resultController.debate_controller = self.debateController def testRaisesExceptionForRoundNotDrawn(self): tournament = Tournament.instance() tournament.round = 1 tournament.save() with self.assertRaises(TournamentStateException): self.resultController.results_entered_for_round(10) def testReturnsFalseForRoundWithoutAnyResults(self): generate_objects.setup_IV_R1() self.assertFalse(self.resultController.results_entered_for_round(1), "No results entered but returned true") def testReturnsTrueForRoundWithAllResults(self): generate_objects.setup_IV_R1() for debate in Debate.objects.filter(round=1): generate_objects.valid_result_given_debate(debate) self.assertTrue(self.resultController.results_entered_for_round(1), "All results entered but returned false") def testReturnsFalseForPartiallyEnteredRound(self): generate_objects.setup_IV_R1() generate_objects.valid_result_given_debate(Debate.objects.first()) self.assertFalse(self.resultController.results_entered_for_round(1), "Only some results entered but returned true") def testGetResultForRound(self): return_value = self.resultController.result_for_team(self.team, 1) self.assertEqual(self.debate.result, return_value)