From e3e626c942131f537cb9cf6ac63e07f4c0501f24 Mon Sep 17 00:00:00 2001 From: Diana Villalvazo Date: Tue, 11 Aug 2026 09:52:25 -0600 Subject: [PATCH] feat: allow search by display number for courses (#38963) --- .../rest_api/v2/views/tests/test_home.py | 16 ++++++++++++++++ .../content/course_overviews/models.py | 1 + 2 files changed, 17 insertions(+) diff --git a/cms/djangoapps/contentstore/rest_api/v2/views/tests/test_home.py b/cms/djangoapps/contentstore/rest_api/v2/views/tests/test_home.py index 453f69ae4225..0c3023a60a95 100644 --- a/cms/djangoapps/contentstore/rest_api/v2/views/tests/test_home.py +++ b/cms/djangoapps/contentstore/rest_api/v2/views/tests/test_home.py @@ -190,6 +190,22 @@ def test_search_query_if_passed(self): ])]) self.assertEqual(response.status_code, status.HTTP_200_OK) + def test_search_query_matches_display_number(self): + """Search must match course display number values.""" + course_key = self.store.make_course_key("search-org", "opaque-number", "run") + searchable_course = CourseOverviewFactory.create( + id=course_key, + org=course_key.org, + display_name="Unrelated Title", + display_number_with_default="Friendly Number 42", + ) + + response = self.client.get(self.api_v2_url, {"search": "Friendly Number"}) + + assert response.status_code == status.HTTP_200_OK + assert len(response.data["results"]["courses"]) == 1 + assert response.data["results"]["courses"][0]["course_key"] == str(searchable_course.id) + def test_order_query_if_passed(self): """Get list of courses when order filter passed as a query param. diff --git a/openedx/core/djangoapps/content/course_overviews/models.py b/openedx/core/djangoapps/content/course_overviews/models.py index c5b453f82e6c..7edaa4ebf28a 100644 --- a/openedx/core/djangoapps/content/course_overviews/models.py +++ b/openedx/core/djangoapps/content/course_overviews/models.py @@ -721,6 +721,7 @@ def get_courses_matching_query(cls, query, course_overviews): """ return course_overviews.filter( Q(display_name__icontains=query) | + Q(display_number_with_default__icontains=query) | Q(org__icontains=query) | Q(id__icontains=query) )