def test_course_page(self): """ Check out a course front-page """ _, c = create_offering() client = Client() # not logged in: should be redirected to login page response = client.get(c.get_absolute_url()) self.assertEqual(response.status_code, 302) # log in as student "0aaa0" client.login_user("0aaa0") p = Person.objects.get(userid="0aaa0") # not in the course: should get 403 Forbidden response = client.get(c.get_absolute_url()) self.assertEqual(response.status_code, 403) # add to course and try again m = Member(person=p, offering=c, role="STUD", credits=3, career="UGRD", added_reason="UNK") m.save() response = client.get(c.get_absolute_url()) self.assertEqual(response.status_code, 200) validate_content(self, response.content, c.get_absolute_url()) # dropped students should be forbidden m.role="DROP" m.save() response = client.get(c.get_absolute_url()) self.assertEqual(response.status_code, 403)
def test_staff_page(self): """ Check the requires_course_staff_by_slug decorator. """ # a URL and some members/non-members url = reverse('grades.views.class_list', kwargs={'course_slug': TEST_COURSE_SLUG}) instr = "ggbaker" ta = Member.objects.filter(offering__slug=TEST_COURSE_SLUG, role='TA')[0].person.userid student = "0aaa0" nobody = "0bbb6" client = Client() # try without logging in response = client.get(url) self.assertEquals(response.status_code, 302) # try as instructor client.login_user(instr) response = client.get(url) self.assertEquals(response.status_code, 200) validate_content(self, response.content, url) # try as TA client.login_user(ta) response = client.get(url) self.assertEquals(response.status_code, 200) # try as student client.login_user(student) response = client.get(url) self.assertEquals(response.status_code, 403) # try as non-member client.login_user(nobody) response = client.get(url) self.assertEquals(response.status_code, 403)
def test_roles(self): # create person an give sysadmin role p1 = Person(emplid=210012345, userid="test1", last_name="Lname", first_name="Fname", pref_first_name="Fn", middle_name="M") p1.save() unit = Unit.objects.get(label="UNIV") r = Role(person=p1, role="SYSA", unit=unit, expiry=TEST_ROLE_EXPIRY) r.save() self.assertEqual(str(r), "Lname, Fname (System Administrator, UNIV)") # check the front end client = Client() client.login_user("test1") url = reverse('sysadmin:role_list') response = basic_page_tests(self, client, url) self.assertContains( response, 'Lname, Fname</a></td>\n <td>System Administrator</td>') # add a new role with the front end oldcount = Role.objects.filter(role='FAC').count() url = reverse('sysadmin:new_role') response = basic_page_tests(self, client, url) response = client.post(url, { 'person': '33333333', 'role': 'FAC', 'unit': 2 }) self.assertEqual(response.status_code, 200) validate_content(self, response.content, url) self.assertTrue( b"could not import DB2 module" in response.content or b"could not connect to reporting database" in response.content or b"Could not find this emplid." in response.content or b"Reporting database access has been disabled" in response.content or b"Could not communicate with reporting database" in response.content) response = client.post( url, { 'person': p1.emplid, 'role': 'FAC', 'unit': unit.id, 'expiry': str(TEST_ROLE_EXPIRY) }) self.assertEqual(response.status_code, 302) # make sure the role is now there self.assertEqual(Role.objects.filter(role='FAC').count(), oldcount + 1)
def test_staff_page(self): """ Check the requires_course_staff_by_slug decorator. """ # force the test course's semester to be "current" so the TA still has access semester = CourseOffering.objects.get(slug=TEST_COURSE_SLUG).semester today = datetime.date.today() semester.start = today semester.end = today + datetime.timedelta(days=90) semester.save() # a URL and some members/non-members url = reverse('offering:class_list', kwargs={'course_slug': TEST_COURSE_SLUG}) instr = "ggbaker" ta = Member.objects.filter(offering__slug=TEST_COURSE_SLUG, role='TA')[0].person.userid student = "0aaa0" nobody = "0bbb6" client = Client() # try without logging in response = client.get(url) self.assertEqual(response.status_code, 302) # try as instructor client.login_user(instr) response = client.get(url) self.assertEqual(response.status_code, 200) validate_content(self, response.content, url) # try as TA. client.login_user(ta) response = client.get(url) self.assertEqual(response.status_code, 200) # try as student client.login_user(student) response = client.get(url) self.assertEqual(response.status_code, 403) # try as non-member client.login_user(nobody) response = client.get(url) self.assertEqual(response.status_code, 403) # try again as TA, but cheat by changing the semester for the course first. We also have to change something # else, in this case, the section, in order to avoid violating unique constraints when saving it. c = CourseOffering.objects.get(slug=TEST_COURSE_SLUG) c.semester = Semester.current() c.section = 'q100' c.save() client.login_user(ta) response = client.get(url) self.assertEqual(response.status_code, 200)
def test_front_page(self): # log in as student in the course userid = Member.objects.filter(offering__slug=TEST_COURSE_SLUG, role="STUD")[0].person.userid client = Client() client.login_user(userid) response = client.get("/") self.assertEqual(response.status_code, 200) # this student is in this course: check for a link to its page (but it only appears after start of semester) c = CourseOffering.objects.get(slug=TEST_COURSE_SLUG) if c.semester.start < datetime.date.today(): self.assertContains(response, '<a href="%s"' % (c.get_absolute_url()) ) validate_content(self, response.content, "index page")
def test_staff_page(self): """ Check the requires_course_staff_by_slug decorator. """ # a URL and some members/non-members url = reverse('offering:class_list', kwargs={'course_slug': TEST_COURSE_SLUG}) instr = "ggbaker" ta = Member.objects.filter(offering__slug=TEST_COURSE_SLUG, role='TA')[0].person.userid student = "0aaa0" nobody = "0bbb6" client = Client() # try without logging in response = client.get(url) self.assertEqual(response.status_code, 302) # try as instructor client.login_user(instr) response = client.get(url) self.assertEqual(response.status_code, 200) validate_content(self, response.content, url) # try as TA. client.login_user(ta) response = client.get(url) self.assertEqual(response.status_code, 200) # try as student client.login_user(student) response = client.get(url) self.assertEqual(response.status_code, 403) # try as non-member client.login_user(nobody) response = client.get(url) self.assertEqual(response.status_code, 403) # try again as TA, but cheat by changing the semester for the course first. We also have to change something # else, in this case, the section, in order to avoid violating unique constraints when saving it. c = CourseOffering.objects.get(slug=TEST_COURSE_SLUG) c.semester = Semester.current() c.section = 'q100' c.save() client.login_user(ta) response = client.get(url) self.assertEqual(response.status_code, 200)
def test_roles(self): # create person an give sysadmin role p1 = Person(emplid=210012345, userid="test1", last_name="Lname", first_name="Fname", pref_first_name="Fn", middle_name="M") p1.save() unit = Unit.objects.get(label="UNIV") r = Role(person=p1, role="SYSA", unit=unit) r.save() self.assertEqual( str(r), "Lname, Fname (System Administrator, UNIV)") # check the front end client = Client() client.login_user("test1") url = reverse('coredata.views.role_list') response = basic_page_tests(self, client, url) self.assertContains(response, 'Lname, Fname</a></td><td>System Administrator</td>') # add a new role with the front end oldcount = Role.objects.filter(role='FAC').count() url = reverse('coredata.views.new_role') response = basic_page_tests(self, client, url) response = client.post(url, {'person':'33333333', 'role':'FAC', 'unit': 2}) self.assertEquals(response.status_code, 200) validate_content(self, response.content, url) self.assertTrue("could not import DB2 module" in response.content or "could not connect to reporting database" in response.content or "Could not find this emplid." in response.content or "Reporting database access has been disabled" in response.content or "Could not communicate with reporting database" in response.content) response = client.post(url, {'person':p1.emplid, 'role':'FAC', 'unit':unit.id}) self.assertEquals(response.status_code, 302) # make sure the role is now there self.assertEquals( Role.objects.filter(role='FAC').count(), oldcount+1)