From 7a594a9d78956af0529f9ea616b8d1a74256966e Mon Sep 17 00:00:00 2001 From: Jose Ignacio Palma Date: Thu, 18 Jul 2024 19:52:29 -0400 Subject: [PATCH] feat: adds CourseAboutPageURLRequested and LMSPageURLRequested filters --- openedx_filters/authoring/__init__.py | 6 ++++ openedx_filters/authoring/filters.py | 26 +++++++++++++++ openedx_filters/authoring/tests/__init__.py | 3 ++ .../authoring/tests/test_filters.py | 32 +++++++++++++++++++ openedx_filters/learning/filters.py | 20 ++++++++++++ .../learning/tests/test_filters.py | 23 +++++++++++++ 6 files changed, 110 insertions(+) create mode 100644 openedx_filters/authoring/__init__.py create mode 100644 openedx_filters/authoring/filters.py create mode 100644 openedx_filters/authoring/tests/__init__.py create mode 100644 openedx_filters/authoring/tests/test_filters.py diff --git a/openedx_filters/authoring/__init__.py b/openedx_filters/authoring/__init__.py new file mode 100644 index 0000000..bcef1f7 --- /dev/null +++ b/openedx_filters/authoring/__init__.py @@ -0,0 +1,6 @@ +""" +Package where filters related to the authoring subdomain are implemented. + +The authoring subdomain corresponds to {Architecture Subdomain} defined in +the OEP-41. +""" diff --git a/openedx_filters/authoring/filters.py b/openedx_filters/authoring/filters.py new file mode 100644 index 0000000..57ff3c0 --- /dev/null +++ b/openedx_filters/authoring/filters.py @@ -0,0 +1,26 @@ +""" +Package where filters related to the authoring architectural subdomain are implemented. +""" + +from openedx_filters.exceptions import OpenEdxFilterException +from openedx_filters.tooling import OpenEdxPublicFilter + + +class LMSPageURLRequested(OpenEdxPublicFilter): + """ + Custom class used to get lms page url filters and its custom methods. + """ + + filter_type = "org.openedx.authoring.lms.page.url.requested.v1" + + @classmethod + def run_filter(cls, target_url, org): + """ + Execute a filter with the signature specified. + + Arguments: + target_url (str): target url to use. + org (str): Course org filter, this value will be used to filter out the correct lms url configuration. + """ + data = super().run_pipeline(target_url=target_url, org=org) + return data.get("target_url"), data.get("org") diff --git a/openedx_filters/authoring/tests/__init__.py b/openedx_filters/authoring/tests/__init__.py new file mode 100644 index 0000000..deb4697 --- /dev/null +++ b/openedx_filters/authoring/tests/__init__.py @@ -0,0 +1,3 @@ +""" +Package where unittest for authoring subdomain filters are located. +""" diff --git a/openedx_filters/authoring/tests/test_filters.py b/openedx_filters/authoring/tests/test_filters.py new file mode 100644 index 0000000..2337131 --- /dev/null +++ b/openedx_filters/authoring/tests/test_filters.py @@ -0,0 +1,32 @@ +""" +Tests for authoring subdomain filters. +""" +from unittest.mock import Mock + +from ddt import data, ddt, unpack +from django.test import TestCase + +from openedx_filters.authoring.filters import LMSPageURLRequested + + +@ddt +class TestAuthoringFilters(TestCase): + """ + Test class to verify standard behavior of the filters located in rendering views. + You'll find test suites for: + + - LMSPageURLRequested + """ + + def test_lms_page_url_requested(self): + """ + Test LMSPageURLRequested filter behavior under normal conditions. + Expected behavior: + - The filter should return lms page url requested. + """ + target_url = Mock() + org = Mock() + + result = LMSPageURLRequested.run_filter(target_url, org) + + self.assertEqual((target_url, org), result) diff --git a/openedx_filters/learning/filters.py b/openedx_filters/learning/filters.py index dc39b8d..cb2b98e 100644 --- a/openedx_filters/learning/filters.py +++ b/openedx_filters/learning/filters.py @@ -798,3 +798,23 @@ def run_filter(cls, url: str): """ data = super().run_pipeline(url=url) return data.get("url") + + +class CourseAboutPageURLRequested(OpenEdxPublicFilter): + """ + Custom class used to get course about page url filters and its custom methods. + """ + + filter_type = "org.openedx.learning.course_about.page.url.requested.v1" + + @classmethod + def run_filter(cls, target_url, org): + """ + Execute a filter with the specified signature. + + Arguments: + target_url (str): target url to use. + org (str): Course org filter, this value will be used to filter out the correct lms url configuration. + """ + data = super().run_pipeline(target_url=target_url, org=org) + return data.get("target_url"), data.get("org") diff --git a/openedx_filters/learning/tests/test_filters.py b/openedx_filters/learning/tests/test_filters.py index 203728c..89fd9f8 100644 --- a/openedx_filters/learning/tests/test_filters.py +++ b/openedx_filters/learning/tests/test_filters.py @@ -12,6 +12,7 @@ CertificateRenderStarted, CohortAssignmentRequested, CohortChangeRequested, + CourseAboutPageURLRequested, CourseAboutRenderStarted, CourseEnrollmentAPIRenderStarted, CourseEnrollmentQuerysetRequested, @@ -752,3 +753,25 @@ def test_idv_page_url_requested(self): result = IDVPageURLRequested.run_filter(url) self.assertEqual(url, result) + + +class TestCourseAboutPageURLRequested(TestCase): + """ + Test class to verify standard behavior of the ID verification filters. + You'll find test suites for: + + - CourseAboutPageURLRequested + """ + + def test_lms_page_url_requested(self): + """ + Test CourseAboutPageURLRequested filter behavior under normal conditions. + Expected behavior: + - The filter should return lms page url requested. + """ + target_url = Mock() + org = Mock() + + result = CourseAboutPageURLRequested.run_filter(target_url, org) + + self.assertEqual((target_url, org), result)