예제 #1
0
파일: tests.py 프로젝트: sio2project/oioioi
 def test_max_one_team_per_user(self):
     contest = Contest.objects.get()
     # This user is already in "test_team" (pk=1)
     user = User.objects.get(username='******')
     new_team = Team(name='new_team', contest=contest, login='******')
     membership = TeamMembership(team=new_team, user=user)
     with self.assertRaisesMessage(ValidationError,
                                   "The user is already in another team"):
         membership.validate_unique()
예제 #2
0
 def test_max_one_team_per_user(self):
     contest = Contest.objects.get()
     # This user is already in "test_team" (pk=1)
     user = User.objects.get(username='******')
     new_team = Team(name='new_team', contest=contest, login='******')
     membership = TeamMembership(team=new_team, user=user)
     with self.assertRaisesMessage(ValidationError,
                                   "The user is already in another team"):
         membership.validate_unique()
예제 #3
0
파일: views.py 프로젝트: jakubste/oioioi
def create_team_view(request):
    if request.method == 'POST':
        team_create_form = CreateTeamForm(request.POST, request=request)
        if team_create_form.is_valid():
            new_team = create_team(team_create_form.cleaned_data['login'],
                                   team_create_form.cleaned_data['name'],
                                   request.contest)
            membership = TeamMembership(team=new_team, user=request.user)
            membership.save()
            return HttpResponseRedirect(
                reverse('team_view', kwargs={'contest_id':
                                             request.contest.id}))
    else:
        team_create_form = CreateTeamForm()
    return TemplateResponse(request, 'teams/create-team.html',
                            {'form': team_create_form})
예제 #4
0
    def test_submit_file_with_team(self):
        contest = Contest.objects.get()
        user = User.objects.get(username='******')
        problem_instance = ProblemInstance.objects.get()

        team = create_team('test_team', 'Super Team!', contest)
        tm = TeamMembership(team=team, user=user)
        tm.save()

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

        response = self.submit_file(contest, problem_instance, user=user)
        self.assertIn('You can't submit a solution for another team!',
                      response.content)

        response = self.submit_file(contest, problem_instance, user=team.user)
        self.assertEqual(Submission.objects.get().user, team.user)
예제 #5
0
    def test_submit_file_with_team(self):
        contest = Contest.objects.get()
        user = User.objects.get(username='******')
        problem_instance = ProblemInstance.objects.get()

        team = create_team('test_team', 'Super Team!', contest)
        tm = TeamMembership(team=team, user=user)
        tm.save()

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

        response = self.submit_file(contest, problem_instance, user=user)
        self.assertIn('You can't submit a solution for another team!',
                      response.content)

        response = self.submit_file(contest, problem_instance, user=team.user)
        self.assertEqual(Submission.objects.get().user, team.user)
예제 #6
0
파일: views.py 프로젝트: jakubste/oioioi
def join_team_view(request, join_key):
    team = get_object_or_404(Team, contest=request.contest, join_key=join_key)
    if request.method == 'POST':
        members = [
            membership.user
            for membership in TeamMembership.objects.filter(team=team)
        ]
        tm = TeamMembership(team=team, user=request.user)
        tm.save()
        return HttpResponseRedirect(
            reverse('team_view', kwargs={'contest_id': request.contest.id}))
    else:
        members = team_members_names(request=request, team=team)
        return TemplateResponse(request, 'teams/confirm-join-team.html', {
            'join_key': join_key,
            'members': members,
            'name': team.name
        })
예제 #7
0
    def test_permissions(self):
        contest = Contest.objects.get()
        tconf = TeamsConfig(contest=contest,
                            modify_begin_date=datetime(2012,
                                                       1,
                                                       1,
                                                       8,
                                                       tzinfo=utc),
                            modify_end_date=datetime(2012,
                                                     1,
                                                     1,
                                                     12,
                                                     tzinfo=utc),
                            enabled=True)
        tconf.save()

        user = User.objects.get(username='******')

        factory = RequestFactory()
        request = factory.request()
        request.contest = contest
        request.user = user

        timestamp = datetime(2012, 1, 1, 10, tzinfo=utc)
        with fake_time(timestamp):
            request.timestamp = timestamp
            self.assertEqual(contest.controller.can_modify_team(request), True)
            self.assertEqual(can_join_team(request), True)
            self.assertEqual(can_quit_team(request), False)
            self.assertEqual(can_delete_team(request), False)
            self.assertEqual(can_create_team(request), True)
            team = create_team('test_team', 'Super Team!', contest)
            tm = TeamMembership(team=team, user=user)
            tm.save()
            self.assertEqual(can_join_team(request), False)
            self.assertEqual(can_quit_team(request), False)
            self.assertEqual(can_delete_team(request), True)
            self.assertEqual(can_create_team(request), False)
            user2 = User.objects.get(username='******')
            tm = TeamMembership(team=team, user=user2)
            tm.save()
            self.assertEqual(can_join_team(request), False)
            self.assertEqual(can_quit_team(request), True)
            self.assertEqual(can_delete_team(request), False)
            self.assertEqual(can_create_team(request), False)

            self.client.login(username='******')
            problem_instance = ProblemInstance.objects.get()
            self.submit_file(contest, problem_instance, user=team.user)
            self.assertEqual(can_quit_team(request), False)
