Skip to content

Commit 714a7d3

Browse files
committed
fix: adjusted course query on enrollments extraction
It must to be able to query courses with an entire course_id or just a piece of it.
1 parent 45a2dd4 commit 714a7d3

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

nau_openedx_extensions/partner_integration/facade.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,11 @@ def _execute_enrollments_query(self, enrollments_base_query, start_dt, end_dt, c
353353
enrollments_query = enrollments_base_query
354354

355355
if courses:
356-
enrollments_query = enrollments_query.filter(course__id__in=courses).select_related("user")
356+
q = Q()
357+
for code in courses:
358+
q |= Q(course__id__icontains=code)
359+
360+
enrollments_query = enrollments_query.filter(q).select_related("user")
357361

358362
if not start_dt or not end_dt:
359363
start = datetime.now()

nau_openedx_extensions/partner_integration/tests/test_api.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,32 @@ def test_multiple_courses_returns_combined_results(self):
771771
returned_courses = [r["course_id"] for r in response.data["results"]]
772772
self.assertIn(str(courses[0].id), returned_courses)
773773
self.assertIn(str(courses[1].id), returned_courses)
774+
775+
def test_multiple_courses_with_only_codes(self):
776+
"""
777+
Test that multiple course filters return combined results.
778+
1. Authenticates a partner client.
779+
2. Calls the data extractor endpoint with multiple course codes.
780+
3. Validates the response contains enrollments for all specified courses.
781+
"""
782+
partner_client = self.base_data["partner_clients"][0]
783+
access_token = self.authenticate_partner_client(partner_client)
784+
785+
courses = self.base_data["courses"][:2]
786+
787+
self.http_client.credentials(**{"HTTP_AUTHORIZATION": f"Bearer {access_token}"})
788+
response = self.http_client.post(self.endpoint,
789+
data={"courses": [
790+
str(course.id).split("+")[1]
791+
for course in courses]},
792+
format="json",
793+
)
794+
795+
self.assertEqual(response.status_code, status.HTTP_200_OK)
796+
797+
returned_courses = [r["course_id"] for r in response.data["results"]]
798+
self.assertIn(str(courses[0].id), returned_courses)
799+
self.assertIn(str(courses[1].id), returned_courses)
774800

775801
def test_date_filter_limits_results(self):
776802
"""

0 commit comments

Comments
 (0)