feat: add tests for recommendation api and utils (#31679)

This commit is contained in:
Zainab Amir
2023-02-01 21:10:59 +05:00
committed by GitHub
parent 201499ae84
commit 2e4a20eded
4 changed files with 271 additions and 38 deletions

View File

@@ -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)