def setUp(self):
     super(TestScoreEntered, self).setUp()
     self.injector.inject(self.tourn_1, num_players=5)
     tourn = Tournament(self.tourn_1)
     tourn.update({
         'rounds': 2,
         'missions': ['foo_mission_1', 'foo_mission_2']
     })
     tourn.make_draws()
    def test_enter_score(self):
        """
        Enter a score for an entry
        """
        entry = TournamentEntry.query.filter_by(
            player_id=self.player, tournament_id=self.tourn_1).first()
        tourn = Tournament(self.tourn_1)

        # a one-off score
        Score(category=self.cat_1.name, tournament=tourn, entry_id=entry.id,
              score=0).write()
        scores = TournamentScore.query.\
            filter_by(entry_id=entry.id, tournament_id=tourn.get_dao().id).all()
        compare(len(scores), 1)
        compare(scores[0].score.value, 0)

        # a per_round score
        tourn.make_draws()

        round_id = TournamentRound.query.\
            filter_by(tournament_name=self.tourn_1, ordering=2).first().id
        game_id = TournamentGame.query.join(GameEntrant).\
            filter(and_(GameEntrant.entrant_id == entry.id,
                        TournamentGame.tournament_round_id == round_id)).\
                first().id
        Score(category=self.category_2.name, tournament=tourn, game_id=game_id,
              entry_id=entry.id, score=17).write()
        scores = GameScore.query.\
            filter_by(entry_id=entry.id, game_id=game_id).all()
        compare(len(scores), 1)
        compare(scores[0].score.value, 17)

        # score already entered
        score = Score(tournament=tourn, entry_id=entry.id, score=100,
                      category=self.cat_1.name)
        self.assertRaises(ValueError, score.write)

        score = Score(tournament=tourn, entry_id=entry.id, score=100,
                      category=self.category_2.name, game_id=game_id)
        self.assertRaises(ValueError, score.write)