Merge pull request #5489 from edx/gprice/notifier-api-bogus-enrollment
Make notifier API resilient to bad enrollments
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
from django.contrib.auth.models import User
|
||||
from django.http import Http404
|
||||
from rest_framework import serializers
|
||||
|
||||
from course_groups.cohorts import is_course_cohorted
|
||||
@@ -47,16 +48,20 @@ class NotifierUserSerializer(serializers.ModelSerializer):
|
||||
for role in user.roles.all()
|
||||
for perm in role.permissions.all() if perm.name == "see_all_cohorts"
|
||||
}
|
||||
return {
|
||||
unicode(enrollment.course_id): {
|
||||
"cohort_id": cohort_id_map.get(enrollment.course_id),
|
||||
"see_all_cohorts": (
|
||||
enrollment.course_id in see_all_cohorts_set or
|
||||
not is_course_cohorted(enrollment.course_id)
|
||||
),
|
||||
}
|
||||
for enrollment in user.courseenrollment_set.all() if enrollment.is_active
|
||||
}
|
||||
ret = {}
|
||||
for enrollment in user.courseenrollment_set.all():
|
||||
if enrollment.is_active:
|
||||
try:
|
||||
ret[unicode(enrollment.course_id)] = {
|
||||
"cohort_id": cohort_id_map.get(enrollment.course_id),
|
||||
"see_all_cohorts": (
|
||||
enrollment.course_id in see_all_cohorts_set or
|
||||
not is_course_cohorted(enrollment.course_id)
|
||||
),
|
||||
}
|
||||
except Http404: # is_course_cohorted raises this if course does not exist
|
||||
pass
|
||||
return ret
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
|
||||
@@ -10,6 +10,7 @@ from django_comment_common.models import Role, Permission
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
from notification_prefs import NOTIFICATION_PREF_KEY
|
||||
from notifier_api.views import NotifierUsersViewSet
|
||||
from opaque_keys.edx.locator import CourseLocator
|
||||
from student.models import CourseEnrollment
|
||||
from student.tests.factories import UserFactory, CourseEnrollmentFactory
|
||||
from user_api.models import UserPreference
|
||||
@@ -120,6 +121,14 @@ class NotifierUsersViewSetTest(UrlResetMixin, ModuleStoreTestCase):
|
||||
result = self._get_detail()
|
||||
self.assertEqual(result["course_info"], {})
|
||||
|
||||
def test_course_info_non_existent_course_enrollment(self):
|
||||
CourseEnrollmentFactory(
|
||||
user=self.user,
|
||||
course_id=CourseLocator(org="dummy", course="dummy", run="non_existent")
|
||||
)
|
||||
result = self._get_detail()
|
||||
self.assertEqual(result["course_info"], {})
|
||||
|
||||
def test_preferences(self):
|
||||
lang_pref = UserPreferenceFactory(
|
||||
user=self.user,
|
||||
|
||||
Reference in New Issue
Block a user