diff --git a/eox_nelp/course_api/v1/serializers.py b/eox_nelp/course_api/v1/serializers.py index 4991084e..bbff5815 100644 --- a/eox_nelp/course_api/v1/serializers.py +++ b/eox_nelp/course_api/v1/serializers.py @@ -6,6 +6,7 @@ from rest_framework import serializers from eox_nelp.edxapp_wrapper.course_api import CourseDetailSerializer +from eox_nelp.edxapp_wrapper.course_experience import course_home_url as retrieve_course_home_url class NelpCourseDetailSerializer(CourseDetailSerializer): # pylint: disable=abstract-method @@ -37,6 +38,14 @@ def get_course_about_url(self, course_overview): return self.context["request"].build_absolute_uri(about_course_path) + course_home_url = serializers.SerializerMethodField() + + def get_course_home_url(self, course_overview): + """ + Get the representation for SerializerMethodField `course_home_url` + """ + return retrieve_course_home_url(course_overview.id) + overview = serializers.SerializerMethodField() def get_overview(self, course_overview): diff --git a/eox_nelp/course_api/v1/tests/test_views.py b/eox_nelp/course_api/v1/tests/test_views.py index ebffa084..7be97ecf 100644 --- a/eox_nelp/course_api/v1/tests/test_views.py +++ b/eox_nelp/course_api/v1/tests/test_views.py @@ -12,6 +12,7 @@ from rest_framework import status from rest_framework.test import APIClient, APITestCase +from eox_nelp.edxapp_wrapper.course_experience import course_home_url from eox_nelp.edxapp_wrapper.course_overviews import CourseOverview from eox_nelp.edxapp_wrapper.test_backends.course_api_m_v1 import TEST_RAW_OVERVIEW @@ -92,11 +93,13 @@ def test_get_nelp_courses_list(self): "results": [ { "course_about_url": f"http://testserver/courses/{self.BASE_COURSE_ID}1/about", + "course_home_url": course_home_url(f"{self.BASE_COURSE_ID}1"), "overview": TEST_RAW_OVERVIEW, "overview_object": self.expected_overview_object, }, { "course_about_url": f"http://testserver/courses/{self.BASE_COURSE_ID}2/about", + "course_home_url": course_home_url(f"{self.BASE_COURSE_ID}2"), "overview": TEST_RAW_OVERVIEW, "overview_object": self.expected_overview_object, }, @@ -122,12 +125,12 @@ def test_get_nelp_course_detail(self): url_endpoint = reverse(self.reverse_viewname_detail, kwargs=course_kwarg) expected_value = { "course_about_url": f"http://testserver/courses/{self.BASE_COURSE_ID}1/about", + "course_home_url": course_home_url(f"{self.BASE_COURSE_ID}1"), "overview": TEST_RAW_OVERVIEW, "overview_object": self.expected_overview_object, } response = self.client.get(url_endpoint) - self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertIn(response.headers["Content-Type"], self.RESPONSE_CONTENT_TYPES) self.assertDictEqual(response.json(), expected_value) diff --git a/eox_nelp/edxapp_wrapper/backends/course_experience_p_v1.py b/eox_nelp/edxapp_wrapper/backends/course_experience_p_v1.py new file mode 100644 index 00000000..b2630fa2 --- /dev/null +++ b/eox_nelp/edxapp_wrapper/backends/course_experience_p_v1.py @@ -0,0 +1,14 @@ +"""Backend for course_experience module. +This file contains all the necessary course_experience dependencies from +https://github.com/openedx/edx-platform/blob/open-release/palm.master/openedx/features/course_experience/ +""" +from openedx.features.course_experience import course_home_url # pylint: disable=import-error + + +def get_course_home_url(): + """Allow to get the course_home_url function from + https://github.com/openedx/edx-platform/blob/open-release/palm.master/openedx/features/course_experience/__init__.py + Returns: + course_home_url function. + """ + return course_home_url diff --git a/eox_nelp/edxapp_wrapper/course_experience.py b/eox_nelp/edxapp_wrapper/course_experience.py new file mode 100644 index 00000000..72a7130e --- /dev/null +++ b/eox_nelp/edxapp_wrapper/course_experience.py @@ -0,0 +1,15 @@ +"""Wrapper course_experience. +This contains all the required dependencies from course_experience. + +Attributes: + backend: Imported module by using the plugin settings. + course_experience: Module for openedx course_experience +""" + +from importlib import import_module + +from django.conf import settings + +backend = import_module(settings.EOX_NELP_COURSE_EXPERIENCE_BACKEND) + +course_home_url = backend.get_course_home_url() diff --git a/eox_nelp/edxapp_wrapper/test_backends/course_experience_p_v1.py b/eox_nelp/edxapp_wrapper/test_backends/course_experience_p_v1.py new file mode 100644 index 00000000..39f1f05b --- /dev/null +++ b/eox_nelp/edxapp_wrapper/test_backends/course_experience_p_v1.py @@ -0,0 +1,9 @@ +"""Test backend for course_experience module.""" + + +def get_course_home_url(): + """Return test function. + Returns: + string for testing basic home url + """ + return lambda course_key: f"http://testserver/learning/course/{course_key}/home" diff --git a/eox_nelp/settings/common.py b/eox_nelp/settings/common.py index 84edb811..3c8c2be6 100644 --- a/eox_nelp/settings/common.py +++ b/eox_nelp/settings/common.py @@ -52,6 +52,7 @@ def plugin_settings(settings): settings.EOX_NELP_COURSE_BLOCKS_BACKEND = 'eox_nelp.edxapp_wrapper.backends.course_blocks_m_v1' settings.EOX_NELP_COURSEWARE_BACKEND = 'eox_nelp.edxapp_wrapper.backends.courseware_m_v1' settings.EOX_NELP_INSTRUCTOR_BACKEND = 'eox_nelp.edxapp_wrapper.backends.instructor_m_v1' + settings.EOX_NELP_COURSE_EXPERIENCE_BACKEND = 'eox_nelp.edxapp_wrapper.backends.course_experience_p_v1' settings.FUTUREX_API_URL = 'https://testing-site.com' settings.FUTUREX_API_CLIENT_ID = 'my-test-client-id' diff --git a/eox_nelp/settings/test.py b/eox_nelp/settings/test.py index 0df6be62..0613050a 100644 --- a/eox_nelp/settings/test.py +++ b/eox_nelp/settings/test.py @@ -38,6 +38,7 @@ def plugin_settings(settings): # pylint: disable=function-redefined settings.EOX_NELP_COURSE_BLOCKS_BACKEND = 'eox_nelp.edxapp_wrapper.test_backends.course_blocks_m_v1' settings.EOX_NELP_COURSEWARE_BACKEND = "eox_nelp.edxapp_wrapper.test_backends.courseware_m_v1" settings.EOX_NELP_INSTRUCTOR_BACKEND = "eox_nelp.edxapp_wrapper.test_backends.instructor_m_v1" + settings.EOX_NELP_COURSE_EXPERIENCE_BACKEND = "eox_nelp.edxapp_wrapper.test_backends.course_experience_p_v1" settings.FUTUREX_API_URL = 'https://testing.com' settings.FUTUREX_API_CLIENT_ID = 'my-test-client-id'