def test_submission_scoring_forced_best_to_leaderboard_does_not_put_lower_score_on_leaderboard_when_descending(
            self):
        self.competition.force_submission_to_leaderboard = True
        self.competition.disallow_leaderboard_modifying = True
        self.competition.save()
        self.phase_1.force_best_submission_to_leaderboard = True
        self.phase_1.save()
        SubmissionScore.objects.create(
            result=self.submission_4,
            scoredef=self.score_def,
            value=120,
        )
        push_submission_to_leaderboard_if_best(self.submission_4)

        assert not PhaseLeaderBoardEntry.objects.filter(
            board=self.leader_board, result=self.submission_4)
    def test_submission_scoring_forced_best_to_leaderboard_exact_conditions(
            self):
        self.competition.force_submission_to_leaderboard = True
        self.competition.disallow_leaderboard_modifying = True
        self.competition.save()
        self.phase_1.force_best_submission_to_leaderboard = True
        self.phase_1.save()

        # Score def 2
        self.result_group2 = SubmissionResultGroup.objects.create(
            competition=self.competition,
            key="Key2",
            label=u"Test2 \u2020",
            ordering=2)
        self.submission_result_group_phase = SubmissionResultGroupPhase.objects.create(
            phase=self.phase_1, group=self.result_group2)
        self.score_def2 = SubmissionScoreDef.objects.create(
            competition=self.competition,
            key="Key2",
            label=u"Test2 \u2020",
            sorting='desc',
            ordering=2)
        SubmissionScoreDefGroup.objects.create(scoredef=self.score_def2,
                                               group=self.result_group2)

        # Score def 3
        self.resultgroup3 = SubmissionResultGroup.objects.create(
            competition=self.competition,
            key="Key3",
            label=u"Test3 \u2020",
            ordering=3)
        self.submission_result_group_phase = SubmissionResultGroupPhase.objects.create(
            phase=self.phase_1, group=self.resultgroup3)
        self.score_def3 = SubmissionScoreDef.objects.create(
            competition=self.competition,
            key="Key3",
            label=u"Test3 \u2020",
            sorting='asc',
            ordering=3)
        SubmissionScoreDefGroup.objects.create(scoredef=self.score_def3,
                                               group=self.resultgroup3)

        # Score def 4
        self.resultgroup4 = SubmissionResultGroup.objects.create(
            competition=self.competition,
            key="Key4",
            label=u"Test4 \u2020",
            ordering=4)
        self.submission_result_group_phase = SubmissionResultGroupPhase.objects.create(
            phase=self.phase_1, group=self.resultgroup4)
        self.score_def4 = SubmissionScoreDef.objects.create(
            competition=self.competition,
            key="Key4",
            label=u"Test4 \u2020",
            sorting='asc',
            ordering=4)
        SubmissionScoreDefGroup.objects.create(scoredef=self.score_def4,
                                               group=self.resultgroup4)

        # Score def 5
        self.resultgroup5 = SubmissionResultGroup.objects.create(
            competition=self.competition,
            key="Key5",
            label=u"Test5 \u2020",
            ordering=5)
        self.submission_result_group_phase = SubmissionResultGroupPhase.objects.create(
            phase=self.phase_1, group=self.resultgroup5)
        self.score_def5 = SubmissionScoreDef.objects.create(
            competition=self.competition,
            key="Key5",
            label=u"Test5 \u2020",
            sorting='desc',
            ordering=5)
        SubmissionScoreDefGroup.objects.create(scoredef=self.score_def5,
                                               group=self.resultgroup5)

        # Score def 6
        self.resultgroup6 = SubmissionResultGroup.objects.create(
            competition=self.competition,
            key="Key6",
            label=u"Test6 \u2020",
            ordering=6)
        self.submission_result_group_phase = SubmissionResultGroupPhase.objects.create(
            phase=self.phase_1, group=self.resultgroup6)
        self.score_def6 = SubmissionScoreDef.objects.create(
            competition=self.competition,
            key="Key6",
            label=u"Test6 \u2020",
            sorting='desc',
            ordering=6)
        SubmissionScoreDefGroup.objects.create(scoredef=self.score_def6,
                                               group=self.resultgroup6)

        # score def 7
        self.resultgroup7 = SubmissionResultGroup.objects.create(
            competition=self.competition,
            key="Key7",
            label=u"Test7 \u2020",
            ordering=7)
        self.submission_result_group_phase = SubmissionResultGroupPhase.objects.create(
            phase=self.phase_1, group=self.resultgroup7)
        self.score_def7 = SubmissionScoreDef.objects.create(
            competition=self.competition,
            key="Key7",
            label=u"Test7 \u2020",
            sorting='desc',
            ordering=7)
        SubmissionScoreDefGroup.objects.create(scoredef=self.score_def7,
                                               group=self.resultgroup7)

        submission_finished = CompetitionSubmissionStatus.objects.get(
            name="finished", codename="finished")

        self.sub_test = CompetitionSubmission.objects.create(
            participant=self.participant_1,
            phase=self.phase_1,
            status=submission_finished,
            submitted_at=datetime.datetime.now() - datetime.timedelta(days=29))
        SubmissionScore.objects.create(result=self.sub_test,
                                       scoredef=self.score_def,
                                       value=float(1.0510))
        SubmissionScore.objects.create(result=self.sub_test,
                                       scoredef=self.score_def2,
                                       value=0.5)
        SubmissionScore.objects.create(result=self.sub_test,
                                       scoredef=self.score_def3,
                                       value=1.0)
        SubmissionScore.objects.create(result=self.sub_test,
                                       scoredef=self.score_def4,
                                       value=1.0)
        SubmissionScore.objects.create(result=self.sub_test,
                                       scoredef=self.score_def5,
                                       value=1.0)
        SubmissionScore.objects.create(result=self.sub_test,
                                       scoredef=self.score_def6,
                                       value=1.0)
        SubmissionScore.objects.create(result=self.sub_test,
                                       scoredef=self.score_def7,
                                       value=1.0)

        add_submission_to_leaderboard(self.sub_test)

        print(
            PhaseLeaderBoardEntry.objects.filter(
                board=self.leader_board,
                result__participant=self.participant_1).first().result)

        self.sub_test_two = CompetitionSubmission.objects.create(
            participant=self.participant_1,
            phase=self.phase_1,
            status=submission_finished,
            submitted_at=datetime.datetime.now() - datetime.timedelta(days=29))
        SubmissionScore.objects.create(result=self.sub_test_two,
                                       scoredef=self.score_def,
                                       value=float(1.0533))
        SubmissionScore.objects.create(result=self.sub_test_two,
                                       scoredef=self.score_def2,
                                       value=0.4)
        SubmissionScore.objects.create(result=self.sub_test_two,
                                       scoredef=self.score_def3,
                                       value=0.65)
        SubmissionScore.objects.create(result=self.sub_test_two,
                                       scoredef=self.score_def4,
                                       value=0.65)
        SubmissionScore.objects.create(result=self.sub_test_two,
                                       scoredef=self.score_def5,
                                       value=0.65)
        SubmissionScore.objects.create(result=self.sub_test_two,
                                       scoredef=self.score_def6,
                                       value=0.65)
        SubmissionScore.objects.create(result=self.sub_test_two,
                                       scoredef=self.score_def7,
                                       value=0.65)

        push_submission_to_leaderboard_if_best(self.sub_test_two)
        # result__participant = self.participant_1).first().result)
        assert PhaseLeaderBoardEntry.objects.filter(board=self.leader_board,
                                                    result=self.sub_test_two)