feat: add tests for recommendation api and utils (#31679)
This commit is contained in:
@@ -23,6 +23,7 @@ COURSE_LEVELS = [
|
||||
|
||||
class AlgoliaClient:
|
||||
""" Class for instantiating an Algolia search client instance. """
|
||||
|
||||
algolia_client = None
|
||||
algolia_app_id = settings.ALGOLIA_APP_ID
|
||||
algolia_search_api_key = settings.ALGOLIA_SEARCH_API_KEY
|
||||
@@ -78,10 +79,10 @@ def _has_country_restrictions(product, user_country):
|
||||
countries = location_restriction.get("countries")
|
||||
if restriction_type == "allowlist":
|
||||
allow_list = countries
|
||||
if restriction_type == "blocklist":
|
||||
elif restriction_type == "blocklist":
|
||||
block_list = countries
|
||||
|
||||
return user_country in block_list or (allow_list and user_country not in allow_list)
|
||||
return user_country in block_list or (bool(allow_list) and user_country not in allow_list)
|
||||
|
||||
|
||||
def _parse_course_owner_data(owner):
|
||||
@@ -91,17 +92,21 @@ def _parse_course_owner_data(owner):
|
||||
return {
|
||||
"key": owner.get("key"),
|
||||
"name": owner.get("name"),
|
||||
"logo_image_url": owner.get("logo_image_url")
|
||||
"logo_image_url": owner.get("logo_image_url"),
|
||||
}
|
||||
|
||||
|
||||
def course_data_for_discovery_card(course_data):
|
||||
"""Helper method to prepare data for prospectus course card"""
|
||||
recommended_course_data = {}
|
||||
active_course_run = [course_run for course_run in course_data.get("course_runs", [])
|
||||
if course_run.get("availability") == "Current"][0]
|
||||
if active_course_run:
|
||||
owners = map(_parse_course_owner_data, course_data.get("owners"))
|
||||
active_course_runs = [
|
||||
course_run
|
||||
for course_run in course_data.get("course_runs", [])
|
||||
if course_run.get("availability") == "Current"
|
||||
]
|
||||
|
||||
if active_course_runs:
|
||||
owners = list(map(_parse_course_owner_data, course_data.get("owners")))
|
||||
recommended_course_data.update({
|
||||
"uuid": course_data.get("uuid"),
|
||||
"title": course_data.get("title"),
|
||||
@@ -109,11 +114,12 @@ def course_data_for_discovery_card(course_data):
|
||||
"owners": owners,
|
||||
"prospectus_path": f"courses/{course_data.get('url_slug')}",
|
||||
"active_course_run": {
|
||||
"key": active_course_run.get("key"),
|
||||
"key": active_course_runs[0].get("key"),
|
||||
"type": "Active",
|
||||
"marketing_url": active_course_run.get("marketing_url"),
|
||||
"marketing_url": active_course_runs[0].get("marketing_url"),
|
||||
}
|
||||
})
|
||||
|
||||
return recommended_course_data
|
||||
|
||||
|
||||
@@ -196,7 +202,11 @@ def get_amplitude_course_recommendations(user_id, recommendation_id):
|
||||
|
||||
|
||||
def filter_recommended_courses(
|
||||
user, unfiltered_course_keys, recommendation_count=10, user_country_code=None, request_course=None
|
||||
user,
|
||||
unfiltered_course_keys,
|
||||
recommendation_count=10,
|
||||
user_country_code=None,
|
||||
request_course=None,
|
||||
):
|
||||
"""
|
||||
Returns the filtered course recommendations. The unfiltered course keys
|
||||
@@ -215,12 +225,18 @@ def filter_recommended_courses(
|
||||
|
||||
# Remove the course keys a user is already enrolled in
|
||||
enrollable_course_keys = _remove_user_enrolled_course_keys(user, unfiltered_course_keys)
|
||||
# If user is seeing the recommendations on a course about pages, filter that course out of recommendations
|
||||
recommended_course_keys = [course_key for course_key in enrollable_course_keys if course_key != request_course]
|
||||
|
||||
# If user is seeing the recommendations on a course about page, filter that course out of recommendations
|
||||
recommended_course_keys = [
|
||||
course_key
|
||||
for course_key in enrollable_course_keys
|
||||
if course_key != request_course
|
||||
]
|
||||
|
||||
for course_id in recommended_course_keys:
|
||||
if len(filtered_recommended_courses) >= recommendation_count:
|
||||
break
|
||||
|
||||
course_data = get_course_data(course_id, fields)
|
||||
if course_data and not _has_country_restrictions(course_data, user_country_code):
|
||||
filtered_recommended_courses.append(course_data)
|
||||
|
||||
Reference in New Issue
Block a user