Ejemplo n.º 1
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.º 2
0
    def test_both_hands_cascading_on_registration_delete(self):
        def _assert_equals_len(expectedLen=None):
            self.assertEqual(Participant.objects.count(),
                             TestRegistration.objects.count())
            if expectedLen:
                self.assertEqual(Participant.objects.count(), expectedLen)

        contest = Contest.objects.get()
        contest.controller_name = (
            'oioioi.participants.tests.ParticipantsContestController')
        contest.save()

        reg = []

        for user in User.objects.all():
            p = Participant(contest=contest, user=user)
            p.save()
            r = TestRegistration(participant=p, name='trolololo')
            r.save()
            reg.append(r)

        _assert_equals_len(len(reg))
        reg[0].delete()
        _assert_equals_len(len(reg) - 1)
        reg[1].participant.delete()
        _assert_equals_len(len(reg) - 2)
        reg = TestRegistration.objects.filter(name='trolololo').delete()
        _assert_equals_len(0)
Ejemplo n.º 3
0
    def test_both_hands_cascading_on_registration_delete(self):
        def _assert_equals_len(expectedLen=None):
            self.assertEquals(Participant.objects.count(),
                              TestRegistration.objects.count())
            if expectedLen:
                self.assertEquals(Participant.objects.count(), expectedLen)

        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.participants.tests.ParticipantsContestController'
        contest.save()

        reg = []

        for user in User.objects.all():
            p = Participant(contest=contest, user=user)
            p.save()
            r = TestRegistration(participant=p, name='trolololo')
            r.save()
            reg.append(r)

        _assert_equals_len(len(reg))
        reg[0].delete()
        _assert_equals_len(len(reg) - 1)
        reg[1].participant.delete()
        _assert_equals_len(len(reg) - 2)
        reg = TestRegistration.objects.filter(name='trolololo').delete()
        _assert_equals_len(0)
Ejemplo n.º 4
0
    def setUp(self):
        contest = Contest.objects.get()
        contest.controller_name = 'oioioi.amppz.controllers.AMPPZContestController'
        contest.save()

        user = User.objects.get(username='******')
        p = Participant(contest=contest, user=user)
        p.save()
Ejemplo n.º 5
0
 def test_contest_info(self):
     contest = Contest.objects.get()
     user = User.objects.get(username='******')
     p = Participant(contest=contest, user=user)
     p.save()
     OpenRegistration(participant_id=p.id, **self.reg_data).save()
     url = reverse('contest_info', kwargs={'contest_id': contest.id})
     data = self.client.get(url).json()
     self.assertEqual(data['users_count'], 1)
Ejemplo n.º 6
0
    def test_missing_registration_model(self):
        contest = Contest.objects.get()
        user = User.objects.get(username='******')

        p = Participant(contest=contest, user=user)
        p.save()

        self.assertRaises(ObjectDoesNotExist,
            lambda: getattr(p, 'registration_model'))
Ejemplo n.º 7
0
 def test_contest_info(self):
     contest = Contest.objects.get()
     user = User.objects.get(username='******')
     p = Participant(contest=contest, user=user)
     p.save()
     OpenRegistration(participant_id=p.id, **self.reg_data).save()
     url = reverse('contest_info', kwargs={'contest_id': contest.id})
     data = self.client.get(url).json()
     self.assertEqual(data['users_count'], 1)
Ejemplo n.º 8
0
    def test_missing_registration_model(self):
        contest = Contest.objects.get()
        user = User.objects.get(username='******')

        p = Participant(contest=contest, user=user)
        p.save()

        self.assertRaises(ObjectDoesNotExist,
                          lambda: getattr(p, 'registration_model'))
