diff --git a/lms/djangoapps/instructor/tests/test_certificates.py b/lms/djangoapps/instructor/tests/test_certificates.py index 13b580cc5a..d54773c6c9 100644 --- a/lms/djangoapps/instructor/tests/test_certificates.py +++ b/lms/djangoapps/instructor/tests/test_certificates.py @@ -447,3 +447,42 @@ class CertificatesInstructorApiTest(SharedModuleStoreTestCase): res_json['message'], u"Student (username/email={user_id} already in certificate exception list)".format(user_id=user) ) + + def test_certificate_exception_same_user_in_two_different_courses(self): + """ + Test certificates exception addition api endpoint in scenario when same + student is added to two different courses. + """ + + self.client.login(username=self.global_staff.username, password='test') + + url_course1 = reverse( + 'create_certificate_exception', + kwargs={'course_id': unicode(self.course.id), 'white_list_student': ''} + ) + + response = self.client.post( + url_course1, + data=json.dumps(self.certificate_exception_data), + content_type='application/json' + ) + self.assertEqual(response.status_code, 200) + res_json = json.loads(response.content) + self.assertTrue(res_json['success']) + + course2 = CourseFactory.create() + url_course2 = reverse( + 'create_certificate_exception', + kwargs={'course_id': unicode(course2.id), 'white_list_student': ''} + ) + + # add certificate exception for same user in a different course + self.client.post( + url_course2, + data=json.dumps(self.certificate_exception_data), + content_type='application/json' + ) + + self.assertEqual(response.status_code, 200) + res_json = json.loads(response.content) + self.assertTrue(res_json['success']) diff --git a/lms/djangoapps/instructor/views/api.py b/lms/djangoapps/instructor/views/api.py index a1e532cf84..d626a45ed0 100644 --- a/lms/djangoapps/instructor/views/api.py +++ b/lms/djangoapps/instructor/views/api.py @@ -2780,7 +2780,7 @@ def process_certificate_exceptions(data_list, course_key): except MultipleObjectsReturned: raise ValueError(_('Multiple Students found with username/email={user}').format(user=user)) - if CertificateWhitelist.objects.filter(user=db_user, whitelist=True).count() > 0: + if CertificateWhitelist.objects.filter(user=db_user, course_id=course_key, whitelist=True).count() > 0: raise ValueError( _("Student (username/email={user_id} already in certificate exception list)").format(user_id=user) )