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)
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)
def handle(self, *args, **options): while True: r = choose_for_recalculation() if r: recalculate(r) else: time.sleep(settings.RANKINGSD_POLLING_INTERVAL)
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)
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])
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])