class ComparionExampleAPITests(ComPAIRAPITestCase): def setUp(self): super(ComparionExampleAPITests, self).setUp() self.fixtures = TestFixture().add_course(num_students=30, num_groups=2, with_draft_student=True) self.fixtures.add_comparison_example(self.fixtures.assignment, self.fixtures.instructor) self.fixtures.add_comparison_example(self.fixtures.assignment, self.fixtures.ta) self.base_url = self._build_url(self.fixtures.course.uuid, self.fixtures.assignment.uuid) def _build_url(self, course_uuid, assignment_uuid, tail=""): url = '/api/courses/' + course_uuid + '/assignments/' + assignment_uuid + '/comparisons/examples' + tail return url def test_get_all_comparison_examples(self): # Test login required rv = self.client.get(self.base_url) self.assert401(rv) # test unauthorized users with self.login(self.fixtures.unauthorized_instructor.username): rv = self.client.get(self.base_url) self.assert403(rv) for student in [self.fixtures.unauthorized_student, self.fixtures.students[0]]: for user_context in [ \ self.login(student.username), \ self.impersonate(DefaultFixture.ROOT_USER, student)]: with user_context: rv = self.client.get(self.base_url) self.assert403(rv) # instructor with self.login(self.fixtures.instructor.username): # test non-existent entry rv = self.client.get(self._build_url(self.fixtures.course.uuid, "4903409")) self.assert404(rv) rv = self.client.get(self._build_url("4903409", self.fixtures.assignment.uuid)) self.assert404(rv) rv = self.client.get(self.base_url) self.assert200(rv) results = rv.json['objects'] self.assertEqual(len(results), 2) comparison_examples = self.fixtures.assignment.comparison_examples for index, comparison_example in enumerate(comparison_examples): self.assertEqual(results[index]['id'], comparison_example.uuid) self.assertEqual(results[index]['answer1_id'], comparison_example.answer1_uuid) self.assertEqual(results[index]['answer2_id'], comparison_example.answer2_uuid) # ta with self.login(self.fixtures.ta.username): rv = self.client.get(self.base_url) self.assert200(rv) results = rv.json['objects'] self.assertEqual(len(results), 2) comparison_examples = self.fixtures.assignment.comparison_examples for index, comparison_example in enumerate(comparison_examples): self.assertEqual(results[index]['id'], comparison_example.uuid) self.assertEqual(results[index]['answer1_id'], comparison_example.answer1_uuid) self.assertEqual(results[index]['answer2_id'], comparison_example.answer2_uuid) def test_create_comparison_example(self): self.fixtures.add_answer(self.fixtures.assignment, self.fixtures.instructor) self.fixtures.add_answer(self.fixtures.assignment, self.fixtures.ta) expected_comparison_example = { 'answer1_id': self.fixtures.answers[-2].uuid, 'answer2_id': self.fixtures.answers[-1].uuid } # test login required rv = self.client.post( self.base_url, data=json.dumps(expected_comparison_example), content_type='application/json') self.assert401(rv) # test unauthorized users student = self.fixtures.unauthorized_student for user_context in [ \ self.login(student.username), \ self.impersonate(DefaultFixture.ROOT_USER, student)]: with user_context: rv = self.client.post( self.base_url, data=json.dumps(expected_comparison_example), content_type='application/json') self.assert403(rv) with self.login(self.fixtures.unauthorized_instructor.username): rv = self.client.post( self.base_url, data=json.dumps(expected_comparison_example), content_type='application/json') self.assert403(rv) student = self.fixtures.students[0] for user_context in [ \ self.login(student.username), \ self.impersonate(self.fixtures.instructor, student)]: with user_context: rv = self.client.post( self.base_url, data=json.dumps(expected_comparison_example), content_type='application/json') self.assert403(rv) # instructor with self.login(self.fixtures.instructor.username): # test non-existent entry rv = self.client.post( self._build_url(self.fixtures.course.uuid, "4903409"), data=json.dumps(expected_comparison_example), content_type='application/json') self.assert404(rv) rv = self.client.post( self._build_url("4903409", self.fixtures.assignment.uuid), data=json.dumps(expected_comparison_example), content_type='application/json') self.assert404(rv) # test invalid format - answer1_id invalid_comparison_example = expected_comparison_example.copy() invalid_comparison_example['answer1_id'] = None rv = self.client.post( self.base_url, data=json.dumps(invalid_comparison_example), content_type='application/json') self.assert400(rv) # test invalid format - answer1_id not exists invalid_comparison_example = expected_comparison_example.copy() invalid_comparison_example['answer1_id'] = "999" rv = self.client.post( self.base_url, data=json.dumps(invalid_comparison_example), content_type='application/json') self.assert404(rv) # test invalid format - answer2_id invalid_comparison_example = expected_comparison_example.copy() invalid_comparison_example['answer2_id'] = None rv = self.client.post( self.base_url, data=json.dumps(invalid_comparison_example), content_type='application/json') self.assert400(rv) # test invalid format - answer2_id not exists invalid_comparison_example = expected_comparison_example.copy() invalid_comparison_example['answer2_id'] = "999" rv = self.client.post( self.base_url, data=json.dumps(invalid_comparison_example), content_type='application/json') self.assert404(rv) # test create successful rv = self.client.post( self.base_url, data=json.dumps(expected_comparison_example), content_type='application/json') self.assert200(rv) self.assertEqual(expected_comparison_example['answer1_id'], rv.json['answer1_id']) self.assertEqual(expected_comparison_example['answer2_id'], rv.json['answer2_id']) # ta with self.login(self.fixtures.ta.username): # test create successful rv = self.client.post( self.base_url, data=json.dumps(expected_comparison_example), content_type='application/json') self.assert200(rv) self.assertEqual(expected_comparison_example['answer1_id'], rv.json['answer1_id']) self.assertEqual(expected_comparison_example['answer2_id'], rv.json['answer2_id']) def test_edit_comparison_example(self): comparison_example = self.fixtures.comparison_examples[0] self.fixtures.add_answer(self.fixtures.assignment, self.fixtures.ta) new_answer = self.fixtures.answers[-1] expected = { 'id': comparison_example.uuid, 'answer1_id': new_answer.uuid, 'answer2_id': comparison_example.answer2_uuid, } # test login required rv = self.client.post( self.base_url + '/' + comparison_example.uuid, data=json.dumps(expected), content_type='application/json') self.assert401(rv) # test unauthorized user with self.login(self.fixtures.unauthorized_instructor.username): rv = self.client.post( self.base_url + '/' + comparison_example.uuid, data=json.dumps(expected), content_type='application/json') self.assert403(rv) for student in [self.fixtures.unauthorized_student, self.fixtures.students[0]]: for user_context in [ \ self.login(student.username), \ self.impersonate(DefaultFixture.ROOT_USER, student)]: with user_context: rv = self.client.post( self.base_url + '/' + comparison_example.uuid, data=json.dumps(expected), content_type='application/json') self.assert403(rv) # instructor with self.login(self.fixtures.instructor.username): # test invalid course id rv = self.client.post( self._build_url("999", self.fixtures.assignment.uuid, '/' + comparison_example.uuid), data=json.dumps(expected), content_type='application/json') self.assert404(rv) # test invalid assignment id rv = self.client.post( self._build_url(self.fixtures.course.uuid, "999", '/' + comparison_example.uuid), data=json.dumps(expected), content_type='application/json') self.assert404(rv) # test invalid comparison_example id rv = self.client.post( self.base_url + '/999', data=json.dumps(expected), content_type='application/json') self.assert404(rv) # test invalid format - answer1_id invalid = expected.copy() invalid['answer1_id'] = None rv = self.client.post( self.base_url + '/' + comparison_example.uuid, data=json.dumps(invalid), content_type='application/json') self.assert400(rv) # test invalid format - answer1_id not exists invalid = expected.copy() invalid['answer1_id'] = "999" rv = self.client.post( self.base_url + '/' + comparison_example.uuid, data=json.dumps(invalid), content_type='application/json') self.assert404(rv) # test invalid format - answer2_id invalid = expected.copy() invalid['answer2_id'] = None rv = self.client.post( self.base_url + '/' + comparison_example.uuid, data=json.dumps(invalid), content_type='application/json') self.assert400(rv) # test invalid format - answer2_id not exists invalid = expected.copy() invalid['answer2_id'] = "999" rv = self.client.post( self.base_url + '/' + comparison_example.uuid, data=json.dumps(invalid), content_type='application/json') self.assert404(rv) # test edit successful rv = self.client.post( self.base_url + '/' + comparison_example.uuid, data=json.dumps(expected), content_type='application/json') self.assert200(rv) self.assertEqual(expected['id'], rv.json['id']) self.assertEqual(expected['answer1_id'], rv.json['answer1_id']) self.assertEqual(expected['answer2_id'], rv.json['answer2_id']) # ta with self.login(self.fixtures.ta.username): # test edit successful rv = self.client.post( self.base_url + '/' + comparison_example.uuid, data=json.dumps(expected), content_type='application/json') self.assert200(rv) self.assertEqual(expected['id'], rv.json['id']) self.assertEqual(expected['answer1_id'], rv.json['answer1_id']) self.assertEqual(expected['answer2_id'], rv.json['answer2_id']) def test_delete_comparison_example(self): comparison_example = self.fixtures.comparison_examples[0] comparison_example2 = self.fixtures.comparison_examples[1] # test login required rv = self.client.delete(self.base_url + '/' + comparison_example.uuid) self.assert401(rv) # test unauthorized user with self.login(self.fixtures.unauthorized_instructor.username): rv = self.client.delete(self.base_url + '/' + comparison_example.uuid) self.assert403(rv) for student in [self.fixtures.unauthorized_student, self.fixtures.students[0]]: for user_context in [ \ self.login(student.username), \ self.impersonate(DefaultFixture.ROOT_USER, student)]: with user_context: rv = self.client.delete(self.base_url + '/' + comparison_example.uuid) self.assert403(rv) with self.login(self.fixtures.instructor.username): # test invalid assignment id rv = self.client.delete(self._build_url(self.fixtures.course.uuid, "4903409") + '/' + comparison_example.uuid) self.assert404(rv) # test invalid course id rv = self.client.delete(self._build_url("4903409", self.fixtures.assignment.uuid) + '/' + comparison_example.uuid) self.assert404(rv) # test invalid comparison example id rv = self.client.delete(self.base_url + '/999') self.assert404(rv) # test deletion by instructor rv = self.client.delete(self.base_url + '/' + comparison_example.uuid) self.assert200(rv) self.assertEqual(comparison_example.uuid, rv.json['id']) # test deletion by ta with self.login(self.fixtures.instructor.username): rv = self.client.delete(self.base_url + '/' + comparison_example2.uuid) self.assert200(rv) self.assertEqual(comparison_example2.uuid, rv.json['id'])
class ComparionExampleAPITests(ComPAIRAPITestCase): def setUp(self): super(ComparionExampleAPITests, self).setUp() self.fixtures = TestFixture().add_course(num_students=30, num_groups=2, with_draft_student=True) self.fixtures.add_comparison_example(self.fixtures.assignment, self.fixtures.instructor) self.fixtures.add_comparison_example(self.fixtures.assignment, self.fixtures.ta) self.base_url = self._build_url(self.fixtures.course.uuid, self.fixtures.assignment.uuid) def _build_url(self, course_uuid, assignment_uuid, tail=""): url = '/api/courses/' + course_uuid + '/assignments/' + assignment_uuid + '/comparisons/examples' + tail return url def test_get_all_comparison_examples(self): # Test login required rv = self.client.get(self.base_url) self.assert401(rv) # test unauthorized users with self.login(self.fixtures.unauthorized_instructor.username): rv = self.client.get(self.base_url) self.assert403(rv) for student in [ self.fixtures.unauthorized_student, self.fixtures.students[0] ]: for user_context in [ \ self.login(student.username), \ self.impersonate(DefaultFixture.ROOT_USER, student)]: with user_context: rv = self.client.get(self.base_url) self.assert403(rv) # instructor with self.login(self.fixtures.instructor.username): # test non-existent entry rv = self.client.get( self._build_url(self.fixtures.course.uuid, "4903409")) self.assert404(rv) rv = self.client.get( self._build_url("4903409", self.fixtures.assignment.uuid)) self.assert404(rv) rv = self.client.get(self.base_url) self.assert200(rv) results = rv.json['objects'] self.assertEqual(len(results), 2) comparison_examples = self.fixtures.assignment.comparison_examples for index, comparison_example in enumerate(comparison_examples): self.assertEqual(results[index]['id'], comparison_example.uuid) self.assertEqual(results[index]['answer1_id'], comparison_example.answer1_uuid) self.assertEqual(results[index]['answer2_id'], comparison_example.answer2_uuid) # ta with self.login(self.fixtures.ta.username): rv = self.client.get(self.base_url) self.assert200(rv) results = rv.json['objects'] self.assertEqual(len(results), 2) comparison_examples = self.fixtures.assignment.comparison_examples for index, comparison_example in enumerate(comparison_examples): self.assertEqual(results[index]['id'], comparison_example.uuid) self.assertEqual(results[index]['answer1_id'], comparison_example.answer1_uuid) self.assertEqual(results[index]['answer2_id'], comparison_example.answer2_uuid) def test_create_comparison_example(self): self.fixtures.add_answer(self.fixtures.assignment, self.fixtures.instructor) self.fixtures.add_answer(self.fixtures.assignment, self.fixtures.ta) expected_comparison_example = { 'answer1_id': self.fixtures.answers[-2].uuid, 'answer2_id': self.fixtures.answers[-1].uuid } # test login required rv = self.client.post(self.base_url, data=json.dumps(expected_comparison_example), content_type='application/json') self.assert401(rv) # test unauthorized users student = self.fixtures.unauthorized_student for user_context in [ \ self.login(student.username), \ self.impersonate(DefaultFixture.ROOT_USER, student)]: with user_context: rv = self.client.post( self.base_url, data=json.dumps(expected_comparison_example), content_type='application/json') self.assert403(rv) with self.login(self.fixtures.unauthorized_instructor.username): rv = self.client.post(self.base_url, data=json.dumps(expected_comparison_example), content_type='application/json') self.assert403(rv) student = self.fixtures.students[0] for user_context in [ \ self.login(student.username), \ self.impersonate(self.fixtures.instructor, student)]: with user_context: rv = self.client.post( self.base_url, data=json.dumps(expected_comparison_example), content_type='application/json') self.assert403(rv) # instructor with self.login(self.fixtures.instructor.username): # test non-existent entry rv = self.client.post(self._build_url(self.fixtures.course.uuid, "4903409"), data=json.dumps(expected_comparison_example), content_type='application/json') self.assert404(rv) rv = self.client.post(self._build_url( "4903409", self.fixtures.assignment.uuid), data=json.dumps(expected_comparison_example), content_type='application/json') self.assert404(rv) # test invalid format - answer1_id invalid_comparison_example = expected_comparison_example.copy() invalid_comparison_example['answer1_id'] = None rv = self.client.post(self.base_url, data=json.dumps(invalid_comparison_example), content_type='application/json') self.assert400(rv) # test invalid format - answer1_id not exists invalid_comparison_example = expected_comparison_example.copy() invalid_comparison_example['answer1_id'] = "999" rv = self.client.post(self.base_url, data=json.dumps(invalid_comparison_example), content_type='application/json') self.assert404(rv) # test invalid format - answer2_id invalid_comparison_example = expected_comparison_example.copy() invalid_comparison_example['answer2_id'] = None rv = self.client.post(self.base_url, data=json.dumps(invalid_comparison_example), content_type='application/json') self.assert400(rv) # test invalid format - answer2_id not exists invalid_comparison_example = expected_comparison_example.copy() invalid_comparison_example['answer2_id'] = "999" rv = self.client.post(self.base_url, data=json.dumps(invalid_comparison_example), content_type='application/json') self.assert404(rv) # test create successful rv = self.client.post(self.base_url, data=json.dumps(expected_comparison_example), content_type='application/json') self.assert200(rv) self.assertEqual(expected_comparison_example['answer1_id'], rv.json['answer1_id']) self.assertEqual(expected_comparison_example['answer2_id'], rv.json['answer2_id']) # ta with self.login(self.fixtures.ta.username): # test create successful rv = self.client.post(self.base_url, data=json.dumps(expected_comparison_example), content_type='application/json') self.assert200(rv) self.assertEqual(expected_comparison_example['answer1_id'], rv.json['answer1_id']) self.assertEqual(expected_comparison_example['answer2_id'], rv.json['answer2_id']) def test_edit_comparison_example(self): comparison_example = self.fixtures.comparison_examples[0] self.fixtures.add_answer(self.fixtures.assignment, self.fixtures.ta) new_answer = self.fixtures.answers[-1] expected = { 'id': comparison_example.uuid, 'answer1_id': new_answer.uuid, 'answer2_id': comparison_example.answer2_uuid, } # test login required rv = self.client.post(self.base_url + '/' + comparison_example.uuid, data=json.dumps(expected), content_type='application/json') self.assert401(rv) # test unauthorized user with self.login(self.fixtures.unauthorized_instructor.username): rv = self.client.post(self.base_url + '/' + comparison_example.uuid, data=json.dumps(expected), content_type='application/json') self.assert403(rv) for student in [ self.fixtures.unauthorized_student, self.fixtures.students[0] ]: for user_context in [ \ self.login(student.username), \ self.impersonate(DefaultFixture.ROOT_USER, student)]: with user_context: rv = self.client.post(self.base_url + '/' + comparison_example.uuid, data=json.dumps(expected), content_type='application/json') self.assert403(rv) # instructor with self.login(self.fixtures.instructor.username): # test invalid course id rv = self.client.post(self._build_url( "999", self.fixtures.assignment.uuid, '/' + comparison_example.uuid), data=json.dumps(expected), content_type='application/json') self.assert404(rv) # test invalid assignment id rv = self.client.post(self._build_url( self.fixtures.course.uuid, "999", '/' + comparison_example.uuid), data=json.dumps(expected), content_type='application/json') self.assert404(rv) # test invalid comparison_example id rv = self.client.post(self.base_url + '/999', data=json.dumps(expected), content_type='application/json') self.assert404(rv) # test invalid format - answer1_id invalid = expected.copy() invalid['answer1_id'] = None rv = self.client.post(self.base_url + '/' + comparison_example.uuid, data=json.dumps(invalid), content_type='application/json') self.assert400(rv) # test invalid format - answer1_id not exists invalid = expected.copy() invalid['answer1_id'] = "999" rv = self.client.post(self.base_url + '/' + comparison_example.uuid, data=json.dumps(invalid), content_type='application/json') self.assert404(rv) # test invalid format - answer2_id invalid = expected.copy() invalid['answer2_id'] = None rv = self.client.post(self.base_url + '/' + comparison_example.uuid, data=json.dumps(invalid), content_type='application/json') self.assert400(rv) # test invalid format - answer2_id not exists invalid = expected.copy() invalid['answer2_id'] = "999" rv = self.client.post(self.base_url + '/' + comparison_example.uuid, data=json.dumps(invalid), content_type='application/json') self.assert404(rv) # test edit successful rv = self.client.post(self.base_url + '/' + comparison_example.uuid, data=json.dumps(expected), content_type='application/json') self.assert200(rv) self.assertEqual(expected['id'], rv.json['id']) self.assertEqual(expected['answer1_id'], rv.json['answer1_id']) self.assertEqual(expected['answer2_id'], rv.json['answer2_id']) # ta with self.login(self.fixtures.ta.username): # test edit successful rv = self.client.post(self.base_url + '/' + comparison_example.uuid, data=json.dumps(expected), content_type='application/json') self.assert200(rv) self.assertEqual(expected['id'], rv.json['id']) self.assertEqual(expected['answer1_id'], rv.json['answer1_id']) self.assertEqual(expected['answer2_id'], rv.json['answer2_id']) def test_delete_comparison_example(self): comparison_example = self.fixtures.comparison_examples[0] comparison_example2 = self.fixtures.comparison_examples[1] # test login required rv = self.client.delete(self.base_url + '/' + comparison_example.uuid) self.assert401(rv) # test unauthorized user with self.login(self.fixtures.unauthorized_instructor.username): rv = self.client.delete(self.base_url + '/' + comparison_example.uuid) self.assert403(rv) for student in [ self.fixtures.unauthorized_student, self.fixtures.students[0] ]: for user_context in [ \ self.login(student.username), \ self.impersonate(DefaultFixture.ROOT_USER, student)]: with user_context: rv = self.client.delete(self.base_url + '/' + comparison_example.uuid) self.assert403(rv) with self.login(self.fixtures.instructor.username): # test invalid assignment id rv = self.client.delete( self._build_url(self.fixtures.course.uuid, "4903409") + '/' + comparison_example.uuid) self.assert404(rv) # test invalid course id rv = self.client.delete( self._build_url("4903409", self.fixtures.assignment.uuid) + '/' + comparison_example.uuid) self.assert404(rv) # test invalid comparison example id rv = self.client.delete(self.base_url + '/999') self.assert404(rv) # test deletion by instructor rv = self.client.delete(self.base_url + '/' + comparison_example.uuid) self.assert200(rv) self.assertEqual(comparison_example.uuid, rv.json['id']) # test deletion by ta with self.login(self.fixtures.instructor.username): rv = self.client.delete(self.base_url + '/' + comparison_example2.uuid) self.assert200(rv) self.assertEqual(comparison_example2.uuid, rv.json['id'])