def test_add_member_to_course(self, mock_person_filter, mock_get_canvas_course_section, mock_add_canvas_course_enrollee, mock_role_name, mock_member_class, mock_user_role): for user_role_id, member_class in self.test_data: # ensure we have unique ids for this run, since we're not resetting # the db between them canvas_course_id = random.randint(1, SQLITE_MAXINT) canvas_role_name = 'StudentEnrollment' course_instance_id = random.randint(1, SQLITE_MAXINT) user_id = random.randint(1, SQLITE_MAXINT) # set up mocks mock_member_class.return_value = member_class mock_person = Mock() mock_person_filter.return_value = [mock_person] mock_role_name.return_value = canvas_role_name # run it existing_enrollment, person = add_member_to_course( user_id, user_role_id, course_instance_id, canvas_course_id) # validate the results self.assertFalse(existing_enrollment) self.assertIs(person, mock_person) # validate the Person lookup, since we mocked the result self.assertEqual(mock_person_filter.call_args_list, [call(univ_id=user_id)]) # verify the db entry was created membership = member_class.objects.filter( user_id=user_id, course_instance_id=course_instance_id, role_id=user_role_id) self.assertEqual(membership.count(), 1) # verify the canvas enrollment was created self.assertEqual(mock_add_canvas_course_enrollee.call_args_list, [call(canvas_course_id, canvas_role_name, user_id)]) # reset the mocks for the next run mock_person_filter.reset_mock() mock_add_canvas_course_enrollee.reset_mock()
def test_add_member_to_course_existing_enrollment(self, mock_person_filter, mock_get_course_member_class, mock_add_canvas_course_enrollee, mock_user_role): # always throw an exception from enrollment.save() to trigger the # "existing enrollment" behavior mock_member_instance = \ mock_get_course_member_class.return_value.return_value mock_member_instance.save.side_effect = RuntimeError for user_role_id, member_class in self.test_data: # ensure we have unique ids for this run, since we're not resetting # the db between them canvas_course_id = random.randint(1, SQLITE_MAXINT) course_instance_id = random.randint(1, SQLITE_MAXINT) user_id = random.randint(1, SQLITE_MAXINT) # set up mocks mock_person = Mock() mock_person_filter.return_value = [mock_person] # run it existing_enrollment, person = add_member_to_course( user_id, user_role_id, course_instance_id, canvas_course_id) # validate the results self.assertTrue(existing_enrollment) self.assertIs(person, mock_person) # validate the Person lookup, since we mocked the result self.assertEqual(mock_person_filter.call_args_list, [call(univ_id=user_id)]) # verify the db entry was not created membership = member_class.objects.filter( user_id=user_id, course_instance_id=course_instance_id, role_id=user_role_id) self.assertEqual(membership.count(), 0) # verify the canvas enrollment was not created self.assertEqual(mock_add_canvas_course_enrollee.call_count, 0) # reset the mocks for the next run mock_person_filter.reset_mock()