Ejemplo n.º 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)
Ejemplo n.º 2
0
    def test_ranking_csv_view(self):
        contest = Contest.objects.get()
        url = reverse("ranking_csv", kwargs={"contest_id": contest.id, "key": "c"})

        self.client.login(username="******")
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            check_not_accessible(self, url)

        self.client.login(username="******")
        with fake_time(datetime(2012, 8, 5, tzinfo=utc)):
            response = self.client.get(url)
            self.assertContains(response, "User,")
            # Check that Admin is filtered out.
            self.assertNotContains(response, "Admin")

            expected_order = ["Test,User", "Test,User 2"]
            prev_pos = 0
            for user in expected_order:
                pattern = "%s," % (user,)
                self.assertIn(user, response.content)
                pos = response.content.find(pattern)
                self.assertGreater(pos, prev_pos, msg=("User %s has incorrect " "position" % (user,)))
                prev_pos = pos

            for task in ["zad1", "zad2", "zad3", "zad3"]:
                self.assertContains(response, task)

            response = self.client.get(reverse("ranking", kwargs={"contest_id": contest.id, "key": "1"}))
            self.assertContains(response, "zad1")
            for task in ["zad2", "zad3", "zad3"]:
                self.assertNotContains(response, task)
Ejemplo n.º 3
0
    def test_simple_mailsubmission(self):
        contest = Contest.objects.get()
        problem_instance = ProblemInstance.objects.get()
        problem_instance.submissions_limit = 0
        problem_instance.save()
        round = Round.objects.get()
        round.start_date = datetime(2012, 7, 31, tzinfo=utc)
        round.end_date = datetime(2012, 8, 10, tzinfo=utc)
        round.save()
        msc = MailSubmissionConfig(
            contest=contest,
            enabled=True,
            start_date=datetime(2012, 8, 12, tzinfo=utc),
            end_date=datetime(2012, 8, 14, tzinfo=utc),
        )
        msc.save()

        with fake_time(datetime(2012, 8, 11, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self.assertEqual(403, response.status_code)

        self.assertEqual(MailSubmission.objects.count(), 0)

        with fake_time(datetime(2012, 8, 13, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self.assertEqual(200, response.status_code)

        self.assertEqual(MailSubmission.objects.count(), 1)

        with fake_time(datetime(2012, 8, 15, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self.assertEqual(403, response.status_code)

        self.assertEqual(MailSubmission.objects.count(), 1)
Ejemplo n.º 4
0
    def test_user_info_page(self):
        self.assertTrue(self.client.login(username='******'))
        user = User.objects.get(username="******")
        contest = Contest.objects.get()
        response_callback = lambda: self.client.get(reverse('user_info',
            kwargs={'contest_id': contest.id, 'user_id': user.id}))

        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = response_callback()
            self.assertContains(response, "Ni in code")
            self.assertContains(response, "ninininini")
            self.assertNotContains(response, "I cannot tell")
            self.assertNotContains(response, "Knights of Ni")

        _disqualify_contestwide()
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = response_callback()
            self.assertContains(response, "Ni in code")
            self.assertContains(response, "ninininini")
            self.assertContains(response, "I cannot tell")
            self.assertContains(response, "Knights of Ni")

        Disqualification.objects.filter(submission__isnull=False).delete()
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = response_callback()
            self.assertNotContains(response, "Ni in code")
            self.assertNotContains(response, "ninininini")
            self.assertContains(response, "I cannot tell")
            self.assertContains(response, "Knights of Ni")
Ejemplo n.º 5
0
    def _assert_disqualification_box(self, response_callback):
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = response_callback()
            self.assertContains(response, "Ni in code")
            self.assertContains(response, "ninininini")
            self.assertNotContains(response, "Score")
            self.assertNotIn(">34<", self.remove_whitespaces(response))
            self.assertNotIn(">42<", self.remove_whitespaces(response))

        _disqualify_contestwide()
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = response_callback()
            self.assertContains(response, "Ni in code")
            self.assertContains(response, "I cannot tell")
            self.assertContains(response, "Knights of Ni")

            self.assertNotIn(">34<", self.remove_whitespaces(response))
            self.assertNotIn(">42<", self.remove_whitespaces(response))

        Disqualification.objects.filter(submission__isnull=False).delete()
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = response_callback()
            self.assertNotContains(response, "Ni in code")
            self.assertContains(response, "I cannot tell")
            self.assertContains(response, "Knights of Ni")
            # Even disqualified users can see their score
            self.assertIn(">34<", self.remove_whitespaces(response))
Ejemplo n.º 6
0
    def test_making_complaint(self):
        contest = Contest.objects.get()
        contest.controller_name = 'oioioi.oi.controllers.OIOnsiteContestController'
        contest.save()
        user = User.objects.get(username='******')
        p = Participant(contest=contest, user=user, status='ACTIVE')
        p.save()

        with fake_time(datetime(2012, 8, 11, tzinfo=utc)):
            self.assertTrue(self.client.login(username='******'))
            response = self.client.post(
                reverse('add_complaint', kwargs={'contest_id': contest.id}),
                {'complaint': "I am innocent! It is your fault!"},
                follow=True,
            )
            self.assertEqual(response.status_code, 403)

        cconfig = ComplaintsConfig(
            contest=contest,
            enabled=True,
            start_date=datetime(2012, 8, 10, tzinfo=utc),
            end_date=datetime(2012, 8, 12, tzinfo=utc),
        )
        cconfig.save()

        with fake_time(datetime(2012, 8, 9, tzinfo=utc)):
            response = self.client.get(
                reverse('add_complaint', kwargs={'contest_id': contest.id}))
            self.assertEqual(response.status_code, 403)

        with fake_time(datetime(2012, 8, 13, tzinfo=utc)):
            response = self.client.get(
                reverse('add_complaint', kwargs={'contest_id': contest.id}))
            self.assertEqual(response.status_code, 403)

        with fake_time(datetime(2012, 8, 11, tzinfo=utc)):
            response = self.client.post(
                reverse('add_complaint', kwargs={'contest_id': contest.id}),
                {'complaint': "I am innocent! It is your fault!"},
                follow=True,
            )
            self.assertEqual(response.status_code, 200)
            self.assertContains(response, "has been sent")

        jurym = mail.outbox[0].message()
        userm = mail.outbox[1].message()
        del mail.outbox[:]

        # Header class doesn't offer 'in' operator
        expected = "[oioioi-complaints] Complaint: Test User (test_user)"
        self.assertEqual(expected, jurym['Subject'])
        self.assertEqual(expected, userm['Subject'])

        self.assertEqual("*****@*****.**", jurym['To'])
        self.assertEqual("*****@*****.**", userm['To'])
        self.assertEqual(jurym['Message-ID'], userm['References'])
        self.assertEqual(userm['Message-ID'], jurym['References'])

        self.assertIn("your fault!", jurym.as_string())
        self.assertIn("your fault!", userm.as_string())
Ejemplo n.º 7
0
    def test_output_views(self):
        self.client.login(username='******')
        submission = TestRunProgramSubmission.objects.get(pk=1)
        kwargs = {'contest_id': submission.problem_instance.contest.id,
                'submission_id': submission.id}

        with fake_time(datetime(2011, 8, 5, tzinfo=utc)):
            show_output = self.client.get(reverse('get_testrun_output',
                kwargs=kwargs), HTTP_X_REQUESTED_WITH='XMLHttpRequest')
            self.assertContains(show_output, '18')
            self.assertIn(b'Output', show_output.content)

            download_response = self.client.get(reverse(
                'download_testrun_output', kwargs=kwargs))

            self.assertContains(download_response, '18\n')
            self.assertTrue(download_response['Content-Disposition']
                            .startswith('attachment'))
            self.assertIn('filename="output.out"',
                          download_response['Content-Disposition'])

        with fake_time(datetime(2014, 8, 5, tzinfo=utc)):
            show_output = self.client.get(reverse('get_testrun_output',
                kwargs=kwargs), HTTP_X_REQUESTED_WITH='XMLHttpRequest')
            self.assertContains(show_output, '18')
Ejemplo n.º 8
0
    def test_output_views(self):
        self.assertTrue(self.client.login(username='******'))
        submission = TestRunProgramSubmission.objects.get(pk=1)
        kwargs = {'contest_id': submission.problem_instance.contest.id,
                'submission_id': submission.id}

        with fake_time(datetime(2011, 8, 5, tzinfo=utc)):
            show_output = self.client.get(reverse('get_testrun_output',
                kwargs=kwargs), HTTP_X_REQUESTED_WITH='XMLHttpRequest')
            self.assertContains(show_output, '18')
            self.assertContains(show_output, 'Output')

            download_response = self.client.get(reverse(
                'download_testrun_output', kwargs=kwargs))

            self.assertContains(download_response, '18\n')
            self.assertTrue(download_response['Content-Disposition']
                            .startswith('attachment'))
            self.assertIn('filename="output.out"',
                          download_response['Content-Disposition'])

        with fake_time(datetime(2014, 8, 5, tzinfo=utc)):
            show_output = self.client.get(reverse('get_testrun_output',
                kwargs=kwargs), HTTP_X_REQUESTED_WITH='XMLHttpRequest')
            self.assertContains(show_output, '18')
Ejemplo n.º 9
0
    def _assert_disqualification_box(self, response_callback):
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = response_callback()
            self.assertContains(response, "Ni in code")
            self.assertContains(response, "ninininini")
            self.assertContains(response, "Score")
            self.assertIn(">34<", self.remove_whitespaces(response))
            self.assertIn(">42<", self.remove_whitespaces(response))

        _disqualify_contestwide()
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = response_callback()
            self.assertContains(response, "Ni in code")
            self.assertContains(response, "I cannot tell")
            self.assertContains(response, "Knights of Ni")

            self.assertIn(">34<", self.remove_whitespaces(response))
            self.assertIn(">42<", self.remove_whitespaces(response))

        Disqualification.objects.filter(submission__isnull=False).delete()
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = response_callback()
            self.assertNotContains(response, "Ni in code")
            self.assertContains(response, "I cannot tell")
            self.assertContains(response, "Knights of Ni")
            self.assertIn(">34<", self.remove_whitespaces(response))
Ejemplo n.º 10
0
 def test_new_labels(self):
     self.assertTrue(self.client.login(username='******'))
     contest = Contest.objects.get()
     list_url = reverse('contest_messages',
                        kwargs={'contest_id': contest.id})
     timestamp = timezone.make_aware(datetime.utcfromtimestamp(1347025200))
     with fake_time(timestamp):
         response = self.client.get(list_url)
     self.assertContains(response, '>NEW<', count=2)
     public_answer = Message.objects.get(topic='public-answer')
     with fake_time(timestamp):
         response = self.client.get(
             reverse(
                 'message',
                 kwargs={
                     'contest_id': contest.id,
                     'message_id': public_answer.id
                 },
             ))
     self.assertContains(response, 'public-answer-body')
     self.assertNotContains(response, 'contest-question')
     self.assertNotContains(response, 'problem-question')
     with fake_time(timestamp):
         response = self.client.get(list_url)
     self.assertContains(response, '>NEW<', count=1)
Ejemplo n.º 11
0
    def test_pdf_report_view(self):
        contest = Contest.objects.get()
        url = reverse("oireports", kwargs={"contest_id": contest.id})
        post_vars = {
            "report_round": CONTEST_REPORT_KEY,
            "report_region": CONTEST_REPORT_KEY,
            "testgroup[zad1]": ["0", "1", "2", "3"],
            "form_type": "pdf_report",
            "single_report_user": "",
        }

        # Let's check if report is not available for regular user.
        self.client.login(username="******")
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.post(url, post_vars)
            self.assertEqual(response.status_code, 403)

        self.client.login(username="******")
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.post(url, post_vars)
            pages = slate.PDF(StringIO(self.streamingContent(response)))
            self.assertIn("test_user", pages[0])
            self.assertIn("Wynik:34", pages[0])
            self.assertIn("ZAD1", pages[0])
            self.assertIn("1bRuntimeerror0.00s/0.10sprogramexited", pages[0])
            self.assertNotIn("test_user2", pages.text())
Ejemplo n.º 12
0
    def test_xml_view(self):
        contest = Contest.objects.get()
        url = reverse("oireports", kwargs={"contest_id": contest.id})
        post_vars = {
            "report_round": CONTEST_REPORT_KEY,
            "report_region": CONTEST_REPORT_KEY,
            "testgroup[zad1]": ["0", "1", "2", "3"],
            "form_type": "xml_report",
            "single_report_user": "",
        }

        # Let's check if report is not available for regular user.
        self.client.login(username="******")
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.post(url, post_vars)
            self.assertEqual(response.status_code, 403)

        self.client.login(username="******")
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.post(url, post_vars)
            content = self.streamingContent(response)
            self.assertIn("<user>Test User (test_user)", content)
            self.assertIn("<result>34</result>", content)
            self.assertIn("<taskid>zad1</taskid>", content)
            self.assertIn("<code>%23include", content)
            self.assertIn("<testcomment>program exited with", content)
            self.assertNotIn("test_user2", content)
Ejemplo n.º 13
0
    def test_exclusive_contest(self):
        self._assertContestVisible('c1')
        self._assertContestVisible('c2')

        self.client.login(username='******')

        self._assertContestVisible('c1')
        self._assertContestVisible('c2')

        ex_conf = ExclusivenessConfig()
        ex_conf.contest = self.c2
        ex_conf.start_date = datetime(2012, 1, 1, 10, tzinfo=utc)
        ex_conf.end_date = datetime(2012, 1, 1, 14, tzinfo=utc)
        ex_conf.save()

        with fake_time(datetime(2012, 1, 1, 9, 59, tzinfo=utc)):
            self._assertContestVisible('c1')
            self._assertContestVisible('c2')

        with fake_time(datetime(2012, 1, 1, 11, tzinfo=utc)):
            self._assertContestRedirects('c1', '/c/c2/')
            self._assertContestVisible('c2')

        with fake_time(datetime(2012, 1, 1, 14, 1, tzinfo=utc)):
            self._assertContestVisible('c1')
            self._assertContestVisible('c2')
Ejemplo n.º 14
0
    def test_ranking_csv_view(self):
        contest = Contest.objects.get()
        url = reverse('ranking_csv', kwargs={'contest_id': contest.id,
                                            'key': 'c'})

        self.client.login(username='******')
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            check_not_accessible(self, url)

        self.client.login(username='******')
        with fake_time(datetime(2012, 8, 5, tzinfo=utc)):
            response = self.client.get(url)
            self.assertContains(response, 'User,')
            # Check that Admin is filtered out.
            self.assertNotContains(response, 'Admin')

            expected_order = ['Test,User', 'Test,User 2']
            prev_pos = 0
            for user in expected_order:
                pattern = '%s,' % (user,)
                self.assertIn(user, response.content)
                pos = response.content.find(pattern)
                self.assertGreater(pos, prev_pos, msg=('User %s has incorrect '
                       'position' % (user,)))
                prev_pos = pos

            for task in ['zad1', 'zad2', 'zad3', 'zad3']:
                self.assertContains(response, task)

            response = self.client.get(reverse('ranking',
                kwargs={'contest_id': contest.id, 'key': '1'}))
            self.assertContains(response, 'zad1')
            for task in ['zad2', 'zad3', 'zad3']:
                self.assertNotContains(response, task)
Ejemplo n.º 15
0
    def test_exclusive_contest(self):
        self._assertContestVisible('c1')
        self._assertContestVisible('c2')

        self.assertTrue(self.client.login(username='******'))

        self._assertContestVisible('c1')
        self._assertContestVisible('c2')

        add_ex_conf(
            self.c2,
            datetime(2012, 1, 1, 10, tzinfo=utc),
            datetime(2012, 1, 1, 14, tzinfo=utc),
        )

        with fake_time(datetime(2012, 1, 1, 9, 59, tzinfo=utc)):
            self._assertContestVisible('c1')
            self._assertContestVisible('c2')

        with fake_time(datetime(2012, 1, 1, 11, tzinfo=utc)):
            self._assertContestRedirects('c1', '/c/c2/')
            self._assertContestVisible('c2')

        with fake_time(datetime(2012, 1, 1, 14, 1, tzinfo=utc)):
            self._assertContestVisible('c1')
            self._assertContestVisible('c2')
Ejemplo n.º 16
0
    def test_packages_visibility(self):
        problem = Problem.objects.get()
        contest = Contest.objects.get()
        test1 = Test.objects.get(name='0')
        test2 = Test.objects.get(name='1a')

        tp = TestsPackage(problem=problem,
                          name='some_name',
                          description='some desc',
                          publish_date=datetime(2012, 8, 5, 0, 11, tzinfo=utc))
        tp.full_clean()
        tp.save()
        tp.tests.add(test1, test2)

        tp2 = TestsPackage(problem=problem,
                           name='some_name2',
                           description='some desc2',
                           publish_date=datetime(2012, 8, 5, 1, 11,
                                                 tzinfo=utc))
        tp2.full_clean()
        tp2.save()
        tp2.tests.add(test2)

        self.client.login(username='******')
        url = reverse('tests', kwargs={'contest_id': contest.id})

        with fake_time(datetime(2012, 8, 5, 0, 10, tzinfo=utc)):
            response = self.client.get(url)
            self.assertNotIn(b'>Tests<', response.content)
            self.assertNotIn(b'some_name.zip', response.content)
            self.assertNotIn(b'some_name2.zip', response.content)
            self.assertEqual(403, response.status_code)

        with fake_time(datetime(2012, 8, 5, 0, 12, tzinfo=utc)):
            response = self.client.get(url)
            self.assertIn(b'>Tests<', response.content)
            self.assertIn(b'some_name.zip', response.content)
            self.assertNotIn(b'some_name2.zip', response.content)
            self.assertEqual(200, response.status_code)

        with fake_time(datetime(2012, 8, 5, 1, 12, tzinfo=utc)):
            response = self.client.get(url)
            self.assertIn(b'>Tests<', response.content)
            self.assertIn(b'some_name.zip', response.content)
            self.assertIn(b'some_name2.zip', response.content)
            self.assertEqual(200, response.status_code)

        url = reverse('test',
                      kwargs={
                          'contest_id': contest.id,
                          'package_id': 1
                      })

        with fake_time(datetime(2012, 8, 5, 0, 10, tzinfo=utc)):
            response = self.client.get(url)
            self.assertEqual(403, response.status_code)

        with fake_time(datetime(2012, 8, 5, 0, 12, tzinfo=utc)):
            response = self.client.get(url)
            self.assertEqual(200, response.status_code)
Ejemplo n.º 17
0
    def test_xml_view(self):
        contest = Contest.objects.get()
        url = reverse('oireports', kwargs={'contest_id': contest.id})
        post_vars = {
            'report_round': CONTEST_REPORT_KEY,
            'report_region': CONTEST_REPORT_KEY,
            'testgroup[zad1]': ['0', '1', '2', '3'],
            'form_type': 'xml_report',
            'single_report_user': ''
        }

        # Let's check if report is not available for regular user.
        self.assertTrue(self.client.login(username='******'))
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.post(url, post_vars)
            self.assertEqual(response.status_code, 403)

        self.assertTrue(self.client.login(username='******'))
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.post(url, post_vars)
            content = self.streamingContent(response).decode('utf-8')
            self.assertIn("<user>Test User (test_user)", content)
            self.assertIn("<result>34</result>", content)
            self.assertIn("<taskid>zad1</taskid>", content)
            self.assertIn("<code>%23include", content)
            self.assertIn("<testcomment>program exited with", content)
            self.assertNotIn("test_user2", content)
Ejemplo n.º 18
0
    def test_submission(self):
        self.assertTrue(self.client.login(username="******"))
        submission = Submission.objects.get(id=1)

        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = self.client.get(
                reverse(
                    "submission",
                    kwargs={
                        "submission_id": submission.id,
                        "contest_id": Contest.objects.get().id,
                    },
                )
            )
            self.assertContains(response, "Ni in code")
            self.assertContains(response, "ninininini")
            self.assertIn(">34<", self.remove_whitespaces(response))

        # Not disqualified submission
        submission = Submission.objects.get(id=2)
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = self.client.get(
                reverse(
                    "submission",
                    kwargs={
                        "submission_id": submission.id,
                        "contest_id": Contest.objects.get().id,
                    },
                )
            )
            self.assertNotContains(response, "Disqualification")
            self.assertNotContains(response, "Ni in code")
            self.assertNotContains(response, "ninininini")
            self.assertIn(">42<", self.remove_whitespaces(response))
            self.assertContains(response, "Submission 2")
Ejemplo n.º 19
0
    def test_user_info_page(self):
        self.assertTrue(self.client.login(username='******'))
        user = User.objects.get(username="******")
        contest = Contest.objects.get()
        response_callback = lambda: self.client.get(
            reverse('user_info', kwargs={'contest_id': contest.id, 'user_id': user.id})
        )

        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = response_callback()
            self.assertContains(response, "Ni in code")
            self.assertContains(response, "ninininini")
            self.assertNotContains(response, "I cannot tell")
            self.assertNotContains(response, "Knights of Ni")

        _disqualify_contestwide()
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = response_callback()
            self.assertContains(response, "Ni in code")
            self.assertContains(response, "ninininini")
            self.assertContains(response, "I cannot tell")
            self.assertContains(response, "Knights of Ni")

        Disqualification.objects.filter(submission__isnull=False).delete()
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = response_callback()
            self.assertNotContains(response, "Ni in code")
            self.assertNotContains(response, "ninininini")
            self.assertContains(response, "I cannot tell")
            self.assertContains(response, "Knights of Ni")
Ejemplo n.º 20
0
    def test_pdf_report_view(self):
        contest = Contest.objects.get()
        url = reverse('oireports', kwargs={'contest_id': contest.id})
        post_vars = {
            'report_round': CONTEST_REPORT_KEY,
            'report_region': CONTEST_REPORT_KEY,
            'testgroup[zad1]': ['0', '1', '2', '3'],
            'form_type': 'pdf_report',
            'single_report_user': ''
        }

        # Let's check if report is not available for regular user.
        self.assertTrue(self.client.login(username='******'))
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.post(url, post_vars)
            self.assertEqual(response.status_code, 403)

        self.assertTrue(self.client.login(username='******'))
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.post(url, post_vars)
            pages = slate.PDF(StringIO(self.streamingContent(response)))
            self.assertIn("test_user", pages[0])
            self.assertIn("Wynik:34", pages[0])
            self.assertIn("ZAD1", pages[0])
            self.assertIn("1bRuntimeerror0.00s/0.10sprogramexited", pages[0])
            self.assertNotIn("test_user2", pages.text())
Ejemplo n.º 21
0
    def test_statistics_view(self):
        contest = Contest.objects.get()
        url = reverse('statistics_main', kwargs={'contest_id': contest.id})

        self.client.login(username='******')
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.get(url)
            self.assertContains(response, 'Results histogram')

        # Ok, so now we make test_admin a regular user.
        admin = User.objects.get(username='******')
        admin.is_superuser = False
        admin.save()

        self.client.login(username='******')
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.get(url)
            print response
            self.assertContains(response, 'Results histogram')
            self.assertContains(response, "'zad4'")
            self.assertContains(response, "'zad2'")
            self.assertContains(response, "'zad3'")
            self.assertContains(response, "'zad1'")
            self.assertContains(response,
                                "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]")

            url = reverse('statistics_view', kwargs={'contest_id': contest.id,
                              'category': statistics_categories['PROBLEM'][1],
                              'object_name': 'zad2'})
            self.assertContains(response, url)
Ejemplo n.º 22
0
    def test_ranking_csv_view(self):
        contest = Contest.objects.get()
        url = reverse('ranking_csv', kwargs={'contest_id': contest.id,
                                            'key': 'c'})

        self.assertTrue(self.client.login(username='******'))
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            check_not_accessible(self, url)

        self.assertTrue(self.client.login(username='******'))
        with fake_time(datetime(2012, 8, 5, tzinfo=utc)):
            response = self.client.get(url)
            self.assertContains(response, 'User,')
            # Check that Admin is filtered out.
            self.assertNotContains(response, 'Admin')

            expected_order = ['Test,User', 'Test,User 2']
            prev_pos = 0
            content = response.content.decode('utf-8')
            for user in expected_order:
                pattern = '%s,' % (user,)
                self.assertContains(response, user)
                pos = content.find(pattern)
                self.assertGreater(pos, prev_pos, msg=('User %s has incorrect '
                       'position' % (user,)))
                prev_pos = pos

            for task in ['zad1', 'zad2', 'zad3', 'zad3']:
                self.assertContains(response, task)

            response = self.client.get(reverse('ranking',
                kwargs={'contest_id': contest.id, 'key': '1'}))
            self.assertContains(response, 'zad1')
            for task in ['zad2', 'zad3', 'zad3']:
                self.assertNotContains(response, task)
Ejemplo n.º 23
0
    def test_simple_submission(self):
        contest = Contest.objects.get()
        problem_instance = ProblemInstance.objects.get()
        round = Round.objects.get()
        round.start_date = datetime(2012, 7, 31, tzinfo=utc)
        round.end_date = datetime(2012, 8, 10, tzinfo=utc)
        round.save()

        with fake_time(datetime(2012, 7, 10, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self.assertEqual(200, response.status_code)
            self.assertIn('Sorry, there are no problems', response.content)

        with fake_time(datetime(2012, 7, 31, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self._assertSubmitted(contest, response)

        with fake_time(datetime(2012, 8, 5, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self._assertSubmitted(contest, response)

        with fake_time(datetime(2012, 8, 10, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self._assertSubmitted(contest, response)

        with fake_time(datetime(2012, 8, 11, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self.assertEqual(200, response.status_code)
            self.assertIn('Sorry, there are no problems', response.content)
Ejemplo n.º 24
0
    def test_xml_view(self):
        contest = Contest.objects.get()
        url = reverse('oireports', kwargs={'contest_id': contest.id})
        post_vars = {
            'report_round': CONTEST_REPORT_KEY,
            'report_region': CONTEST_REPORT_KEY,
            'testgroup[zad1]': ['0', '1', '2', '3'],
            'form_type': 'xml_report',
            'single_report_user': ''
        }

        # Let's check if report is not available for regular user.
        self.assertTrue(self.client.login(username='******'))
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.post(url, post_vars)
            self.assertEqual(response.status_code, 403)

        self.assertTrue(self.client.login(username='******'))
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.post(url, post_vars)
            content = self.streamingContent(response).decode('utf-8')
            self.assertIn("<user>Test User (test_user)", content)
            self.assertIn("<result>34</result>", content)
            self.assertIn("<taskid>zad1</taskid>", content)
            self.assertIn("<code>%23include", content)
            self.assertIn("<testcomment>program exited with", content)
            self.assertNotIn("test_user2", content)
Ejemplo n.º 25
0
    def test_simple_submission(self):
        contest = Contest.objects.get()
        problem_instance = ProblemInstance.objects.get()
        round = Round.objects.get()
        round.start_date = datetime(2012, 7, 31, tzinfo=utc)
        round.end_date = datetime(2012, 8, 10, tzinfo=utc)
        round.save()

        with fake_time(datetime(2012, 7, 10, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self.assertEqual(200, response.status_code)
            self.assertIn('Sorry, there are no problems', response.content)

        with fake_time(datetime(2012, 7, 31, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self._assertSubmitted(contest, response)

        with fake_time(datetime(2012, 8, 5, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self._assertSubmitted(contest, response)

        with fake_time(datetime(2012, 8, 10, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self._assertSubmitted(contest, response)

        with fake_time(datetime(2012, 8, 11, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self.assertEqual(200, response.status_code)
            self.assertIn('Sorry, there are no problems', response.content)
Ejemplo n.º 26
0
    def _assert_disqualification_box(self, response_callback):
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = response_callback()
            self.assertContains(response, "Disqualification")
            self.assertContains(response, "Ni in code")
            self.assertContains(response, "ninininini")
            self.assertNotContains(response, "Score")
            self.assertNotContains(response, '>34</td>')
            self.assertNotContains(response, '>42</td>')

        _disqualify_contestwide()
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = response_callback()
            self.assertContains(response, "Disqualification")
            self.assertContains(response, "Ni in code")
            self.assertContains(response, "I cannot tell")
            self.assertContains(response, "Knights of Ni")
            self.assertNotContains(response, '>34</td>')
            self.assertNotContains(response, '>42</td>')

        Disqualification.objects.filter(submission__isnull=False).delete()
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = response_callback()
            self.assertContains(response, "Disqualification")
            self.assertNotContains(response, "Ni in code")
            self.assertContains(response, "I cannot tell")
            self.assertContains(response, "Knights of Ni")
            # Even disqualified users can see their score
            self.assertContains(response, '>34</td>')
Ejemplo n.º 27
0
    def test_pdf_report_view(self):
        contest = Contest.objects.get()
        url = reverse('oireports', kwargs={'contest_id': contest.id})
        post_vars = {
            'report_round': CONTEST_REPORT_KEY,
            'report_region': CONTEST_REPORT_KEY,
            'testgroup[zad1]': ['0', '1', '2', '3'],
            'form_type': 'pdf_report',
            'single_report_user': ''
        }

        # Let's check if report is not available for regular user.
        self.assertTrue(self.client.login(username='******'))
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.post(url, post_vars)
            self.assertEqual(response.status_code, 403)

        self.assertTrue(self.client.login(username='******'))
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.post(url, post_vars)
            pages = slate.PDF(StringIO(self.streamingContent(response)))
            self.assertIn("test_user", pages[0])
            self.assertIn("Wynik:34", pages[0])
            self.assertIn("ZAD1", pages[0])
            self.assertIn("1bRuntimeerror0.00s/0.10sprogramexited", pages[0])
            self.assertNotIn("test_user2", pages.text())
Ejemplo n.º 28
0
    def test_simple_mailsubmission(self):
        contest = Contest.objects.get()
        problem_instance = ProblemInstance.objects.get()
        problem_instance.submissions_limit = 0
        problem_instance.save()
        round = Round.objects.get()
        round.start_date = datetime(2012, 7, 31, tzinfo=utc)
        round.end_date = datetime(2012, 8, 10, tzinfo=utc)
        round.save()
        msc = MailSubmissionConfig(contest=contest, enabled=True,
                start_date=datetime(2012, 8, 12, tzinfo=utc),
                end_date=datetime(2012, 8, 14, tzinfo=utc))
        msc.save()

        with fake_time(datetime(2012, 8, 11, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self.assertEqual(403, response.status_code)

        self.assertEqual(MailSubmission.objects.count(), 0)

        with fake_time(datetime(2012, 8, 13, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self.assertEqual(200, response.status_code)

        self.assertEqual(MailSubmission.objects.count(), 1)

        with fake_time(datetime(2012, 8, 15, tzinfo=utc)):
            response = self.submit_file(contest, problem_instance)
            self.assertEqual(403, response.status_code)

        self.assertEqual(MailSubmission.objects.count(), 1)
Ejemplo n.º 29
0
    def test_submission(self):
        self.client.login(username='******')
        submission = Submission.objects.get(id=1)

        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = self.client.get(
                reverse('submission',
                        kwargs={
                            'submission_id': submission.id,
                            'contest_id': Contest.objects.get().id
                        }))
            self.assertContains(response, "Disqualification")
            self.assertContains(response, "Ni in code")
            self.assertContains(response, "ninininini")
            self.assertNotContains(response, '>34</td>')

        # Not disqualified submission
        submission = Submission.objects.get(id=2)
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = self.client.get(
                reverse('submission',
                        kwargs={
                            'submission_id': submission.id,
                            'contest_id': Contest.objects.get().id
                        }))
            self.assertNotContains(response, "Disqualification")
            self.assertNotContains(response, "Ni in code")
            self.assertNotContains(response, "ninininini")
            self.assertNotContains(response, '>42</td>')
            self.assertContains(response, 'Submission 2')
Ejemplo n.º 30
0
    def test_publish_solutions(self):
        contest = Contest.objects.get()
        publish_url = reverse('publish_solutions',
                        kwargs={'contest_id': contest.id})

        def submission_url(sub_id):
            return reverse('submission',
                    kwargs={'contest_id': contest.id, 'submission_id': sub_id})

        def show_source_url(sub_id):
            return reverse('show_submission_source',
                    kwargs={'contest_id': contest.id, 'submission_id': sub_id})

        def change_publication_url(way, sub_id):
            return reverse('publish_solution' if way else 'unpublish_solution',
                    kwargs={'contest_id': contest.id, 'submission_id': sub_id})

        def change_publication(way, sub_id):
            r = self.client.post(change_publication_url(way, sub_id))
            self.assertEqual(302, r.status_code)

        def check_access_forbidden(sub_ids):
            for id in sub_ids:
                r = self.client.post(change_publication_url(id % 2, id))
                self.assertEqual(403, r.status_code)

        def check_visibility(good_ids, way):
            r = self.client.get(publish_url)
            self.assertEqual(200, r.status_code)
            for id in range(1, 5):
                sb = Submission.objects.get(pk=id)
                if id in good_ids:
                    self.assertContains(r, sb.get_date_display())
                    self.assertContains(r, self._href(show_source_url(id)))
                    self.assertContains(r, change_publication_url(way, id))
                    self.assertContains(r, self._href(submission_url(id)))
                else:
                    self.assertNotContains(r, sb.get_date_display())

        with fake_time(self._no_public_rounds()):
            self.assertTrue(self.client.login(username='******'))
            r = self.client.get(publish_url)
            self.assertEqual(403, r.status_code)
            check_access_forbidden([4])

        with fake_time(self._rounds_14()):
            check_visibility([4], True)
            change_publication(True, 4)
            check_visibility([4], False)
            check_access_forbidden([1, 2])
            self.client.logout()
            self.assertTrue(self.client.login(username='******'))
            check_visibility([], True)
            check_access_forbidden([3, 4])
            self.client.logout()
            self.assertTrue(self.client.login(username='******'))
            change_publication(False, 4)
            check_visibility([4], True)
            self.client.logout()
Ejemplo n.º 31
0
    def test_ranking_view(self):
        contest = Contest.objects.get()
        url = reverse('default_ranking', kwargs={'contest_id': contest.id})

        self.client.login(username='******')
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.get(url)
            self.assertContains(response, 'Export to CSV')

        # Check that Admin is filtered out.
        self.client.login(username='******')
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.get(url)
            self.assertNotIn('<td>Test Admin</td>', response.content)
            self.assertNotContains(response, 'Export to CSV')

        # Ok, so now we make test_admin a regular user.
        admin = User.objects.get(username='******')
        admin.is_superuser = False
        admin.save()

        self.client.login(username='******')
        with fake_time(datetime(2012, 8, 5, tzinfo=utc)):
            response = self.client.get(url)
            self.assertIn('rankings/ranking_view.html',
                    [t.name for t in response.templates])
            self.assertEqual(len(response.context['choices']), 3)
            self.assertEqual(response.content.count('<td>Test User'), 1)
            self.assertNotIn('<td>Test Admin</td>', response.content)

        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.get(url)
            expected_order = ['Test User', 'Test User 2', 'Test Admin']
            prev_pos = 0
            for user in expected_order:
                pattern = '<td>%s</td>' % (user,)
                self.assertIn(user, response.content)
                pos = response.content.find(pattern)
                self.assertGreater(pos, prev_pos, msg=('User %s has incorrect '
                    'position' % (user,)))
                prev_pos = pos

            response = self.client.get(reverse('ranking',
                kwargs={'contest_id': contest.id, 'key': '1'}))
            self.assertEqual(response.content.count('<td>Test User'), 1)

        # Test visibility of links to problem statements
        contest.controller_name = \
            'oioioi.rankings.tests.StatementHiderForContestController'
        contest.save()

        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.get(url)

            for task in VISIBLE_TASKS:
                self.assertIn(task + '</a></th>', response.content)

            for task in HIDDEN_TASKS:
                self.assertIn(task + '</th>', response.content)
Ejemplo n.º 32
0
 def test_cookie_expiry_date(self):
     url = reverse('balloons_delivery_panel', kwargs=self.c_kwargs)
     with fake_time(datetime(2012, 8, 5, 0, 5, tzinfo=utc)):
         self._generate_link_and_set_cookie()
     with fake_time(datetime(2012, 8, 12, 0, 4, tzinfo=utc)):
         response = self.client.get(url)
         self.assertEqual(response.status_code, 200)
     with fake_time(datetime(2012, 8, 12, 0, 6, tzinfo=utc)):
         response = self.client.get(url)
         self.assertEqual(response.status_code, 403)
Ejemplo n.º 33
0
    def test_making_complaint(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.oi.controllers.OIOnsiteContestController'
        contest.save()
        user = User.objects.get(username='******')
        p = Participant(contest=contest, user=user, status='ACTIVE')
        p.save()

        with fake_time(datetime(2012, 8, 11, tzinfo=utc)):
            self.client.login(username='******')
            response = self.client.post(reverse('add_complaint',
                kwargs={'contest_id': contest.id}),
                {'complaint': "I am innocent! It is your fault!"}, follow=True)
            self.assertEqual(response.status_code, 403)

        cconfig = ComplaintsConfig(contest=contest, enabled=True,
                start_date=datetime(2012, 8, 10, tzinfo=utc),
                end_date=datetime(2012, 8, 12, tzinfo=utc))
        cconfig.save()

        with fake_time(datetime(2012, 8, 9, tzinfo=utc)):
            response = self.client.get(reverse('add_complaint',
                kwargs={'contest_id': contest.id}))
            self.assertEqual(response.status_code, 403)

        with fake_time(datetime(2012, 8, 13, tzinfo=utc)):
            response = self.client.get(reverse('add_complaint',
                kwargs={'contest_id': contest.id}))
            self.assertEqual(response.status_code, 403)

        with fake_time(datetime(2012, 8, 11, tzinfo=utc)):
            response = self.client.post(reverse('add_complaint',
                kwargs={'contest_id': contest.id}),
                {'complaint': "I am innocent! It is your fault!"}, follow=True)
            self.assertEqual(response.status_code, 200)
            self.assertContains(response, "has been sent")

        jurym = mail.outbox[0].message()
        userm = mail.outbox[1].message()
        del mail.outbox

        # Header class doesn't offer 'in' operator
        self.assertEqual("[oioioi-complaints] Complaint: Test User (test_user)",
                jurym['Subject'])
        self.assertEqual("[oioioi-complaints] Complaint: Test User (test_user)",
                userm['Subject'])

        self.assertEquals("*****@*****.**", jurym['To'])
        self.assertEquals("*****@*****.**", userm['To'])
        self.assertEquals(jurym['Message-ID'], userm['References'])
        self.assertEquals(userm['Message-ID'], jurym['References'])

        self.assertIn("your fault!", jurym.as_string())
        self.assertIn("your fault!", userm.as_string())
Ejemplo n.º 34
0
    def test_packages_visibility(self):
        problem = Problem.objects.get()
        contest = Contest.objects.get()
        test1 = Test.objects.get(name='0')
        test2 = Test.objects.get(name='1a')

        tp = TestsPackage(problem=problem, name='some_name',
                description='some desc',
                publish_date=datetime(2012, 8, 5, 0, 11, tzinfo=utc))
        tp.full_clean()
        tp.save()
        tp.tests.add(test1, test2)

        tp2 = TestsPackage(problem=problem, name='some_name2',
                description='some desc2',
                publish_date=datetime(2012, 8, 5, 1, 11, tzinfo=utc))
        tp2.full_clean()
        tp2.save()
        tp2.tests.add(test2)

        self.client.login(username='******')
        url = reverse('tests', kwargs={'contest_id': contest.id})

        with fake_time(datetime(2012, 8, 5, 0, 10, tzinfo=utc)):
            response = self.client.get(url)
            self.assertNotIn('>Tests<', response.content)
            self.assertNotIn('some_name.zip', response.content)
            self.assertNotIn('some_name2.zip', response.content)
            self.assertEqual(403, response.status_code)

        with fake_time(datetime(2012, 8, 5, 0, 12, tzinfo=utc)):
            response = self.client.get(url)
            self.assertIn('>Tests<', response.content)
            self.assertIn('some_name.zip', response.content)
            self.assertNotIn('some_name2.zip', response.content)
            self.assertEqual(200, response.status_code)

        with fake_time(datetime(2012, 8, 5, 1, 12, tzinfo=utc)):
            response = self.client.get(url)
            self.assertIn('>Tests<', response.content)
            self.assertIn('some_name.zip', response.content)
            self.assertIn('some_name2.zip', response.content)
            self.assertEqual(200, response.status_code)

        url = reverse('test', kwargs={'contest_id': contest.id,
                'package_id': 1})

        with fake_time(datetime(2012, 8, 5, 0, 10, tzinfo=utc)):
            response = self.client.get(url)
            self.assertEqual(403, response.status_code)

        with fake_time(datetime(2012, 8, 5, 0, 12, tzinfo=utc)):
            response = self.client.get(url)
            self.assertEqual(200, response.status_code)
Ejemplo n.º 35
0
    def test_ranking_view(self):
        contest = Contest.objects.get()
        url = reverse('default_ranking', kwargs={'contest_id': contest.id})

        self.client.login(username='******')
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.get(url)
            self.assertContains(response, 'Export to CSV')

        # Check that Admin is filtered out.
        self.client.login(username='******')
        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.get(url)
            self.assertNotIn('<td>Test Admin</td>', response.content)
            self.assertNotContains(response, 'Export to CSV')

        # Ok, so now we make test_admin a regular user.
        admin = User.objects.get(username='******')
        admin.is_superuser = False
        admin.save()

        self.client.login(username='******')
        with fake_time(datetime(2012, 8, 5, tzinfo=utc)):
            response = self.client.get(url)
            self.assertIn('rankings/ranking_view.html',
                          [t.name for t in response.templates])
            self.assertEqual(len(response.context['choices']), 3)
            self.assertEqual(response.content.count('<td>Test User'), 1)
            self.assertNotIn('<td>Test Admin</td>', response.content)

        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.get(url)
            expected_order = ['Test User', 'Test User 2', 'Test Admin']
            prev_pos = 0
            for user in expected_order:
                pattern = '<td>%s</td>' % (user, )
                self.assertIn(user, response.content)
                pos = response.content.find(pattern)
                self.assertGreater(pos,
                                   prev_pos,
                                   msg=('User %s has incorrect '
                                        'position' % (user, )))
                prev_pos = pos

            response = self.client.get(
                reverse('ranking',
                        kwargs={
                            'contest_id': contest.id,
                            'key': '1'
                        }))
            self.assertEqual(response.content.count('<td>Test User'), 1)
Ejemplo n.º 36
0
    def test_after_round(self):
        contest = Contest.objects.get()

        with fake_time(datetime(2012, 8, 8, tzinfo=utc)):
            self.reveal_submit(4)

        with fake_time(datetime(2012, 8, 11, tzinfo=utc)):
            kwargs = {'contest_id': contest.id, 'submission_id': 4}
            response = self.client.get(reverse('submission', kwargs=kwargs))
            self.assertEqual(response.status_code, 200)
            self.assertIn('already used <strong>1</strong> out of 2 reveals.',
                          response.content)
            self.assertIn('<td>100</td>', response.content)
            self.reveal_submit(5, success=False)
Ejemplo n.º 37
0
    def test_ranking(self):
        contest = Contest.objects.get()
        url = reverse("default_ranking", kwargs={"contest_id": contest.id})

        self.assertTrue(self.client.login(username="******"))
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = self.client.get(url)
            self.assertContains(response, "Test User")
            self.assertContains(response, "disqualified")

        self.assertTrue(self.client.login(username="******"))
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = self.client.get(url)
            self.assertNotContains(response, "Test User")
Ejemplo n.º 38
0
 def test_submissions_visibility(self):
     contest = Contest.objects.get()
     url = reverse('my_submissions', kwargs={'contest_id': contest.id})
     self.client.login(username='******')
     with fake_time(datetime(2012, 8, 5, tzinfo=utc)):
         response = self.client.get(url)
         for problem_name in ['zad1', 'zad2', 'zad3', 'zad4']:
             self.assertIn(problem_name, response.content)
         self.assertIn('contests/my_submissions.html',
                 [t.name for t in response.templates])
         self.assertEqual(response.content.count('<td>34</td>'), 2)
     with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
         response = self.client.get(url)
         self.assertEqual(response.content.count('<td>34</td>'), 4)
Ejemplo n.º 39
0
    def test_ranking(self):
        contest = Contest.objects.get()
        url = reverse('default_ranking', kwargs={'contest_id': contest.id})

        self.client.login(username='******')
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = self.client.get(url)
            self.assertContains(response, "Test User")
            self.assertContains(response, "disqualified")

        self.client.login(username='******')
        with fake_time(datetime(2015, 1, 1, tzinfo=utc)):
            response = self.client.get(url)
            self.assertNotContains(response, "Test User")
Ejemplo n.º 40
0
    def test_after_round(self):
        contest = Contest.objects.get()

        with fake_time(datetime(2012, 8, 8, tzinfo=utc)):
            self.reveal_submit(4)

        with fake_time(datetime(2012, 8, 11, tzinfo=utc)):
            kwargs = {'contest_id': contest.id, 'submission_id': 4}
            response = self.client.get(reverse('submission', kwargs=kwargs))
            self.assertEqual(response.status_code, 200)
            self.assertIn('already used <strong>1</strong> out of 2 reveals.',
                          response.content)
            self.assertIn('<td>100</td>', response.content)
            self.reveal_submit(5, success=False)
Ejemplo n.º 41
0
 def test_submissions_visibility(self):
     contest = Contest.objects.get()
     url = reverse('my_submissions', kwargs={'contest_id': contest.id})
     self.client.login(username='******')
     with fake_time(datetime(2012, 8, 5, tzinfo=utc)):
         response = self.client.get(url)
         for problem_name in ['zad1', 'zad2', 'zad3', 'zad4']:
             self.assertIn(problem_name, response.content)
         self.assertIn('contests/my_submissions.html',
                       [t.name for t in response.templates])
         self.assertEqual(response.content.count('<td>34</td>'), 2)
     with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
         response = self.client.get(url)
         self.assertEqual(response.content.count('<td>34</td>'), 4)
    def test_ranking_view(self):
        contest = Contest.objects.get()
        url = reverse('default_ranking', kwargs={'contest_id': contest.id})

        self.client.login(username='******')

        # trial round begins at 11:00, ends at 16:00, results are available
        # at 19:00
        with fake_time(datetime(2013, 12, 13, 10, 59, tzinfo=utc)):
            response = self.client.get(url)
            for task in ['trial', 'A', 'sum', 'test']:
                self.assertTaskNotIn(task, response.content)

        with fake_time(datetime(2013, 12, 13, 11, 30, tzinfo=utc)):
            response = self.client.get(url)
            self.assertTaskIn('trial', response.content)
            for task in ['A', 'sum', 'test']:
                self.assertTaskNotIn(task, response.content)

        with fake_time(datetime(2013, 12, 13, 17, 0, tzinfo=utc)):
            response = self.client.get(url)
            self.assertTaskIn('trial', response.content)
            for task in ['A', 'sum', 'test']:
                self.assertTaskNotIn(task, response.content)

        # round 1 starts at 20:40, ends at 01:40, results are available at
        # 09:00
        with fake_time(datetime(2013, 12, 14, 20, 39, tzinfo=utc)):
            response = self.client.get(url)
            self.assertTaskIn('trial', response.content)
            for task in ['A', 'sum', 'test']:
                self.assertTaskNotIn(task, response.content)

        with fake_time(datetime(2013, 12, 14, 20, 40, tzinfo=utc)):
            response = self.client.get(url)
            self.assertTaskNotIn('trial', response.content)
            for task in ['A', 'sum', 'test']:
                self.assertTaskIn(task, response.content)
            self.assertNotIn('The ranking is frozen.', response.content)

        with fake_time(datetime(2013, 12, 15, 1, 0, tzinfo=utc)):
            response = self.client.get(url)
            self.assertTaskNotIn('trial', response.content)
            for task in ['A', 'sum', 'test']:
                self.assertTaskIn(task, response.content)
            self.assertIn('The ranking is frozen.', response.content)

        with fake_time(datetime(2013, 12, 15, 7, 0, tzinfo=utc)):
            response = self.client.get(url)
            self.assertTaskNotIn('trial', response.content)
            for task in ['A', 'sum', 'test']:
                self.assertTaskIn(task, response.content)
            self.assertIn('The ranking is frozen.', response.content)

        with fake_time(datetime(2013, 12, 15, 9, 0, tzinfo=utc)):
            response = self.client.get(url)
            self.assertTaskNotIn('trial', response.content)
            for task in ['A', 'sum', 'test']:
                self.assertTaskIn(task, response.content)
            self.assertNotIn('The ranking is frozen.', response.content)
Ejemplo n.º 43
0
    def test_exclusive_contests_error(self):
        self._assertContestVisible('c1')
        self._assertContestVisible('c2')

        add_ex_conf(
            self.c1,
            datetime(2012, 1, 1, 10, tzinfo=utc),
            datetime(2012, 1, 1, 14, tzinfo=utc),
        )

        add_ex_conf(
            self.c2,
            datetime(2012, 1, 1, 12, tzinfo=utc),
            datetime(2012, 1, 1, 16, tzinfo=utc),
        )

        with fake_time(datetime(2012, 1, 1, 13, tzinfo=utc)):
            response = self.client.get('/c/c1/id/')
            self.assertContains(
                response, 'participate in more than one contest that exc'
            )
            self.assertEqual(len(mail.outbox), 1)
            message = mail.outbox[0]
            self.assertEqual(list(message.to), ['*****@*****.**'])
            self.assertIn('in more than one exclusive contest', message.body)
            self.assertIn('c1', message.body)
            self.assertIn('c2', message.body)
Ejemplo n.º 44
0
    def test_round_time_extension(self):
        user = User.objects.get(username='******')
        r1 = Round.objects.get()
        RoundTimeExtension(user=user, round=r1, extra_time=10).save()

        with fake_time(datetime(2012, 8, 9, 23, 10, tzinfo=utc)):
            self.reveal_submit(1)
Ejemplo n.º 45
0
 def test_no_zero_scores_in_ranking(self):
     self.client.login(username='******')
     with fake_time(datetime(2013, 1, 1, 0, 0, tzinfo=utc)):
         response = self.client.get(self._ranking_url(3))
         self.assertContains(response, '<td>Test User</td>')
         # Test User 2 scored 0 points for the only task in the round.
         self.assertNotContains(response, '<td>Test User 2</td>')
Ejemplo n.º 46
0
    def test_anonymous_participants(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                "oioioi.participants.tests.AnonymousContestController"
        contest.save()

        u1 = User.objects.get(pk=1001)
        self._register(u1, anonymous=False, possible=True)

        u2 = User.objects.get(pk=1002)
        self._register(u2, anonymous=True, possible=True)

        contest = Contest.objects.get()
        url = reverse('default_ranking', kwargs={'contest_id': contest.id})
        self.client.login(username='******')

        with fake_time(datetime(2015, 8, 5, tzinfo=utc)):
            response = self.client.get(url)
            self.assertNotIn('>test_user</a>', response.content)
            self.assertIn('>Test User</a>', response.content)

            self.assertIn('>test_user2</a>', response.content)
            self.assertNotIn('>Test User 2</a>', response.content)

            # Edit contest registration
            self._register(u2, anonymous=False, possible=True)
            # To see the changes in the ranking we have to clear the cache
            cache.clear()

            self.client.login(username='******')
            response = self.client.get(url)
            self.assertNotIn('>test_user2</a>', response.content)
            self.assertIn('>Test User 2</a>', response.content)
Ejemplo n.º 47
0
    def test_contest_admin_with_participant(self):
        self.c2.controller_name = \
            'oioioi.participants.tests.ParticipantsContestController'
        self.c2.save()

        ContestPermission(user=self.user, contest=self.c1,
                          permission='contests.contest_admin').save()
        Participant(user=self.user, contest=self.c2).save()

        ex_conf1 = ExclusivenessConfig()
        ex_conf1.contest = self.c1
        ex_conf1.start_date = datetime(2012, 1, 1, 8, tzinfo=utc)
        ex_conf1.end_date = datetime(2012, 1, 1, 12, tzinfo=utc)
        ex_conf1.save()
        ex_conf2 = ExclusivenessConfig()
        ex_conf2.contest = self.c2
        ex_conf2.start_date = datetime(2012, 1, 1, 8, tzinfo=utc)
        ex_conf2.end_date = datetime(2012, 1, 1, 12, tzinfo=utc)
        ex_conf2.save()

        self.client.login(username='******')

        with fake_time(datetime(2012, 1, 1, 10, tzinfo=utc)):
            self._assertContestVisible('c2')
            self._assertContestRedirects('c1', '/c/c2')
Ejemplo n.º 48
0
    def test_submit_permissions(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.participants.tests.ParticipantsContestController'
        contest.save()

        round = Round.objects.get(pk=1)
        problem_instance = ProblemInstance.objects.get(pk=1)
        self.assertTrue(problem_instance.round == round)
        round.start_date = datetime(2012, 7, 31, tzinfo=utc)
        round.end_date = datetime(2012, 8, 5, tzinfo=utc)
        round.save()

        user = User.objects.get(username='******')
        p = Participant(contest=contest, user=user, status='BANNED')
        p.save()

        with fake_time(datetime(2012, 8, 4, 0, 5, tzinfo=utc)):
            self.client.login(username='******')
            response = self.submit_file(contest, problem_instance)
            self.assertEqual(403, response.status_code)

            self.client.login(username='******')
            response = self.submit_file(contest, problem_instance)
            self.assertEqual(403, response.status_code)

            p.status = 'ACTIVE'
            p.save()

            self.client.login(username='******')
            response = self.submit_file(contest, problem_instance)
            self._assertSubmitted(contest, response)
Ejemplo n.º 49
0
    def test_contest_admin_with_participant(self):
        self.c2.controller_name = (
            'oioioi.participants.tests.ParticipantsContestController')
        self.c2.save()

        ContestPermission(user=self.user,
                          contest=self.c1,
                          permission='contests.contest_admin').save()
        Participant(user=self.user, contest=self.c2).save()

        ex_conf1 = ExclusivenessConfig()
        ex_conf1.contest = self.c1
        ex_conf1.start_date = datetime(2012, 1, 1, 8, tzinfo=utc)
        ex_conf1.end_date = datetime(2012, 1, 1, 12, tzinfo=utc)
        ex_conf1.save()
        ex_conf2 = ExclusivenessConfig()
        ex_conf2.contest = self.c2
        ex_conf2.start_date = datetime(2012, 1, 1, 8, tzinfo=utc)
        ex_conf2.end_date = datetime(2012, 1, 1, 12, tzinfo=utc)
        ex_conf2.save()

        self.assertTrue(self.client.login(username='******'))

        with fake_time(datetime(2012, 1, 1, 10, tzinfo=utc)):
            self._assertContestVisible('c2')
            self._assertContestRedirects('c1', '/c/c2')
Ejemplo n.º 50
0
 def _assertBackend(self, user):
     with fake_time(datetime(2012, 1, 1, 11, tzinfo=utc)):
         self.client.get('/c/c1/id')
         session = self.client.session
         self.assertEqual(session['_auth_user_id'], unicode(user.id))
         self.assertEqual(session['_auth_user_backend'],
                          'oioioi.ipdnsauth.backends.IpDnsBackend')
Ejemplo n.º 51
0
    def test_no_thread(self):
        contest = get_contest_with_forum()
        forum = contest.forum
        category = Category(forum=forum, name='test_category')
        category.save()
        self.client.login(username='******')
        url = reverse('forum_category',
                      kwargs={
                          'contest_id': contest.id,
                          'category_id': category.id
                      })
        with fake_time(self.now):
            response = self.client.get(url, follow=True)
            # not locked, adding new thread possible
            self.assertIn('Add new thread', response.content)

            forum.lock_date = self.past
            forum.save()
            self.assertEqual(True, forum.is_locked(self.now))
            url = reverse('forum_category',
                          kwargs={
                              'contest_id': contest.id,
                              'category_id': category.id
                          })
            response = self.client.get(url, follow=True)
            # locked, adding new thread not possible
            self.assertEqual(200, response.status_code)
            self.assertNotIn('Add new thread', response.content)
Ejemplo n.º 52
0
    def test_exclusive_contests_error(self):
        self._assertContestVisible('c1')
        self._assertContestVisible('c2')

        ex_conf = ExclusivenessConfig()
        ex_conf.contest = self.c1
        ex_conf.start_date = datetime(2012, 1, 1, 10, tzinfo=utc)
        ex_conf.end_date = datetime(2012, 1, 1, 14, tzinfo=utc)
        ex_conf.save()

        ex_conf = ExclusivenessConfig()
        ex_conf.contest = self.c2
        ex_conf.start_date = datetime(2012, 1, 1, 12, tzinfo=utc)
        ex_conf.end_date = datetime(2012, 1, 1, 16, tzinfo=utc)
        ex_conf.save()

        with fake_time(datetime(2012, 1, 1, 13, tzinfo=utc)):
            response = self.client.get('/c/c1/id/')
            self.assertContains(response,
                    'participate in more than one contest that exc')
            self.assertEqual(len(mail.outbox), 1)
            message = mail.outbox[0]
            self.assertEqual(list(message.to), ['*****@*****.**'])
            self.assertIn('in more than one exclusive contest', message.body)
            self.assertIn('c1', message.body)
            self.assertIn('c2', message.body)
Ejemplo n.º 53
0
    def test_reveal_limit(self):
        with fake_time(datetime(2012, 8, 8, tzinfo=utc)):
            self.reveal_submit(4)
            self.reveal_submit(5)
            response = self.reveal_submit(1, success=False)

            self.assertContains(response, 'used <strong>2</strong> out of 2 reveals')
Ejemplo n.º 54
0
    def test_lock_forum_with_no_unlock_date(self):
        contest = get_contest_with_forum()
        forum = contest.forum
        self.client.login(username='******')
        url = reverse('default_contest_view',
                      kwargs={'contest_id': contest.id})
        with fake_time(self.now):
            # locked, no unlock date set
            forum.lock_date = self.past
            forum.visible = False
            forum.save()

            # locked & not visible, so user does not see forum
            response = self.client.get(url, follow=True)
            self.assertNotIn('Forum', response.content)
            url = reverse('forum', kwargs={'contest_id': contest.id})
            response = self.client.get(url, follow=True)
            self.assertEqual(403, response.status_code)
            self.assertEqual(True, forum.is_locked(self.now))

            forum.visible = True
            forum.save()
            # locked & visible, so user sees forum
            response = self.client.get(url, follow=True)
            self.assertIn('Forum', response.content)
            self.assertEqual(True, forum.is_locked(self.now))
Ejemplo n.º 55
0
    def test_lock_forum_with_no_unlock_date(self):
        contest = get_contest_with_forum()
        forum = contest.forum
        self.assertTrue(self.client.login(username='******'))
        url = reverse('default_contest_view',
                      kwargs={'contest_id': contest.id})
        with fake_time(self.now):
            # locked, no unlock date set
            forum.lock_date = self.past
            forum.visible = False
            forum.save()

            # locked & not visible, so user does not see forum
            response = self.client.get(url, follow=True)
            self.assertNotContains(response, 'Forum')
            url = reverse('forum', kwargs={'contest_id': contest.id})
            response = self.client.get(url, follow=True)
            self.assertEqual(403, response.status_code)
            self.assertEqual(True, forum.is_locked(self.now))

            forum.visible = True
            forum.save()
            # locked & visible, so user sees forum
            response = self.client.get(url, follow=True)
            self.assertContains(response, 'Forum')
            self.assertEqual(True, forum.is_locked(self.now))
Ejemplo n.º 56
0
    def test_submit_permissions(self):
        contest = Contest.objects.get()
        contest.controller_name = (
            'oioioi.participants.tests.ParticipantsContestController')
        contest.save()

        round = Round.objects.get(pk=1)
        problem_instance = ProblemInstance.objects.get(pk=1)
        self.assertTrue(problem_instance.round == round)
        round.start_date = datetime(2012, 7, 31, tzinfo=utc)
        round.end_date = datetime(2012, 8, 5, tzinfo=utc)
        round.save()

        user = User.objects.get(username='******')
        p = Participant(contest=contest, user=user, status='BANNED')
        p.save()

        with fake_time(datetime(2012, 8, 4, 0, 5, tzinfo=utc)):
            self.assertTrue(self.client.login(username='******'))
            response = self.submit_file(contest, problem_instance)
            self.assertEqual(403, response.status_code)

            self.assertTrue(self.client.login(username='******'))
            response = self.submit_file(contest, problem_instance)
            self.assertEqual(403, response.status_code)

            p.status = 'ACTIVE'
            p.save()

            self.assertTrue(self.client.login(username='******'))
            response = self.submit_file(contest, problem_instance)
            self._assertSubmitted(contest, response)
Ejemplo n.º 57
0
    def test_generate_and_download_user_permission(self):
        self.client.login(username='******')
        self.client.get('/c/c/')  # 'c' becomes the current contest

        submission = ProgramSubmission.objects.get(pk=1)
        gen_url = reverse('generate_user_output', kwargs={'testreport_id': 5})
        down_one_url = reverse('download_user_output',
                               kwargs={'testreport_id': 5})
        down_all_url = reverse('download_user_output',
                               kwargs={'submission_report_id': 2})

        # post required for generate
        response = self.client.get(gen_url, follow=True)
        self.assertEqual(response.status_code, 405)
        response = self.client.post(gen_url, follow=True)
        self.assertEqual(response.status_code, 403)
        response = self.client.get(down_one_url, follow=True)
        self.assertEqual(response.status_code, 403)
        response = self.client.get(down_all_url, follow=True)
        self.assertEqual(response.status_code, 403)

        # test report visibility for user with permission
        ReportActionsConfig(problem=submission.problem_instance.problem,
                            can_user_generate_outs=True).save()
        response = self.client.post(gen_url, follow=True)
        self.assertEqual(response.status_code, 200)
        response = self.client.get(down_one_url, follow=True)
        self.assertEqual(response.status_code, 200)
        response = self.client.get(down_all_url, follow=True)
        self.assertEqual(response.status_code, 404)

        # test if results have not been published yet (2012-07-31)
        with fake_time(datetime(2012, 7, 29, 11, 11, tzinfo=utc)):
            response = self.client.post(gen_url, follow=True)
            self.assertEqual(response.status_code, 403)