예제 #8
0
    def test_views(self):
        contest = Contest.objects.get()
        tconf = TeamsConfig(contest=contest,
                            modify_begin_date=datetime(2012,
                                                       1,
                                                       1,
                                                       8,
                                                       tzinfo=utc),
                            modify_end_date=datetime(2012,
                                                     1,
                                                     1,
                                                     12,
                                                     tzinfo=utc),
                            enabled=True)
        tconf.save()

        timestamp = datetime(2012, 1, 1, 10, tzinfo=utc)
        with fake_time(timestamp):
            self.client.login(username='******')
            response = self.client.get(reverse(
                'default_contest_view', kwargs={'contest_id': contest.id}),
                                       follow=True)
            self.assertIn('Team', response.content)

            response = self.client.get(reverse(
                'team_view', kwargs={'contest_id': contest.id}),
                                       follow=True)
            self.assertIn('Create a team', response.content)

            user = User.objects.get(username='******')
            team = create_team('test_team', 'Super Team!', contest)
            tm = TeamMembership(team=team, user=user)
            tm.save()

            response = self.client.get(reverse(
                'team_view', kwargs={'contest_id': contest.id}),
                                       follow=True)
            self.assertIn('Super Team!', response.content)
            self.assertIn('delete the team', response.content)

            user2 = User.objects.get(username='******')
            tm = TeamMembership(team=team, user=user2)
            tm.save()

            response = self.client.get(reverse(
                'team_view', kwargs={'contest_id': contest.id}),
                                       follow=True)
            self.assertIn('Super Team!', response.content)
            self.assertIn('Leave the team', response.content)
예제 #9
0
    def test_submit_file_with_team_deleted(self):
        contest = Contest.objects.get()
        user = User.objects.get(username='******')
        problem_instance = ProblemInstance.objects.get()

        team = create_team('test_team', 'Super Team!', contest)
        tm = TeamMembership(team=team, user=user)
        tm.save()

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

        file = ContentFile('a' * 1024, name='submission.cpp')
        post_data = {
            'problem_instance_id': problem_instance.id,
            'file': file,
            'kind': 'NORMAL',
            'user': team.user, }

        tm.delete()
        self.client.post(url, post_data)
        self.assertEqual(Submission.objects.get().user, user)
예제 #10
0
    def test_permissions(self):
        contest = Contest.objects.get()
        tconf = TeamsConfig(contest=contest,
            modify_begin_date=datetime(2012, 1, 1, 8, tzinfo=utc),
            modify_end_date=datetime(2012, 1, 1, 12, tzinfo=utc),
            enabled=True)
        tconf.save()

        user = User.objects.get(username='******')

        factory = RequestFactory()
        request = factory.request()
        request.contest = contest
        request.user = user

        timestamp = datetime(2012, 1, 1, 10, tzinfo=utc)
        with fake_time(timestamp):
            request.timestamp = timestamp
            self.assertEqual(contest.controller.can_modify_team(request), True)
            self.assertEqual(can_join_team(request), True)
            self.assertEqual(can_quit_team(request), False)
            self.assertEqual(can_delete_team(request), False)
            self.assertEqual(can_create_team(request), True)
            team = create_team('test_team', 'Super Team!', contest)
            tm = TeamMembership(team=team, user=user)
            tm.save()
            self.assertEqual(can_join_team(request), False)
            self.assertEqual(can_quit_team(request), False)
            self.assertEqual(can_delete_team(request), True)
            self.assertEqual(can_create_team(request), False)
            user2 = User.objects.get(username='******')
            tm = TeamMembership(team=team, user=user2)
            tm.save()
            self.assertEqual(can_join_team(request), False)
            self.assertEqual(can_quit_team(request), True)
            self.assertEqual(can_delete_team(request), False)
            self.assertEqual(can_create_team(request), False)

            self.client.login(username='******')
            problem_instance = ProblemInstance.objects.get()
            self.submit_file(contest, problem_instance, user=team.user)
            self.assertEqual(can_quit_team(request), False)
예제 #11
0
    def test_submit_file_with_team_deleted(self):
        contest = Contest.objects.get()
        user = User.objects.get(username='******')
        problem_instance = ProblemInstance.objects.get()

        team = create_team('test_team', 'Super Team!', contest)
        tm = TeamMembership(team=team, user=user)
        tm.save()

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

        file = ContentFile('a' * 1024, name='submission.cpp')
        post_data = {
            'problem_instance_id': problem_instance.id,
            'file': file,
            'kind': 'NORMAL',
            'user': team.user, }

        tm.delete()
        self.client.post(url, post_data)
        self.assertEqual(Submission.objects.get().user, user)
예제 #12
0
    def test_views(self):
        contest = Contest.objects.get()
        tconf = TeamsConfig(contest=contest,
            modify_begin_date=datetime(2012, 1, 1, 8, tzinfo=utc),
            modify_end_date=datetime(2012, 1, 1, 12, tzinfo=utc),
            enabled=True)
        tconf.save()

        timestamp = datetime(2012, 1, 1, 10, tzinfo=utc)
        with fake_time(timestamp):
            self.client.login(username='******')
            response = self.client.get(reverse('default_contest_view',
                              kwargs={'contest_id': contest.id}), follow=True)
            self.assertIn('Team', response.content)

            response = self.client.get(reverse('team_view',
                              kwargs={'contest_id': contest.id}), follow=True)
            self.assertIn('Create a team', response.content)

            user = User.objects.get(username='******')
            team = create_team('test_team', 'Super Team!', contest)
            tm = TeamMembership(team=team, user=user)
            tm.save()

            response = self.client.get(reverse('team_view',
                              kwargs={'contest_id': contest.id}), follow=True)
            self.assertIn('Super Team!', response.content)
            self.assertIn('delete the team', response.content)

            user2 = User.objects.get(username='******')
            tm = TeamMembership(team=team, user=user2)
            tm.save()

            response = self.client.get(reverse('team_view',
                              kwargs={'contest_id': contest.id}), follow=True)
            self.assertIn('Super Team!', response.content)
            self.assertIn('Leave the team', response.content)