Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
course-discovery
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
course-discovery
Commits
3fa7c15f
Commit
3fa7c15f
authored
Mar 01, 2017
by
Matthew Piatetsky
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Deduplicate course runs in typeahead by course
ECOM-7338
parent
506e0d5b
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
32 additions
and
2 deletions
+32
-2
course_discovery/apps/api/v1/tests/test_views/test_search.py
+20
-0
course_discovery/apps/api/v1/views/search.py
+12
-2
No files found.
course_discovery/apps/api/v1/tests/test_views/test_search.py
View file @
3fa7c15f
...
...
@@ -473,6 +473,26 @@ class TypeaheadSearchViewTests(DefaultPartnerMixin, TypeaheadSerializationMixin,
self
.
assertEqual
(
len
(
response_data
[
'course_runs'
]),
RESULT_COUNT
)
self
.
assertEqual
(
len
(
response_data
[
'programs'
]),
RESULT_COUNT
)
def
test_typeahead_deduplicate_course_runs
(
self
):
""" Verify the typeahead response will only include the first course run per course. """
RESULT_COUNT
=
TypeaheadSearchView
.
RESULT_COUNT
title
=
"Test"
course1
=
CourseFactory
(
partner
=
self
.
partner
)
course2
=
CourseFactory
(
partner
=
self
.
partner
)
for
i
in
range
(
RESULT_COUNT
):
CourseRunFactory
(
title
=
"{}{}{}"
.
format
(
title
,
course1
.
title
,
i
),
course
=
course1
)
for
i
in
range
(
RESULT_COUNT
):
CourseRunFactory
(
title
=
"{}{}{}"
.
format
(
title
,
course2
.
title
,
i
),
course
=
course2
)
response
=
self
.
get_response
({
'q'
:
title
})
assert
response
.
status_code
==
200
response_data
=
response
.
json
()
# There are many runs for both courses, but only one from each will be included
course_runs
=
response_data
[
'course_runs'
]
assert
len
(
course_runs
)
==
2
# compare course titles embedded in course run title to ensure that course runs belong to different courses
assert
course_runs
[
0
][
'title'
][
4
:
-
1
]
!=
course_runs
[
1
][
'title'
][
4
:
-
1
]
def
test_typeahead_multiple_authoring_organizations
(
self
):
""" Test typeahead response with multiple authoring organizations. """
title
=
"Design"
...
...
course_discovery/apps/api/v1/views/search.py
View file @
3fa7c15f
...
...
@@ -134,7 +134,17 @@ class TypeaheadSearchView(PartnerMixin, APIView):
SQ
(
authoring_organizations_autocomplete
=
clean_query
)
)
course_runs
=
course_runs
.
filter
(
published
=
True
)
.
exclude
(
hidden
=
True
)
.
filter
(
partner
=
partner
.
short_code
)
course_runs
=
course_runs
[:
self
.
RESULT_COUNT
]
# Get first three results after deduplicating by course run
course_runs_list
,
course_keys_set
=
[],
set
()
for
course_run
in
course_runs
:
course_key
=
course_run
.
course_key
if
course_key
in
course_keys_set
:
continue
course_keys_set
.
add
(
course_key
)
course_runs_list
.
append
(
course_run
)
if
len
(
course_runs_list
)
==
3
:
break
programs
=
sqs
.
models
(
Program
)
.
filter
(
SQ
(
title_autocomplete
=
clean_query
)
|
...
...
@@ -143,7 +153,7 @@ class TypeaheadSearchView(PartnerMixin, APIView):
programs
=
programs
.
filter
(
status
=
ProgramStatus
.
Active
)
.
filter
(
partner
=
partner
.
short_code
)
programs
=
programs
[:
self
.
RESULT_COUNT
]
return
course_runs
,
programs
return
course_runs
_list
,
programs
def
get
(
self
,
request
,
*
args
,
**
kwargs
):
"""
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment