Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: adds FilterTenantAwareLinksFromStudio in filters pipeline #219

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion eox_tenant/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"""
Init for eox-tenant.
"""
__version__ = '11.7.0'
__version__ = '11.8.0'
10 changes: 8 additions & 2 deletions eox_tenant/filters/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,14 @@ Filters steps list:
-------------------

* `FilterUserCourseEnrollmentsByTenant`_: Filters the course enrollments of a user from the tenant site where the request is made.

.. _FilterUserCourseEnrollmentsByTenant: ./pipeline.py#L9
* `FilterRenderCertificatesByOrg`_: Stop certificate generation process raising a exception if course org is different to tenant orgs.
* `OrgAwareLMSURLStudio`_: Generates a new LMS URL for asset URL generation based on the course organization settings.
* `OrgAwareCourseAboutPageURL`_: Generates a new course about URL based on the course organization settings.

.. _FilterUserCourseEnrollmentsByTenant: ./pipeline.py#L12
.. _FilterRenderCertificatesByOrg: ./pipeline.py#L35
.. _OrgAwareLMSURLStudio: ./pipeline.py#L66
.. _OrgAwareCourseAboutPageURL: ./pipeline#L93

How to add a new Filter Step:
-----------------------------
Expand Down
62 changes: 62 additions & 0 deletions eox_tenant/filters/pipeline.py
Original file line number Diff line number Diff line change
@@ -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):
"""
Expand Down Expand Up @@ -57,3 +61,61 @@ 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):
"""
Generates a new LMS URL for asset URL generation based on the course organization settings.
"""

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):
"""
Generates a new course about URL based on the course organization settings.
"""

def run_filter(self, url, org): # pylint: disable=arguments-differ,unused-argument
"""
The url looks like this:
<LMS_ROOT>/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
)
course_about_url = url.replace(settings.LMS_ROOT_URL, lms_root)
return {"url": course_about_url, "org": org}
86 changes: 85 additions & 1 deletion eox_tenant/filters/test/test_pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down Expand Up @@ -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 OrgAwareLMSURLStudioTestCase(TestCase):
"""
Test OrgAwareLMSURLStudioTestCase that generates a new LMS URL for asset URL generation
based on the course organization settings.
"""

def setUp(self):
"""This method initializes the URL and ORG variables for the pipeline"""

self.url = "https://lms-base"
self.org = "test"

@override_settings(
LMS_ROOT_URL="https://lms-base"
)
@mock.patch('eox_tenant.filters.pipeline.configuration_helpers')
def test_get_lms_url_based_for_org(self, configuration_helpers_mock):
"""
Test that filter get new LMS URL for asset URL generation
based on the course organization settings for org.

Args:
configuration_helpers_mock (patch): mock for configuration_helpers method.

Expected result:
- The url return is equal to expected.
- The org return is equal to expected.
"""
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 OrgAwareCourseAboutPageURLTestCase(TestCase):
"""
Test OrgAwareCourseAboutPageURLTestCase that generates a new course about URL based
on the course organization settings.
"""

def setUp(self):
"""This method initializes the URL and ORG variables for the pipeline"""

self.url = "https://lms-base"
self.org = "test"

@override_settings(
LMS_ROOT_URL="https://lms-base"
)
@mock.patch('eox_tenant.filters.pipeline.configuration_helpers')
def test_get_course_about_url_based_for_org(self, configuration_helpers_mock):
"""
Test that filter get new course about URL based
on the course organization settings for org.

Args:
configuration_helpers_mock (patch): mock for configuration_helpers method.

Expected result:
- The url return is equal to expected.
- The org return is equal to expected.
"""
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)
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[bumpversion]
current_version = 11.7.0
current_version = 11.8.0
commit = False
tag = False

Expand Down
Loading