From ec788e669c79a3389f7077e4a6b6e2d4b2194856 Mon Sep 17 00:00:00 2001 From: Chris Pappas Date: Wed, 24 May 2023 17:18:41 -0400 Subject: [PATCH] feat: allow course entitlements REST API to be filtered on course_uuid asd --- .../entitlements/rest_api/v1/filters.py | 3 +- .../rest_api/v1/tests/test_views.py | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/common/djangoapps/entitlements/rest_api/v1/filters.py b/common/djangoapps/entitlements/rest_api/v1/filters.py index 3fc38baae09a..2c29ba538269 100644 --- a/common/djangoapps/entitlements/rest_api/v1/filters.py +++ b/common/djangoapps/entitlements/rest_api/v1/filters.py @@ -40,7 +40,8 @@ class CourseEntitlementFilter(filters.FilterSet): uuid = UUIDListFilter() user = filters.CharFilter(field_name='user__username') + course_uuid = UUIDListFilter(field_name='course_uuid') class Meta: model = CourseEntitlement - fields = ('uuid', 'user') + fields = ('uuid', 'user', 'course_uuid') diff --git a/common/djangoapps/entitlements/rest_api/v1/tests/test_views.py b/common/djangoapps/entitlements/rest_api/v1/tests/test_views.py index 9bb36b005cc7..8bca245617cd 100644 --- a/common/djangoapps/entitlements/rest_api/v1/tests/test_views.py +++ b/common/djangoapps/entitlements/rest_api/v1/tests/test_views.py @@ -672,6 +672,34 @@ def test_get_expired_entitlement_by_uuid(self): results = response.data assert results.get('expired_at') + def test_entitlements_filter_on_course_uuid(self): + """ + Verify that courses filtered properly on list of course_uuids. + """ + entitlements = CourseEntitlementFactory.create_batch(5, user=self.user) + course_uuids_to_filter_on = { + str(entitlement.course_uuid) + for entitlement in entitlements[0:3] + } + # Create a 2nd entitlement for one of the ones to filter on + CourseEntitlementFactory.create(user=self.user, course_uuid=str(entitlements[0].course_uuid)) + + url = reverse('entitlements_api:v1:entitlements-list') + url += f'?user={self.user.username}' + url += f'&course_uuid={",".join(course_uuids_to_filter_on)}' + + response = self.client.get( + url, + content_type='application/json', + ) + assert response.status_code == 200 + + results = response.data + assert results['count'] == 4 + actual_course_uuids = {entitlement['course_uuid'] for entitlement in results['results']} + assert actual_course_uuids == course_uuids_to_filter_on + assert len(actual_course_uuids) == 3 + def test_delete_and_revoke_entitlement(self): course_entitlement = CourseEntitlementFactory.create() url = reverse(self.ENTITLEMENTS_DETAILS_PATH, args=[str(course_entitlement.uuid)])