diff --git a/eox_tenant/__init__.py b/eox_tenant/__init__.py index 4faa7681..985b5e0e 100644 --- a/eox_tenant/__init__.py +++ b/eox_tenant/__init__.py @@ -1,4 +1,4 @@ """ Init for eox-tenant. """ -__version__ = '11.7.0' +__version__ = '11.8.0' diff --git a/eox_tenant/filters/README.rst b/eox_tenant/filters/README.rst index a095b5a8..b2a50da6 100644 --- a/eox_tenant/filters/README.rst +++ b/eox_tenant/filters/README.rst @@ -13,8 +13,12 @@ Filters steps list: ------------------- * `FilterUserCourseEnrollmentsByTenant`_: Filters the course enrollments of a user from the tenant site where the request is made. +* `FilterRenderCertificatesByOrg`_: Stop certificate generation process raising a exception if course org is different to tenant orgs. +* `TenantAwareLinksFromStudio`_: Filter especific tenant aware link form Studio to the LMS. -.. _FilterUserCourseEnrollmentsByTenant: ./pipeline.py#L9 +.. _FilterUserCourseEnrollmentsByTenant: ./pipeline.py#L12 +.. _FilterRenderCertificatesByOrg: ./pipeline.py#L35 +.. _TenantAwareLinksFromStudio: ./pipeline.py#L63 How to add a new Filter Step: ----------------------------- diff --git a/eox_tenant/filters/pipeline.py b/eox_tenant/filters/pipeline.py index c38ad7d5..5a0cf0ff 100644 --- a/eox_tenant/filters/pipeline.py +++ b/eox_tenant/filters/pipeline.py @@ -1,12 +1,16 @@ """ The pipeline module defines custom Filters functions that are used in openedx-filters. """ +from django.conf import settings from openedx_filters import PipelineStep from openedx_filters.learning.filters import CertificateRenderStarted +from eox_tenant.edxapp_wrapper.site_configuration_module import get_configuration_helpers from eox_tenant.organizations import get_organizations from eox_tenant.tenant_aware_functions.enrollments import filter_enrollments +configuration_helpers = get_configuration_helpers() + class FilterUserCourseEnrollmentsByTenant(PipelineStep): """ @@ -57,3 +61,60 @@ def run_filter(self, context, custom_template, *args, **kwargs): # pylint: disa raise CertificateRenderStarted.RenderAlternativeInvalidCertificate( "You can't generate a certificate from this site.", ) + + +class OrgAwareLMSURLStudio(PipelineStep): + """ + Filter tenant aware links from Studio. + """ + + def run_filter(self, url, org): # pylint: disable=arguments-differ,unused-argument + """ + Filter especific tenant aware link form Studio to the LMS. + Example Usage: + Add the following configurations to you configuration file + "OPEN_EDX_FILTERS_CONFIG": { + "org.openedx.course_authoring.lms.page.url.requested.v1": { + "fail_silently": false, + "pipeline": [ + "eox_tenant.filters.pipeline.OrgAwareLMSURLStudio" + ] + } + } + """ + lms_root = configuration_helpers.get_value_for_org( + org, + 'LMS_ROOT_URL', + settings.LMS_ROOT_URL + ) + return {"url": lms_root, "org": org} + + +class OrgAwareCourseAboutPageURL(PipelineStep): + """ + Filter tenant aware links from LMS. + """ + + def run_filter(self, url, org): # pylint: disable=arguments-differ,unused-argument + """ + The url looks like this: + /courses/course-v1:org+course+number/about + + This method will filter the url to be tenant aware. + Example Usage: + Add the following configurations to you configuration file + "OPEN_EDX_FILTERS_CONFIG": { + "org.openedx.learning.course_about.page.url.requested.v1": { + "fail_silently": false, + "pipeline": [ + "eox_tenant.filters.pipeline.OrgAwareCourseAboutPageURL" + ] + }, + } + """ + lms_root = configuration_helpers.get_value_for_org( + org, + 'LMS_ROOT_URL', + settings.LMS_ROOT_URL + ) + return {"url": lms_root, "org": org} diff --git a/eox_tenant/filters/test/test_pipeline.py b/eox_tenant/filters/test/test_pipeline.py index 1f9580be..e13a7675 100644 --- a/eox_tenant/filters/test/test_pipeline.py +++ b/eox_tenant/filters/test/test_pipeline.py @@ -8,7 +8,7 @@ from django.test import TestCase, override_settings from openedx_filters.learning.filters import CertificateRenderStarted, CourseEnrollmentQuerysetRequested -from eox_tenant.filters.pipeline import FilterRenderCertificatesByOrg +from eox_tenant.filters.pipeline import FilterRenderCertificatesByOrg, OrgAwareCourseAboutPageURL, OrgAwareLMSURLStudio from eox_tenant.tenant_aware_functions.enrollments import filter_enrollments @@ -161,3 +161,87 @@ def test_filter_render_certificates_by_org(self, organizations, render, mock_get else: FilterRenderCertificatesByOrg.run_filter(self, context, {}) mock_get_organizations.assert_called_once() + + +class FilterOrgAwareLMSURLStudioTestCase(TestCase): + """ + FilterOrgAwareLMSURLStudioTestCase test cases. + """ + + def setUp(self): + """This method creates Microsite objects in database""" + + # Creating mock to render tenant aware links + self.url = "https://lms-base" + self.org = "test" + + @override_settings( + OPEN_EDX_FILTERS_CONFIG={ + "org.openedx.learning.tenant_aware_link.render.started.v1": { + "fail_silently": False, + "pipeline": [ + "eox_tenant.filters.pipeline.OrgAwareLMSURLStudio" + ] + } + }, + LMS_ROOT_URL="https://test-tenant-aware-link" + ) + @mock.patch('eox_tenant.filters.pipeline.configuration_helpers') + def test_tenant_aware_link_from_studio(self, configuration_helpers_mock): + """ + Test that filter tenant aware link get value for org. + """ + results_get_value = "https://test-tenant-aware-link" + + configuration_helpers_mock.get_value_for_org.return_value = results_get_value + + result = OrgAwareLMSURLStudio.run_filter( + self, + url=self.url, + org=self.org, + ) + + self.assertEqual(results_get_value, result.get("url")) + self.assertEqual(result.get("org"), self.org) + + +class FilterOrgAwareCourseAboutPageURLTestCase(TestCase): + """ + FilterOrgAwareCourseAboutPageURLTestCase test cases. + """ + + def setUp(self): + """This method creates Microsite objects in database""" + + # Creating mock to render tenant aware links + self.url = "https://lms-base" + self.org = "test" + + @override_settings( + OPEN_EDX_FILTERS_CONFIG={ + "org.openedx.learning.tenant_aware_link.render.started.v1": { + "fail_silently": False, + "pipeline": [ + "eox_tenant.filters.pipeline.OrgAwareCourseAboutPageURL" + ] + } + }, + LMS_ROOT_URL="https://test-tenant-aware-link" + ) + @mock.patch('eox_tenant.filters.pipeline.configuration_helpers') + def test_tenant_aware_link_from_studio(self, configuration_helpers_mock): + """ + Test that filter tenant aware link get value for org. + """ + results_get_value = "https://test-tenant-aware-link" + + configuration_helpers_mock.get_value_for_org.return_value = results_get_value + + result = OrgAwareCourseAboutPageURL.run_filter( + self, + url=self.url, + org=self.org, + ) + + self.assertEqual(results_get_value, result.get("url")) + self.assertEqual(result.get("org"), self.org) diff --git a/setup.cfg b/setup.cfg index 75b003ba..1968d903 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 11.7.0 +current_version = 11.8.0 commit = False tag = False