def test_get_format(self): """Test get format.""" course1 = factory.make_course('Portfolio2016', 'PAV', author=self.rein) course2 = factory.make_course('Portfolio2017', 'PAV', author=self.rein) course3 = factory.make_course('Portfolio2018', 'PAV') template = factory.make_entry_template('template') format = factory.make_format([template]) assignment = factory.make_assignment( 'Colloq', 'description1', format=format, courses=[course1, course2, course3]) login = test.logging_in(self, self.rein_user, self.rein_pass) response = test.api_get_call(self, '/formats/' + str(assignment.pk) + '/', login) self.assertEquals(response.json()['format']['templates'][0]['name'], 'template') # permissions and authorization check for the api call. login = test.logging_in(self, self.no_perm_user, self.no_perm_pass) test.api_get_call(self, '/formats/' + str(assignment.pk) + '/', login, status=403) test.api_get_call(self, '/formats/' + str(self.not_found_pk) + '/', login, status=404) test.test_unauthorized_api_get_call( self, '/formats/' + str(assignment.pk) + '/')
def test_get_instance(self): student = test.logging_in(self, self.studentname, self.studentpass) superuser = test.logging_in(self, self.supername, self.superpass) test.api_get_call(self, '/instance/0/', login=student) test.api_get_call(self, '/instance/0/', login=superuser) self.assertEqual(Instance.objects.all().first().name, 'eJournal')
def test_get_names(self): """Test get names function.""" course = factory.make_course('Portfolio', 'PAV', author=self.rein) template = factory.make_entry_template('template') format = factory.make_format([template]) assignment = factory.make_assignment('Colloq', 'description1', format=format, courses=[course], is_published=True) student_user, student_pass, student = test.set_up_user_and_auth( 'student', 'pass', '*****@*****.**', 'first', 'last') test.set_up_participation(student, course, 'Student') journal = test.set_up_journal(assignment, template, student, 4) login = test.logging_in(self, student_user, student_pass) url = '/names/{}/{}/{}/'.format(course.pk, assignment.pk, journal.pk) result = test.api_get_call(self, url, login).json() self.assertEquals(result['names']['course'], 'Portfolio') self.assertEquals(result['names']['journal'], 'first last') self.assertEquals(result['names']['assignment'], 'Colloq') # permissions and authorization check for the api call. login = test.logging_in(self, self.no_perm_user, self.no_perm_pass) test.api_get_call(self, url, login, status=403)
def test_get_course_users(self): """Test the get course users function.""" teacher_user, teacher_pass, teacher = test.set_up_user_and_auth( 'teacher', 'pass', '*****@*****.**') test.set_up_participation(teacher, self.course, 'Teacher') test.set_up_participation(self.lars, self.course, 'Student') test.set_up_participation(self.rein, self.course, 'TA') login = test.logging_in(self, teacher_user, teacher_pass) response = test.api_get_call(self, '/participations/', login, params={'course_id': self.course.pk}) self.assertEquals(len(response.json()['participants']), 3) response = test.api_get_call(self, '/participations/unenrolled/', login, params={ 'course_id': self.course.pk, 'unenrolled_query': 'test123' }) self.assertEquals(len(response.json()['participants']), 1) self.assertEquals(response.json()['participants'][0]['username'], self.username) # permissions and authorization check for the api call. login = test.logging_in(self, self.no_perm_user, self.no_perm_pass) test.api_get_call(self, '/participations/', login, status=403, params={'course_id': self.course.pk}) test.api_get_call(self, '/participations/', login, status=404, params={'course_id': self.not_found_pk}) test.test_unauthorized_api_get_call( self, '/participations/', params={'course_id': self.not_found_pk}) test.test_unauthorized_api_get_call( self, '/courses/' + str(self.course.pk) + '/') test.test_unauthorized_api_get_call( self, '/participations/unenrolled/', params={'course_id': self.course.pk}) test.set_up_participation(self.no_permission_user, self.course, 'Student') test.api_get_call(self, '/participations/', login, status=403, params={'course_id': self.course.pk})
def test_update_instance(self): student = test.logging_in(self, self.studentname, self.studentpass) superuser = test.logging_in(self, self.supername, self.superpass) test.api_patch_call(self, '/instance/0/', {'name': 'UvA'}, login=student, status=403) test.api_patch_call(self, '/instance/0/', {'name': 'UvA'}, login=superuser) self.assertEqual(Instance.objects.all().first().name, 'UvA')
def test_assignment_journals(self): """Test the get assignment journals function.""" course = factory.make_course('Portfolio', 'PAV', author=self.rein) template = factory.make_entry_template('template') format = factory.make_format([template]) assignment = factory.make_assignment('Colloq', 'description1', format=format, courses=[course]) students = test.set_up_users('student', 2) for student in students: test.set_up_participation(student, course, 'Student') test.set_up_journal(assignment, template, student, 4) login = test.logging_in(self, self.rein_user, self.rein_pass) response = test.api_get_call(self, '/journals/', login, params={ 'course_id': course.pk, 'assignment_id': assignment.pk }) result = response.json() self.assertEquals(len(result['journals']), 2) # permissions and authorization check for the api call. login = test.logging_in(self, self.no_perm_user, self.no_perm_pass) test.api_get_call(self, '/journals/', login, status=403, params={ 'course_id': course.pk, 'assignment_id': assignment.pk }) test.api_get_call(self, '/journals/', login, status=404, params={ 'course_id': course.pk, 'assignment_id': self.not_found_pk }) test.api_get_call(self, '/journals/', login, status=400, params={}) test.test_unauthorized_api_get_call(self, '/journals/', params={ 'course_id': course.pk, 'assignment_id': self.not_found_pk })
def test_update_password(self): """Test update password.""" login = test.logging_in(self, self.username, self.password) test.api_patch_call(self, '/users/password/', { 'new_password': '******', 'old_password': self.password }, login) test.logging_in(self, self.username, 'Pass123!') test.api_patch_call(self, '/users/password/', { 'new_password': '******', 'old_password': '******' }, login)
def test_create_entry(self): """"Test create entry.""" _, _, user2 = test.set_up_user_and_auth('testh', 'test123h', '*****@*****.**') course = factory.make_course('Portfolio', 'PAV', author=user2) template = factory.make_entry_template("some_template") format = factory.make_format([template]) assignment = factory.make_assignment("Assignment", "Your favorite assignment", format=format, courses=[course]) journal = factory.make_journal(assignment, self.user) field = factory.make_field(template, 'Some field', 0) login = test.logging_in(self, self.username, self.password) format.available_templates.add(template) role = factory.make_role_default_no_perms("student", course, can_have_journal=True) factory.make_participation(user=self.user, course=course, role=role) create_entry_dict = { 'journal_id': journal.id, 'template_id': template.id, 'content': [{ 'id': field.pk, 'data': "This is some data" }] } test.api_post_call(self, '/entries/', create_entry_dict, login, 201) self.assertTrue(Entry.objects.filter(node__journal=journal).exists()) self.assertEquals( Content.objects.get(entry=1).data, "This is some data")
def test_update_user_role_course(self): """Test user role update in a course.""" login = test.logging_in(self, self.rein_user, self.rein_pass) course = factory.make_course("Portfolio Academische Vaardigheden", "PAV", author=self.rein) ta_role = Role.objects.get(name='TA', course=course) student_role = factory.make_role_student(name='SD', course=course) self.user_role = factory.make_user("test123", "test", "*****@*****.**") factory.make_participation(self.user_role, course, ta_role) factory.make_participation(self.user, course, student_role) user_role = Participation.objects.get(user=self.user_role, course=course).role.name self.assertEquals(user_role, 'TA') test.api_patch_call(self, '/participations/' + str(course.pk) + '/', { 'user_id': self.user_role.pk, 'role': 'SD' }, login) user_role = Participation.objects.get(user=self.user_role, course=course.pk).role.name self.assertEquals(user_role, 'SD')
def test_update_format(self): """Test update format function.""" course = factory.make_course('Portfolio', 'PAV', author=self.rein) template = factory.make_entry_template('template') format = factory.make_format([template]) assignment = factory.make_assignment('Colloq', 'description1', format=format, courses=[course]) login = test.logging_in(self, self.rein_user, self.rein_pass) update_dict = { 'assignment_details': { 'name': 'Colloq', 'description': 'description1', 'is_published': True }, 'templates': [ serialize.TemplateSerializer(template).data for template in format.available_templates.all() ], 'removed_presets': [], 'removed_templates': [], 'presets': [], 'unused_templates': [] } test.api_patch_call(self, '/formats/' + str(assignment.pk) + '/', update_dict, login)
def test_get_comments(self): """Test update comment function.""" course = factory.make_course('Portfolio', 'PAV', author=self.rein) template = factory.make_entry_template('template') format = factory.make_format([template]) assignment = factory.make_assignment('Colloq', 'description1', format=format, courses=[course]) student_user, student_pass, student = test.set_up_user_and_auth( 'student', 'pass', '*****@*****.**') test.set_up_participation(student, course, 'Student') journal = factory.make_journal(assignment, student) entry = factory.make_entry(template) factory.make_node(journal, entry) comment = factory.make_comment(entry, self.rein, 'Excellent!', True) login = test.logging_in(self, self.rein_user, self.rein_pass) update_dict = {'text': 'Bad!'} test.api_patch_call(self, '/comments/' + str(comment.pk) + '/', update_dict, login) q_comment = Comment.objects.get(pk=comment.pk) self.assertEquals(q_comment.text, 'Bad!')
def test_update_course_roles(self): """Test update course roles""" teacher_user, teacher_pass, teacher = test.set_up_user_and_auth( 'Teacher', 'pass', '*****@*****.**') teacher_role = factory.make_role_teacher("TE", self.course) factory.make_role_ta('TA2', self.course) factory.make_participation(teacher, self.course, teacher_role) login = test.logging_in(self, teacher_user, teacher_pass) result = test.api_get_call(self, '/roles/', login, params={'course_id': self.course.pk}) roles = result.json()['roles'] for role in roles: if role['name'] == 'TA2': role['can_grade'] = 1 roles.append( serialize.RoleSerializer( factory.make_role_default_no_perms('test_role', self.course)).data) test.api_patch_call(self, '/roles/{}/'.format(self.course.pk), {'roles': roles}, login) role_test = Role.objects.get(name='TA2', course=self.course) self.assertTrue(role_test.can_grade) self.assertEquals( Role.objects.filter(name='test_role', course=self.course).count(), 1)
def test_create_new_assignment(self): """test create new assignment.""" lti_id = '12AB' course = factory.make_course("BeeldBewerken", "BB", enddate=timezone.now()) role = factory.make_role_default_no_perms("teacher", course, can_add_assignment=True) factory.make_participation(user=self.user, course=course, role=role) login = test.logging_in(self, self.username, self.password) create_assign_dict = { 'name': 'SIFT', 'description': 'In this assign...', 'course_id': course.pk, 'lti_id': lti_id } test.api_post_call(self, '/assignments/', params=create_assign_dict, login=login, status=201) self.assertEquals( Lti_ids.objects.get(lti_id=lti_id).assignment.name, 'SIFT')
def test_create_user(self): user = { 'username': '******', 'password': '******', 'first_name': 'Student', 'last_name': 'Testing', } # No email test.api_post_call(self, '/users/', params=user, status=400) user['email'] = '*****@*****.**' test.api_post_call(self, '/users/', params=user, status=201) # Not allowed by instance self.user.is_superuser = True self.user.save() login = test.logging_in(self, self.username, self.password) test.api_patch_call(self, '/instance/1/', params={'allow_standalone_registration': False}, login=login, status=200) user['username'] = '******' user['email'] = '*****@*****.**' test.api_post_call(self, '/users/', params=user, status=400)
def test_get_linkable_courses(self): """Test the get linkable courses function.""" self.user.is_teacher = True self.user.save() test.set_up_courses('course', 3, author=self.user) test.set_up_courses('course', 4, author=self.user, lti_id=True) login = test.logging_in(self, self.username, self.password) response = test.api_get_call(self, '/courses/linkable/', login) self.assertEquals(len(response.json()['courses']), 7) # permissions and authorization check for the api call. login = test.logging_in(self, self.no_perm_user, self.no_perm_pass) test.api_get_call(self, '/courses/linkable/', login, status=403) test.test_unauthorized_api_get_call(self, '/courses/linkable/')
def test_get_nodes(self): """Test the get nodes function.""" course = factory.make_course('Portfolio', 'PAV', author=self.rein) template = factory.make_entry_template('template') format = factory.make_format([template]) assignment = factory.make_assignment('Colloq', 'description1', format=format, courses=[course]) student_user, student_pass, student = test.set_up_user_and_auth( 'student', 'pass', '*****@*****.**') test.set_up_participation(student, course, 'Student') journal = test.set_up_journal(assignment, template, student, 4) login = test.logging_in(self, student_user, student_pass) response = test.api_get_call(self, '/nodes/', login, params={'journal_id': journal.pk}) result = response.json() self.assertEquals(len(result['nodes']), 5) login = test.logging_in(self, self.rein_user, self.rein_pass) response = test.api_get_call(self, '/nodes/', login, params={'journal_id': journal.pk}) result = response.json() self.assertEquals(len(result['nodes']), 4) # permissions and authorization check for the api call. login = test.logging_in(self, self.no_perm_user, self.no_perm_pass) test.api_get_call(self, '/nodes/', login, status=403, params={'journal_id': journal.pk}) test.api_get_call(self, '/nodes/', login, status=404, params={'journal_id': self.not_found_pk}) test.test_unauthorized_api_get_call(self, '/nodes/', params={'journal_id': journal.pk})
def test_forgot_password(self): login = test.logging_in(self, self.username, self.password) test.api_post_call(self, '/forgot_password/', login=login, params={ 'email': '', 'username': self.username })
def test_get_assignment_data(self): """Test the get assignment data function.""" course = factory.make_course('Portfolio', 'PAV', author=self.rein) template = factory.make_entry_template('template') format1 = factory.make_format([template]) format2 = factory.make_format([template]) assignment1 = factory.make_assignment('Colloq', 'description1', format=format1, courses=[course], is_published=True) assignment2 = factory.make_assignment('Portfolio', 'description2', format=format2, courses=[course], is_published=True) test.set_up_participation(self.user, course, 'Student') login_user = test.logging_in(self, self.username, self.password) resp = test.api_get_call(self, '/assignments/' + str(assignment1.pk) + '/', login_user) self.assertEquals(resp.json()['assignment']['name'], 'Colloq') self.assertIn('journal', resp.json()['assignment']) login_rein = test.logging_in(self, self.rein_user, self.rein_pass) resp = test.api_get_call(self, '/assignments/' + str(assignment2.pk) + '/', login_rein) self.assertEquals(resp.json()['assignment']['name'], 'Portfolio') # permissions and authorization check for the api call. login = test.logging_in(self, self.no_perm_user, self.no_perm_pass) test.api_get_call(self, '/assignments/{}/'.format(assignment1.pk), login, status=403) test.api_get_call(self, '/assignments/{}/'.format(assignment2.pk), login, status=403) test.test_unauthorized_api_get_call( self, '/assignments/{}/'.format(assignment1.pk))
def test_get_comments(self): """Test get comments function.""" course = factory.make_course('Portfolio', 'PAV', author=self.rein) template = factory.make_entry_template('template') format = factory.make_format([template]) assignment = factory.make_assignment('Colloq', 'description1', format=format, courses=[course]) student_user, student_pass, student = test.set_up_user_and_auth( 'student', 'pass', '*****@*****.**') test.set_up_participation(student, course, 'Student') journal = factory.make_journal(assignment, student) entry = factory.make_entry(template) factory.make_node(journal, entry) factory.make_comment(entry, self.rein, 'Excellent!', True) login = test.logging_in(self, student_user, student_pass) result = test.api_get_call(self, '/comments/', login, params={ 'entry_id': entry.pk }).json() self.assertEquals(result['comments'][0]['text'], 'Excellent!') # permissions and authorization check for the api call. login = test.logging_in(self, self.no_perm_user, self.no_perm_pass) test.api_get_call(self, '/comments/', login, status=403, params={'entry_id': entry.pk}) test.api_get_call(self, '/comments/', login, status=404, params={'entry_id': self.not_found_pk}) test.test_unauthorized_api_get_call(self, '/comments/', params={'entry_id': entry.pk})
def test_get_user_teacher_courses(self): """Test get user teacher course function.""" factory.make_course('Portfolio2016', 'PAV', author=self.rein) factory.make_course('Portfolio2017', 'PAV', author=self.rein) factory.make_course('Portfolio2018', 'PAV') login = test.logging_in(self, self.rein_user, self.rein_pass) response = test.api_get_call(self, '/courses/', login) self.assertEquals(len(response.json()['courses']), 2) # permissions and authorization check for the api call. test.test_unauthorized_api_get_call(self, '/courses/')
def test_get_lti_params_from_jwt_invalid(self): """Hopefully returns an error.""" login = test.logging_in(self, self.username, self.password) self.request["user_id"] = "awefd" jwt_params = jwt.encode(self.request, 'fa12f4', algorithm='HS256').decode('utf-8') response = test.api_get_call( self, '/get_lti_params_from_jwt/{0}/'.format(jwt_params), login=login, status=401) self.assertIn('Invalid', response.content.decode('utf-8'))
def test_get_course_assignments(self): """Test the get course assignment function.""" course = factory.make_course('Portfolio', 'PAV', author=self.rein, enddate=timezone.now()) assigns = test.set_up_assignments('assign', 'desc', 2, course=course) test.set_up_participation(self.user, course, 'Student') factory.make_journal(assigns[0], self.user) factory.make_journal(assigns[1], self.user) login_user = test.logging_in(self, self.username, self.password) response = test.api_get_call(self, '/assignments/', login_user, params={'course_id': course.pk}) self.assertEquals(len(response.json()['assignments']), 2) self.assertIn('journal', response.json()['assignments'][0]) login_rein = test.logging_in(self, self.rein_user, self.rein_pass) response = test.api_get_call(self, '/assignments/', login_rein, params={'course_id': course.pk}) self.assertEquals(len(response.json()['assignments']), 2) # permissions and authorization check for the api call. login = test.logging_in(self, self.no_perm_user, self.no_perm_pass) test.api_get_call(self, '/assignments/', login, status=403, params={'course_id': course.pk}) test.api_get_call(self, '/assignments/', login, status=404, params={'course_id': self.not_found_pk}) test.test_unauthorized_api_get_call( self, '/assignments/' + str(course.pk) + '/')
def test_get_course_roles(self): """Test the get delete assignment function.""" teacher_user = '******' teacher_pass = '******' teacher = factory.make_user(teacher_user, teacher_pass, "*****@*****.**") factory.make_role_student("SD", self.course) factory.make_role_default_no_perms("HE", self.course) teacher_role = factory.make_role_teacher("TE", self.course) factory.make_participation(teacher, self.course, teacher_role) login = test.logging_in(self, teacher_user, teacher_pass) result = test.api_get_call(self, '/roles/', login, params={'course_id': self.course.pk}) self.assertEquals(len(result.json()['roles']), 6) # permissions and authorization check for the api call. login = test.logging_in(self, self.no_perm_user, self.no_perm_pass) test.test_unauthorized_api_get_call(self, '/roles/', params={'course_id': 1}) test.api_get_call(self, '/roles/', login, params={'course_id': self.course.pk}, status=403) test.api_get_call(self, '/roles/', login, params={'course_id': self.not_found_pk}, status=404) test.set_up_participation(self.no_permission_user, self.course, 'Student') test.api_get_call(self, '/roles/', login, params={'course_id': self.course.pk}, status=403)
def test_get_user_courses(self): """Test the get user courses function.""" for course in test.set_up_courses('course', 4): student_role = Role.objects.get(name='Student', course=course) factory.make_participation(self.user, course, student_role) login = test.logging_in(self, self.username, self.password) response = test.api_get_call(self, '/courses/', login) self.assertEquals(len(response.json()['courses']), 4) # permissions and authorization check for the api call. test.test_unauthorized_api_get_call(self, '/courses/')
def test_get_lti_params_from_jwt_key_Error(self): """Hopefully returns the lti course data.""" login = test.logging_in(self, self.username, self.password) self.request["user_id"] = "awefd" del self.request['custom_course_id'] jwt_params = jwt.encode(self.request, settings.SECRET_KEY, algorithm='HS256').decode('utf-8') response = test.api_get_call( self, '/get_lti_params_from_jwt/{0}/'.format(jwt_params), login=login, status=400) self.assertIn('KeyError', response.content.decode('utf-8'))
def test_get_lti_params_from_jwt_course_student(self): """Hopefully returns the lti course and assignment data.""" login = test.logging_in(self, self.username, self.password) self.request["user_id"] = "awefd" self.request["roles"] = settings.ROLES["Student"] jwt_params = jwt.encode(self.request, settings.SECRET_KEY, algorithm='HS256').decode('utf-8') response = test.api_get_call( self, '/get_lti_params_from_jwt/{0}/'.format(jwt_params), login=login, status=404) self.assertIn('course', response.content.decode('utf-8'))
def test_get_lti_params_from_jwt_expired(self): """Hopefully returns the lti course and assignment data.""" login = test.logging_in(self, self.username, self.password) self.request["user_id"] = "awefd" self.request['exp'] = datetime.datetime.utcnow() - datetime.timedelta( minutes=30) jwt_params = jwt.encode(self.request, settings.SECRET_KEY, algorithm='HS256').decode('utf-8') response = test.api_get_call( self, '/get_lti_params_from_jwt/{0}/'.format(jwt_params), login=login, status=403) self.assertIn('expired', response.content.decode('utf-8'))
def test_get_course_data(self): """Test get coursedata function.""" test.set_up_participation(self.user, self.course, 'Teacher') login = test.logging_in(self, self.username, self.password) response = test.api_get_call(self, '/courses/' + str(self.course.pk) + '/', login) self.assertEquals(response.json()['course']['name'], 'Beeldbewerken') self.assertEquals(response.json()['course']['abbreviation'], 'BB') # permissions and authorization check for the api call. login = test.logging_in(self, self.no_perm_user, self.no_perm_pass) test.api_get_call(self, '/courses/' + str(self.course.pk) + '/', login, status=403) test.api_get_call(self, '/courses/' + str(self.not_found_pk) + '/', login, status=404) test.test_unauthorized_api_get_call( self, '/courses/' + str(self.course.pk) + '/')
def test_get_lti_params_from_jwt_no_context_label(self): """Hopefully returns the lti course data.""" login = test.logging_in(self, self.username, self.password) self.request["user_id"] = "awefd" del self.request['context_label'] jwt_params = jwt.encode(self.request, settings.SECRET_KEY, algorithm='HS256').decode('utf-8') response = test.api_get_call( self, '/get_lti_params_from_jwt/{0}/'.format(jwt_params), login=login, status=200) self.assertIn( '"state": "{0}"'.format(lti_view.LTI_STATES.NEW_COURSE.value), response.content.decode('utf-8'))
def test_get_lti_params_from_jwt_assignment_teacher(self): """Hopefully returns the lti assignment data.""" factory.make_course('TestCourse', 'aaaa', lti_id='asdf') login = test.logging_in(self, self.username, self.password) self.request["user_id"] = "awefd" jwt_params = jwt.encode(self.request, settings.SECRET_KEY, algorithm='HS256').decode('utf-8') response = test.api_get_call( self, '/get_lti_params_from_jwt/{0}/'.format(jwt_params), login=login, status=200) self.assertIn( '"state": "{0}"'.format(lti_view.LTI_STATES.NEW_ASSIGN.value), response.content.decode('utf-8'))