Source code for oioioi.teachers.tests

from django.contrib.auth.models import User
from django.urls import reverse

from oioioi.base.tests import TestCase
from oioioi.contests.models import Contest
from oioioi.contests.tests import make_empty_contest_formset
from oioioi.contests.tests.utils import make_user_contest_admin


[docs]def change_contest_type(contest): contest.controller_name = 'oioioi.teachers.controllers.TeacherContestController' contest.save()
[docs]class TestProblemsetPermissions(TestCase):
[docs] fixtures = ['test_users', 'teachers']
[docs] def test_problemset_permissions(self): self.assertTrue( self.client.login(username='test_user') ) # test_user is a teacher url_main = reverse('problemset_main') response = self.client.get(url_main) self.assertEqual(response.status_code, 200) self.assertContains(response, 'Add problem') url_add = reverse('problemset_add_or_update') response = self.client.get(url_add, follow=True) self.assertEqual(response.status_code, 200) self.assertTrue(self.client.login(username='test_user2')) # test_user2 is not response = self.client.get(url_main) self.assertEqual(response.status_code, 200) self.assertNotContains(response, 'Add problem') url_add = reverse('problemset_add_or_update') response = self.client.get(url_add, follow=True) self.assertEqual(response.status_code, 403)
[docs]class TestTeacherAddContest(TestCase):
[docs] fixtures = ['test_users', 'teachers']
[docs] def test_teacher_add_contest(self): controller_name = 'oioioi.teachers.controllers.TeacherContestController' self.assertTrue(self.client.login(username='test_user')) url = reverse('oioioiadmin:contests_contest_add') response = self.client.get(url) self.assertEqual(response.status_code, 200) post_data = make_empty_contest_formset() post_data.update( { 'name': 'Teacher\'s contest', 'id': 'tc', 'start_date_0': '2012-02-03', 'start_date_1': '04:05:06', 'end_date_0': '2012-02-04', 'end_date_1': '05:06:07', 'results_date_0': '2012-02-05', 'results_date_1': '06:07:08', 'controller_name': controller_name, 'problemstatementconfig-0-visible': 'AUTO', 'teamsconfig-0-max_team_size': 3, 'teamsconfig-0-teams_list_visible': 'NO', } ) response = self.client.post(url, post_data, follow=True) self.assertEqual(response.status_code, 200) self.assertContains(response, 'allow a pupil to access this contest') contest = Contest.objects.get() self.assertEqual(controller_name, contest.controller_name)
[docs]class TestSimpleUITeacherContestDashboard(TestCase):
[docs] fixtures = ['test_users', 'test_contest']
[docs] def test_contest_dashboard(self): user = User.objects.get(username='test_user') contest = Contest.objects.get(id='c') make_user_contest_admin(user, contest) self.assertTrue(self.client.login(username='test_user')) change_contest_type(contest) self.client.get('/c/c/') url = reverse('teacher_contest_dashboard') response = self.client.get(url) self.assertContains(response, "Pupils") self.assertContains(response, "Teachers") self.assertContains(response, "Test contest")
[docs] def test_contest_dashboard_redirect(self): user = User.objects.get(username='test_user') contest = Contest.objects.get(id='c') make_user_contest_admin(user, contest) self.assertTrue(self.client.login(username='test_user')) response = self.client.get('/c/c/', follow=True) self.assertNotContains(response, "Pupils") self.assertNotContains(response, "Teachers") change_contest_type(contest) response = self.client.get('/c/c/', follow=True) self.assertContains(response, "Pupils") self.assertContains(response, "Teachers") self.assertContains(response, "Test contest")
[docs]class TestSimpleUITeacherDashboard(TestCase):
[docs] fixtures = ['test_users', 'teachers', 'test_contest']
[docs] def test_teacher_dashboard(self): self.assertTrue(self.client.login(username='test_user')) url = reverse('teacher_dashboard') response = self.client.get(url) self.assertContains(response, 'Teacher dashboard</h1>') self.assertContains(response, 'Create contest')
[docs] def test_teacher_dashboard_permissions(self): self.assertTrue(self.client.login(username='test_user')) url = reverse('teacher_dashboard') response = self.client.get(url) self.assertEqual(response.status_code, 200) self.assertTrue(self.client.login(username='test_user3')) url = reverse('teacher_dashboard') response = self.client.get(url) self.assertEqual(response.status_code, 403) self.assertTrue(self.client.login(username='test_admin')) url = reverse('teacher_dashboard') response = self.client.get(url) self.assertEqual(response.status_code, 200)