Ejemplo n.º 9
0
    def setUp(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.amppz.controllers.AMPPZContestController'
        contest.save()

        user = User.objects.get(username='******')
        p = Participant(contest=contest, user=user)
        p.save()
Ejemplo n.º 10
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.º 11
0
    def test_participants_accounts_menu(self):
        contest = Contest.objects.get()
        user = User.objects.get(username='******')

        p = Participant(contest=contest, user=user)
        p.save()

        self.assertTrue(self.client.login(username='******'))
        url = reverse('default_contest_view',
                      kwargs={'contest_id': contest.id})
        response = self.client.get(url, follow=True)
        self.assertNotContains(response, 'Register to the contest')
        self.assertNotContains(response, 'Edit contest registration')
Ejemplo n.º 12
0
    def test_participants_accounts_menu(self):
        contest = Contest.objects.get()
        user = User.objects.get(username='******')

        p = Participant(contest=contest, user=user)
        p.save()

        self.assertTrue(self.client.login(username='******'))
        url = reverse('default_contest_view',
                      kwargs={'contest_id': contest.id})
        response = self.client.get(url, follow=True)
        self.assertNotContains(response, 'Register to the contest')
        self.assertNotContains(response, 'Edit contest registration')
Ejemplo n.º 13
0
    def test_user_info_page(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                "oioioi.participants.tests.ParticipantsContestController"
        contest.save()

        user = User.objects.get(pk=1001)
        p = Participant(contest=contest, user=user)
        p.save()
        url = reverse('user_info', kwargs={'contest_id': contest.id,
                                           'user_id': user.id})
        self.client.login(username='******')
        response = self.client.get(url)
        self.assertIn('<h4>Participant info:</h4>', response.content)
Ejemplo n.º 14
0
    def test_participants_accounts_menu(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)
        p.save()

        self.client.login(username='******')
        response = self.client.get('/c/%s/' % (contest.id,), follow=True)
        self.assertNotIn('Register to the contest', response.content)
        self.assertNotIn('Edit contest registration', response.content)
Ejemplo n.º 15
0
    def test_participants_accounts_menu(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.participants.tests.ParticipantsContestController'
        contest.save()
        user = User.objects.get(username='******')

        p = Participant(contest=contest, user=user)
        p.save()

        self.client.login(username='******')
        url = reverse('default_contest_view', kwargs={'contest_id': contest.id})
        response = self.client.get(url, follow=True)
        self.assertNotIn('Register to the contest', response.content)
        self.assertIn('Edit contest registration', response.content)
Ejemplo n.º 16
0
 def setUp(self):
     contest = Contest.objects.get()
     user = User.objects.get(username='******')
     p = Participant(contest=contest, user=user, status='ACTIVE')
     p.save()
     user = User.objects.get(username='******')
     p = Participant(contest=contest, user=user, status='ACTIVE')
     p.save()
Ejemplo n.º 17
0
def add_usergroup_to_members(contest, usergroup, only_exclusive=True):
    users = usergroup.members
    if only_exclusive:
        users = filter_usergroup_exclusive_members(contest, usergroup, users)
    users = users.exclude(participant__contest__id=contest.id)
    Participant.objects.bulk_create(
        [Participant(contest=contest, user=u) for u in users])
Ejemplo n.º 18
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')
    def test_participants_accounts_menu(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.participants.tests.ParticipantsContestController'
        contest.save()
        user = User.objects.get(username='******')

        p = Participant(contest=contest, user=user)
        p.save()

        self.client.login(username='******')
        url = reverse('default_contest_view',
                      kwargs={'contest_id': contest.id})
        response = self.client.get(url, follow=True)
        self.assertNotIn('Register to the contest', response.content)
        self.assertNotIn('Edit contest registration', response.content)
Ejemplo n.º 20
0
    def test_user_info_page(self):
        contest = Contest.objects.get()
        contest.controller_name = (
            "oioioi.participants.tests.ParticipantsContestController")
        contest.save()

        user = User.objects.get(pk=1001)
        p = Participant(contest=contest, user=user)
        p.save()
        url = reverse('user_info',
                      kwargs={
                          'contest_id': contest.id,
                          'user_id': user.id
                      })
        self.assertTrue(self.client.login(username='******'))
        response = self.client.get(url)
        self.assertContains(response, 'Participant info')
Ejemplo n.º 21
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.º 22
0
    def test_contest_visibility(self):
        contest = Contest(id='invisible', name='Invisible Contest')
        contest.controller_name = 'oioioi.participants.tests.OnsiteContestController'
        contest.save()
        user = User.objects.get(username='******')
        response = self.client.get(reverse('select_contest'))
        self.assertIn('contests/select_contest.html',
                      [t.name for t in response.templates])
        self.assertEqual(len(response.context['contests']), 1)

        self.assertTrue(self.client.login(username='******'))
        response = self.client.get(reverse('select_contest'))
        self.assertEqual(len(response.context['contests']), 1)

        p1 = Participant(contest=contest, user=user, status='BANNED')
        p1.save()
        self.assertTrue(self.client.login(username='******'))
        response = self.client.get(reverse('select_contest'))
        self.assertEqual(len(response.context['contests']), 1)

        p1.status = 'ACTIVE'
        p1.save()
        self.assertTrue(self.client.login(username='******'))
        response = self.client.get(reverse('select_contest'))
        self.assertEqual(len(response.context['contests']), 2)

        self.assertTrue(self.client.login(username='******'))
        response = self.client.get(reverse('select_contest'))
        self.assertEqual(len(response.context['contests']), 2)
        self.assertContains(response, 'Invisible Contest')
Ejemplo n.º 23
0
    def test_participants_unregister(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.participants.tests.OpenRegistrationContestController'
        contest.save()

        url = reverse('participants_unregister',
                      kwargs={'contest_id': contest.id})

        self.client.login(username='******')
        response = self.client.post(url, {'post': 'yes'})
        self.assertEqual(403, response.status_code)

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

        self.client.login(username='******')
        response = self.client.post(url, {'post': 'yes'})
        self.assertEqual(403, response.status_code)

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

        self.client.login(username='******')
        response = self.client.post(url, {'post': 'yes'})
        self.assertEqual(302, response.status_code)
        self.assertEqual(Participant.objects.count(), 0)
Ejemplo n.º 24
0
    def test_contest_access(self):
        contest = Contest.objects.get()
        contest.controller_name = 'oioioi.oi.controllers.OIContestController'
        contest.save()

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

        url = reverse('default_contest_view',
                      kwargs={'contest_id': contest.id})

        self.assertTrue(self.client.login(username='******'))
        response = self.client.get(url, follow=True)
        self.assertEqual(200, response.status_code)

        self.assertTrue(self.client.login(username='******'))
        response = self.client.get(url, follow=True)
        self.assertEqual(200, response.status_code)

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

        self.assertTrue(self.client.login(username='******'))
        response = self.client.get(url, follow=True)
        self.assertEqual(200, response.status_code)
Ejemplo n.º 25
0
    def test_participants_unregister_forbidden(self):
        contest = Contest.objects.get()

        url = reverse('participants_unregister',
                      kwargs={'contest_id': contest.id})

        self.assertTrue(self.client.login(username='******'))
        response = self.client.post(url, {'post': 'yes'})
        self.assertEqual(403, response.status_code)

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

        self.assertTrue(self.client.login(username='******'))
        response = self.client.post(url, {'post': 'yes'})
        self.assertEqual(403, response.status_code)

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

        self.assertTrue(self.client.login(username='******'))
        response = self.client.post(url, {'post': 'yes'})
        self.assertEqual(403, response.status_code)
Ejemplo n.º 26
0
    def test_participants_contest_access(self):
        contest = Contest.objects.get()
        contest.controller_name = (
            'oioioi.participants.tests.ParticipantsContestController')
        contest.save()

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

        url = reverse('default_contest_view',
                      kwargs={'contest_id': contest.id})

        self.assertTrue(self.client.login(username='******'))
        response = self.client.get(url, follow=True)
        # Make sure we get nice page, allowing to log out.
        self.assertNotContains(response, 'My submissions', status_code=403)
        self.assertContains(response, 'OIOIOI', status_code=403)
        self.assertContains(response, 'Log out', status_code=403)

        self.assertTrue(self.client.login(username='******'))
        response = self.client.get(url, follow=True)
        self.assertEqual(403, response.status_code)

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

        self.assertTrue(self.client.login(username='******'))
        response = self.client.get(url, follow=True)
        self.assertEqual(200, response.status_code)
Ejemplo n.º 27
0
    def test_noadmin_admin_visibility(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.participants.tests.NoAdminParticipantsContestController'
        contest.save()
        user = User.objects.get(username='******')

        p = Participant(contest=contest, user=user)
        p.save()

        url = reverse('oioioiadmin:participants_participant_changelist')
        self.client.login(username='******')
        check_not_accessible(self, url)

        self.client.login(username='******')
        check_not_accessible(self, url)
        self.client.login(username='******')
        check_not_accessible(self, url)
Ejemplo n.º 28
0
    def test_ranking_access(self):
        contest = Contest.objects.get()
        contest.controller_name = \
            'oioioi.oi.controllers.OIContestController'
        contest.save()
        round = contest.round_set.get()
        user = User.objects.get(username='******')
        p = Participant(contest=contest, user=user)
        p.save()
        url = reverse('default_ranking', kwargs={'contest_id': contest.id})

        with fake_timezone_now(round.results_date + timedelta(days=1)):
            self.client.login(username='******')
            response = self.client.get(url)
            self.assertContains(response, "No rankings available.")
            self.client.login(username='******')
            response = self.client.get(url)
            self.assertContains(response, '>Test User</a>')
Ejemplo n.º 29
0
    def test_onsite_user_info_page(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.participants.tests.OnsiteContestController'
        contest.save()
        user = User.objects.get(username='******')

        p = Participant(contest=contest, user=user)
        p.save()
        reg = OnsiteRegistration(participant=p, number=3, local_number=5)
        reg.save()

        self.assertTrue(self.client.login(username='******'))
        url = reverse('user_info', kwargs={'contest_id': contest.id,
                                           'user_id': user.id})
        response = self.client.get(url)

        self.assertContains(response, '<h4>OI info:</h4>')
Ejemplo n.º 30
0
    def test_noadmin_admin_visibility(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.participants.tests.NoAdminParticipantsContestController'
        contest.save()
        user = User.objects.get(username='******')

        p = Participant(contest=contest, user=user)
        p.save()

        url = reverse('oioioiadmin:participants_participant_changelist')
        self.client.login(username='******')
        check_not_accessible(self, url)

        self.client.login(username='******')
        check_not_accessible(self, url)
        self.client.login(username='******')
        check_not_accessible(self, url)
Ejemplo n.º 31
0
    def test_ranking_access(self):
        contest = Contest.objects.get()
        contest.controller_name = \
            'oioioi.oi.controllers.OIContestController'
        contest.save()
        round = contest.round_set.get()
        user = User.objects.get(username='******')
        p = Participant(contest=contest, user=user)
        p.save()
        url = reverse('default_ranking', kwargs={'contest_id': contest.id})

        with fake_time(round.results_date + timedelta(days=1)):
            self.client.login(username='******')
            response = self.client.get(url)
            self.assertContains(response, "No rankings available.")
            self.client.login(username='******')
            response = self.client.get(url)
            self.assertContains(response, '>Test User</a>')
Ejemplo n.º 32
0
    def test_onsite_user_info_page(self):
        contest = Contest.objects.get()
        contest.controller_name = 'oioioi.participants.tests.OnsiteContestController'
        contest.save()
        user = User.objects.get(username='******')

        p = Participant(contest=contest, user=user)
        p.save()
        reg = OnsiteRegistration(participant=p, number=3, local_number=5)
        reg.save()

        self.assertTrue(self.client.login(username='******'))
        url = reverse('user_info',
                      kwargs={
                          'contest_id': contest.id,
                          'user_id': user.id
                      })
        response = self.client.get(url)

        self.assertContains(response, '<h4>OI info:</h4>')
Ejemplo n.º 33
0
    def test_noadmin_admin_visibility(self):
        contest = Contest.objects.get()
        contest.controller_name = ('oioioi.participants.tests.'
                                   'NoAdminParticipantsContestController')
        contest.save()
        user = User.objects.get(username='******')

        p = Participant(contest=contest, user=user)
        p.save()

        self.client.get('/c/c/')  # 'c' becomes the current contest

        url = reverse('oioioiadmin:participants_participant_changelist')
        self.assertTrue(self.client.login(username='******'))
        check_not_accessible(self, url)

        self.assertTrue(self.client.login(username='******'))
        check_not_accessible(self, url)
        self.assertTrue(self.client.login(username='******'))
        check_not_accessible(self, url)
Ejemplo n.º 34
0
    def test_participants_unregister(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.participants.tests.ParticipantsContestController'
        contest.save()

        url = reverse('participants_unregister',
                      kwargs={'contest_id': contest.id})

        self.client.login(username='******')
        response = self.client.post(url, {'post': 'yes'})
        self.assertEqual(403, response.status_code)

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

        response = self.client.post(url, {'post': 'yes'})
        self.assertEqual(403, response.status_code)
        self.assertEqual(Participant.objects.count(), 1)
Ejemplo n.º 35
0
    def test_participants_unregister_forbidden(self):
        contest = Contest.objects.get()

        url = reverse('participants_unregister',
                      kwargs={'contest_id': contest.id})

        self.assertTrue(self.client.login(username='******'))
        response = self.client.post(url, {'post': 'yes'})
        self.assertEqual(403, response.status_code)

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

        self.assertTrue(self.client.login(username='******'))
        response = self.client.post(url, {'post': 'yes'})
        self.assertEqual(403, response.status_code)

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

        self.assertTrue(self.client.login(username='******'))
        response = self.client.post(url, {'post': 'yes'})
        self.assertEqual(403, response.status_code)
Ejemplo n.º 36
0
    def test_contest_access(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.oi.controllers.OIContestController'
        contest.save()

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

        url = reverse('default_contest_view',
                      kwargs={'contest_id': contest.id})

        self.client.login(username='******')
        response = self.client.get(url, follow=True)
        self.assertEqual(200, response.status_code)

        self.client.login(username='******')
        response = self.client.get(url, follow=True)
        self.assertEqual(200, response.status_code)

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

        self.client.login(username='******')
        response = self.client.get(url, follow=True)
        self.assertEqual(200, response.status_code)
Ejemplo n.º 37
0
    def test_participants_contest_visibility(self):
        contest = Contest(id='invisible', name='Invisible Contest')
        contest.controller_name = \
                'oioioi.participants.tests.ParticipantsContestController'
        contest.save()
        user = User.objects.get(username='******')
        response = self.client.get(reverse('select_contest'))
        self.assertIn('contests/select_contest.html',
                [t.name for t in response.templates])
        self.assertEqual(len(response.context['contests']), 1)

        self.client.login(username='******')
        response = self.client.get(reverse('select_contest'))
        self.assertEqual(len(response.context['contests']), 1)

        p1 = Participant(contest=contest, user=user, status='BANNED')
        p1.save()
        self.client.login(username='******')
        response = self.client.get(reverse('select_contest'))
        self.assertEqual(len(response.context['contests']), 1)

        p1.status = 'ACTIVE'
        p1.save()
        self.client.login(username='******')
        response = self.client.get(reverse('select_contest'))
        self.assertEqual(len(response.context['contests']), 2)

        self.client.login(username='******')
        response = self.client.get(reverse('select_contest'))
        self.assertEqual(len(response.context['contests']), 2)
        self.assertIn('Invisible Contest', response.content)
Ejemplo n.º 38
0
    def test_participants_unregister(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.oi.controllers.OIOnsiteContestController'
        contest.save()

        self.client.login(username='******')
        response = self.client.post('/c/%s/unregister' % (contest.id,),
                                    {'post': 'yes'})
        self.assertEqual(404, response.status_code)

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

        self.client.login(username='******')
        response = self.client.post('/c/%s/unregister' % (contest.id,),
                                    {'post': 'yes'})
        self.assertEqual(403, response.status_code)

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

        self.client.login(username='******')
        response = self.client.post('/c/%s/unregister' % (contest.id,),
                                    {'post': 'yes'})
        self.assertEqual(403, response.status_code)
Ejemplo n.º 39
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.º 40
0
    def test_participants_contest_access(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.participants.tests.ParticipantsContestController'
        contest.save()

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

        url = reverse('default_contest_view',
                      kwargs={'contest_id': contest.id})

        self.client.login(username='******')
        response = self.client.get(url, follow=True)
        self.assertEqual(403, response.status_code)
        # Make sure we get nice page, allowing to log out.
        self.assertNotIn('My submissions', response.content)
        self.assertIn('OIOIOI', response.content)
        self.assertIn('Log out', response.content)

        self.client.login(username='******')
        response = self.client.get(url, follow=True)
        self.assertEqual(403, response.status_code)

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

        self.client.login(username='******')
        response = self.client.get(url, follow=True)
        self.assertEqual(200, response.status_code)
Ejemplo n.º 41
0
    def test_participants_contest_access(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.participants.tests.ParticipantsContestController'
        contest.save()

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


        self.client.login(username='******')
        response = self.client.get('/c/%s/' % (contest.id,), follow=True)
        self.assertEqual(403, response.status_code)

        self.client.login(username='******')
        response = self.client.get('/c/%s/' % (contest.id,), follow=True)
        self.assertEqual(403, response.status_code)

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

        self.client.login(username='******')
        response = self.client.get('/c/%s/' % (contest.id,), follow=True)
        self.assertEqual(200, response.status_code)
Ejemplo n.º 42
0
 def setUp(self):
     contest = Contest.objects.get()
     user = User.objects.get(username='******')
     p = Participant(contest=contest, user=user, status='ACTIVE')
     p.save()
     user = User.objects.get(username='******')
     p = Participant(contest=contest, user=user, status='ACTIVE')
     p.save()
Ejemplo n.º 43
0
 def setUp(self):
     contest = Contest.objects.get()
     user = User.objects.get(username="******")
     p = Participant(contest=contest, user=user, status="ACTIVE")
     p.save()
     user = User.objects.get(username="******")
     p = Participant(contest=contest, user=user, status="ACTIVE")
     p.save()
Ejemplo n.º 44
0
    def test_participants_admin_visibility(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.participants.tests.ParticipantsContestController'
        contest.save()
        user = User.objects.get(username='******')

        p = Participant(contest=contest, user=user)
        p.save()

        self.client.get('/c/c/')  # 'c' becomes the current contest

        url = reverse('oioioiadmin:participants_participant_changelist')
        self.client.login(username='******')
        check_not_accessible(self, url)

        self.client.login(username='******')
        response = self.client.get(url)
        self.assertContains(response, 'test_user')

        self.client.login(username='******')
        response = self.client.get(url)
        self.assertContains(response, 'test_user')
Ejemplo n.º 45
0
    def test_mailsubmit_permissions(self):
        contest = Contest.objects.get()
        contest.controller_name = (
            'oioioi.participants.tests.ParticipantsContestController'
        )
        contest.save()

        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()

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

        with fake_time(datetime(2012, 8, 13, 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.assertEqual(MailSubmission.objects.count(), 0)

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

            self.assertEqual(MailSubmission.objects.count(), 1)
Ejemplo n.º 46
0
    def test_participants_selector(self):
        self.c1.controller_name = (
            'oioioi.participants.tests.ParticipantsContestController')
        self.c1.save()

        Participant(user=self.user, contest=self.c1).save()

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

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

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

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

        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()

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

        with fake_time(datetime(2012, 8, 13, 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.assertEqual(MailSubmission.objects.count(), 0)

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

            self.assertEqual(MailSubmission.objects.count(), 1)
Ejemplo n.º 48
0
 def setUp(self):
     contest = Contest.objects.get()
     contest.controller_name = 'oioioi.oi.controllers.OIContestController'
     contest.save()
     Participant(contest=contest,
             user=User.objects.get(username='******')).save()
Ejemplo n.º 49
0
    def test_pupils_site(self):
        self.assertTrue(self.client.login(username='******'))  # teacher

        user = User.objects.get(username='******')
        contest = Contest.objects.get(id='c')
        make_user_contest_admin(user, contest)
        change_contest_type(contest)

        self.client.get('/c/c/')
        url = reverse('show_members', kwargs={'member_type': 'pupil'})
        response = self.client.get(url)

        self.assertContains(response, "Add new group to this contest")
        self.assertContains(response, "Groups")
        self.assertContains(response, "Members")
        self.assertNotContains(response, "Create new group from members below")
        self.assertContains(
            response, "You have not added any group to this contest yet.")

        participant = Participant(contest=contest, user=user)
        participant.save()

        url = reverse('show_members', kwargs={'member_type': 'pupil'})
        response = self.client.get(url)

        self.assertContains(response, "Add new group to this contest")
        self.assertContains(response, "Create new group from members below")
        self.assertContains(
            response, "You have not added any group to this contest yet.")

        group = UserGroup.objects.get(id=1003)
        group.contests.add(contest)
        group.save()

        url = reverse('show_members', kwargs={'member_type': 'pupil'})
        response = self.client.get(url)

        self.assertContains(response, "Add new group to this contest")
        self.assertContains(response, "Create new group from members below")
        self.assertContains(response, "teacher group")
        self.assertContains(response, "Modify group")
        self.assertContains(response, "Test User 3")
        self.assertContains(response, "Remove group from this contest")
        self.assertNotContains(
            response, "You have not added any group to this contest yet.")

        with self.modify_settings(
                INSTALLED_APPS={'remove': 'oioioi.usergroups'}):
            url = reverse('show_members', kwargs={'member_type': 'pupil'})
            response = self.client.get(url)

            self.assertNotContains(response, "Add new group to this contest")
            self.assertNotContains(response,
                                   "Create new group from members below")
            self.assertNotContains(response, "Modify groups")
            self.assertNotContains(
                response, "You have not added any group to this contest yet.")

        groups = UserGroup.objects.all()
        for usergroup in groups:
            usergroup.delete()

        url = reverse('show_members', kwargs={'member_type': 'pupil'})
        response = self.client.get(url)

        self.assertNotContains(response, "Add new group to this contest")
        self.assertContains(response, "Create new group from members below")
        self.assertNotContains(response, "Remove group from this contest")
        self.assertNotContains(
            response, "You have not added any group to this contest yet.")

        participant.delete()

        url = reverse('show_members', kwargs={'member_type': 'pupil'})
        response = self.client.get(url)

        self.assertNotContains(response, "Create new group from members below")