refactor: fix use of URLs in Component.Media (#1064)

This commit is contained in:
Juro Oravec 2025-03-23 09:54:24 +01:00 committed by GitHub
parent 25e99854c0
commit 2472c2ad33
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 51 additions and 2 deletions

View file

@ -414,6 +414,44 @@ class TestComponentMedia:
assertInHTML('<script src="glob/glob_1.js"></script>', rendered)
assertInHTML('<script src="glob/glob_2.js"></script>', rendered)
def test_glob_pattern_does_not_break_urls(self):
class MyComponent(Component):
template = """
{% load component_tags %}
{% component_js_dependencies %}
{% component_css_dependencies %}
"""
class Media:
css = [
"https://cdnjs.cloudflare.com/example/style.min.css",
"http://cdnjs.cloudflare.com/example/style.min.css",
# :// is not a valid URL - will be resolved as static path
"://cdnjs.cloudflare.com/example/style.min.css",
"/path/to/style.css",
]
js = [
"https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.0.2/chart.min.js",
"http://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.0.2/chart.min.js",
# :// is not a valid URL - will be resolved as static path
"://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.0.2/chart.min.js",
"/path/to/script.js",
]
rendered = MyComponent.render()
assertInHTML('<link href="https://cdnjs.cloudflare.com/example/style.min.css" media="all" rel="stylesheet">', rendered)
assertInHTML('<link href="http://cdnjs.cloudflare.com/example/style.min.css" media="all" rel="stylesheet">', rendered)
# `://` is escaped because the path was resolved with Django's `static()`
assertInHTML('<link href="%3A//cdnjs.cloudflare.com/example/style.min.css" media="all" rel="stylesheet">', rendered)
assertInHTML('<link href="/path/to/style.css" media="all" rel="stylesheet">', rendered)
assertInHTML('<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.0.2/chart.min.js"></script>', rendered)
assertInHTML('<script src="http://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.0.2/chart.min.js"></script>', rendered)
# `://` is escaped because the path was resolved with Django's `static()`
assertInHTML('<script src="%3A//cdnjs.cloudflare.com/ajax/libs/Chart.js/3.0.2/chart.min.js"></script>', rendered)
assertInHTML('<script src="/path/to/script.js"></script>', rendered)
@djc_test
class TestMediaPathAsObject: