예제 #1
0
    def test_invalidate_view(self):
        contest = Contest.objects.get()
        url = reverse('ranking_invalidate',
                      kwargs={
                          'contest_id': contest.id,
                          'key': 'key'
                      })

        self.assertTrue(self.client.login(username='******'))
        with fake_time(datetime(2019, 1, 27, tzinfo=utc)):
            check_not_accessible(self, url)

        self.assertTrue(self.client.login(username='******'))
        with fake_time(datetime(2019, 1, 27, tzinfo=utc)):
            ranking, _ = Ranking.objects.get_or_create(
                contest=contest, key='admin#key', needs_recalculation=False)
            ranking.save()
            self.assertTrue(ranking.is_up_to_date())
            recalc = choose_for_recalculation()
            self.assertIsNone(recalc)
            response = self.client.post(url, key='key')
            ranking.refresh_from_db()
            self.assertFalse(ranking.is_up_to_date())
            recalc = choose_for_recalculation()
            self.assertIsNotNone(recalc)
예제 #2
0
파일: tests.py 프로젝트: pragacz/oioioi
    def test_invalidate_preferences_saved(self):
        # PreferencesSaved signal is sent after user changes their preferences
        # (like name), so we need to test that ranking is invalidated after
        # this signal is broadcasted
        class MockSender:
            def __init__(self):
                self.cleaned_data = {'terms_accepted': True}

        from oioioi.base.models import PreferencesSaved
        result = UserResultForProblem.objects.first()
        sender = MockSender()
        contest = Contest.objects.get()
        contest.controller_name = \
            'oioioi.rankings.tests.MockRankingContestController'
        contest.save()
        ranking, _ = Ranking.objects.get_or_create(contest=contest, key='key',
            needs_recalculation=False)
        ranking.save()
        self.assertTrue(ranking.is_up_to_date())
        recalc = choose_for_recalculation()
        self.assertIsNone(recalc)
        PreferencesSaved.send(sender, user=result.user)
        ranking.refresh_from_db()
        self.assertFalse(ranking.is_up_to_date())
        recalc = choose_for_recalculation()
        self.assertIsNotNone(recalc)
예제 #3
0
파일: rankingsd.py 프로젝트: wczyz/oioioi
 def handle(self, *args, **options):
     while True:
         r = choose_for_recalculation()
         if r:
             recalculate(r)
         else:
             time.sleep(settings.RANKINGSD_POLLING_INTERVAL)
예제 #4
0
파일: tests.py 프로젝트: pragacz/oioioi
 def test_simple_invalidate(self):
     contest = Contest.objects.get()
     contest.controller_name = \
         'oioioi.rankings.tests.MockRankingContestController'
     contest.save()
     ranking, _ = Ranking.objects.get_or_create(contest=contest, key='key',
         needs_recalculation=False)
     ranking.save()
     self.assertTrue(ranking.is_up_to_date())
     recalc = choose_for_recalculation()
     self.assertIsNone(recalc)
     Ranking.invalidate_contest(contest)
     ranking.refresh_from_db()
     self.assertFalse(ranking.is_up_to_date())
     recalc = choose_for_recalculation()
     self.assertIsNotNone(recalc)
예제 #5
0
 def handle(self, *args, **options):
     while True:
         r = choose_for_recalculation()
         if r:
             recalculate(r)
         else:
             time.sleep(settings.RANKINGSD_POLLING_INTERVAL)
예제 #6
0
 def test_simple_invalidate(self):
     contest = Contest.objects.get()
     contest.controller_name = \
         'oioioi.rankings.tests.MockRankingContestController'
     contest.save()
     ranking, _ = Ranking.objects.get_or_create(contest=contest, key='key',
         needs_recalculation=False)
     ranking.save()
     self.assertTrue(ranking.is_up_to_date())
     recalc = choose_for_recalculation()
     self.assertIsNone(recalc)
     Ranking.invalidate_contest(contest)
     ranking.refresh_from_db()
     self.assertFalse(ranking.is_up_to_date())
     recalc = choose_for_recalculation()
     self.assertIsNotNone(recalc)
예제 #7
0
 def test_simple_flow(self):
     contest = Contest.objects.get()
     contest.controller_name = 'oioioi.rankings.tests.MockRankingContestController'
     contest.save()
     ranking, _ = Ranking.objects.get_or_create(contest=contest, key='key')
     ranking.save()
     self.assertFalse(ranking.is_up_to_date())
     recalc = choose_for_recalculation()
     self.assertIsNotNone(recalc)
     self.assertIsNotNone(recalc.id)
     ranking.refresh_from_db()
     self.assertFalse(ranking.is_up_to_date())
     recalculate(recalc)
     ranking.refresh_from_db()
     self.assertTrue(ranking.is_up_to_date())
     self.assertEqual(ranking.serialized, 'serialized')
     self.assertEqual([page.data for page in ranking.pages.all()],
                      ['1st', '2nd', '3rd'])
     self.assertEqual([page.nr for page in ranking.pages.all()], [1, 2, 3])
예제 #8
0
 def test_simple_flow(self):
     contest = Contest.objects.get()
     contest.controller_name = \
         'oioioi.rankings.tests.MockRankingContestController'
     contest.save()
     ranking, _ = Ranking.objects.get_or_create(contest=contest, key='key')
     ranking.save()
     self.assertFalse(ranking.is_up_to_date())
     recalc = choose_for_recalculation()
     self.assertIsNotNone(recalc)
     self.assertIsNotNone(recalc.id)
     ranking.refresh_from_db()
     self.assertFalse(ranking.is_up_to_date())
     recalculate(recalc)
     ranking.refresh_from_db()
     self.assertTrue(ranking.is_up_to_date())
     self.assertEqual(ranking.serialized, 'serialized')
     self.assertEqual([page.data for page in ranking.pages.all()],
                      ['1st', '2nd', '3rd'])
     self.assertEqual([page.nr for page in ranking.pages.all()],
                      [1, 2, 3])