feat: adds CourseAboutPageURLRequested and LMSPageURLRequested filters (#35142)

This commit is contained in:
José Ignacio Palma
2024-10-21 10:35:00 -04:00
committed by GitHub
parent 8b3befc520
commit 123ad8d82c
4 changed files with 193 additions and 1 deletions

View File

@@ -25,6 +25,7 @@ from common.djangoapps.util.date_utils import get_default_time_display
from common.djangoapps.util.json_request import JsonResponse
from openedx.core.djangoapps.contentserver.caching import del_cached_content
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
from openedx_filters.course_authoring.filters import LMSPageURLRequested
from xmodule.contentstore.content import StaticContent # lint-amnesty, pylint: disable=wrong-import-order
from xmodule.contentstore.django import contentstore # lint-amnesty, pylint: disable=wrong-import-order
from xmodule.exceptions import NotFoundError # lint-amnesty, pylint: disable=wrong-import-order
@@ -714,7 +715,15 @@ def get_asset_json(display_name, content_type, date, location, thumbnail_locatio
Helper method for formatting the asset information to send to client.
'''
asset_url = StaticContent.serialize_asset_key_with_slash(location)
external_url = urljoin(configuration_helpers.get_value('LMS_ROOT_URL', settings.LMS_ROOT_URL), asset_url)
## .. filter_implemented_name: LMSPageURLRequested
## .. filter_type: org.openedx.course_authoring.lms.page.url.requested.v1
lms_root, _ = LMSPageURLRequested.run_filter(
url=configuration_helpers.get_value('LMS_ROOT_URL', settings.LMS_ROOT_URL),
org=location.org,
)
external_url = urljoin(lms_root, asset_url)
portable_url = StaticContent.get_static_path_from_location(location)
usage_locations = [] if usage is None else usage
return {

View File

@@ -0,0 +1,98 @@
"""
Unit tests for the asset upload endpoint.
"""
from datetime import datetime
from urllib.parse import urljoin
from pytz import UTC
from django.test import override_settings
from cms.djangoapps.contentstore import asset_storage_handlers
from opaque_keys.edx.locator import CourseLocator
from openedx_filters import PipelineStep
from xmodule.contentstore.content import StaticContent
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
class TestPageURLRequestedPipelineStep(PipelineStep):
"""
Utility class used when getting steps for pipeline.
"""
def run_filter(self, url, org): # pylint: disable=arguments-differ
"""Pipeline step that modifies lms url creation."""
url = "https://lms-url-creation"
org = "org"
return {
"url": url,
"org": org,
}
class LMSPageURLRequestedFiltersTest(ModuleStoreTestCase):
"""
Tests for the Open edX Filters associated with the lms url requested process.
This class guarantees that the following filters are triggered during the microsite render:
- LMSPageURLRequested
"""
def setUp(self): # pylint: disable=arguments-differ
super().setUp()
self.upload_date = datetime(2013, 6, 1, 10, 30, tzinfo=UTC)
self.content_type = 'image/jpg'
self.course_key = CourseLocator('org', 'class', 'run')
self.location = self.course_key.make_asset_key('asset', 'my_file_name.jpg')
self.thumbnail_location = self.course_key.make_asset_key('thumbnail', 'my_file_name_thumb.jpg')
self.asset_url = StaticContent.serialize_asset_key_with_slash(self.location)
@override_settings(
OPEN_EDX_FILTERS_CONFIG={
"org.openedx.course_authoring.lms.page.url.requested.v1": {
"pipeline": [
"common.djangoapps.util.tests.test_filters.TestPageURLRequestedPipelineStep",
],
"fail_silently": False,
},
},
)
def test_lms_url_requested_filter_executed(self):
"""
Test that filter get new LMS URL for asset URL generation
based on the course organization settings for org.
Expected result:
- LMSPageURLRequested is triggered and executes TestPageURLRequestedPipelineStep.
- The arguments that the receiver gets are the arguments used by the filter.
"""
output = asset_storage_handlers.get_asset_json(
"my_file",
self.content_type,
self.upload_date,
self.location,
self.thumbnail_location,
True,
self.course_key
)
self.assertEqual(output.get('external_url'), urljoin('https://lms-url-creation', self.asset_url))
@override_settings(OPEN_EDX_FILTERS_CONFIG={}, LMS_ROOT_URL="https://lms-base")
def test_lms_url_requested_without_filter_configuration(self):
"""
Test that filter get new LMS URL for asset URL generation
based on LMS_ROOT_URL settings because OPEN_EDX_FILTERS_CONFIG is not set.
Expected result:
- Returns the asset URL with domain base LMS_ROOT_URL.
- The get process ends successfully.
"""
output = asset_storage_handlers.get_asset_json(
"my_file",
self.content_type,
self.upload_date,
self.location,
self.thumbnail_location,
True,
self.course_key
)
self.assertEqual(output.get('external_url'), urljoin('https://lms-base', self.asset_url))