Add support for - and / in component names in middleware.

This commit is contained in:
Emil Stenström 2023-09-03 11:44:40 +02:00
parent dd71c9abb8
commit e0c29e55b7
2 changed files with 32 additions and 10 deletions

View file

@ -13,7 +13,7 @@ JS_DEPENDENCY_PLACEHOLDER = '<script name="JS_PLACEHOLDER"></script>'
SCRIPT_TAG_REGEX = re.compile("<script")
COMPONENT_COMMENT_REGEX = re.compile(rb"<!-- _RENDERED (?P<name>\w+?) -->")
PLACEHOLDER_REGEX = re.compile(
rb"<!-- _RENDERED (?P<name>\w+?) -->"
rb"<!-- _RENDERED (?P<name>[\w\-\/]+?) -->"
rb'|<link name="CSS_PLACEHOLDER">'
rb'|<script name="JS_PLACEHOLDER"></script>'
)

View file

@ -99,15 +99,6 @@ class ComponentMediaRenderingTests(SimpleTestCase):
count=1,
)
def test_preload_js_dependencies_render_when_no_components_used(self):
component.registry.register(name="test", component=SimpleComponent)
template = Template(
"{% load component_tags %}{% component_js_dependencies preload='test' %}"
)
rendered = create_and_process_template_response(template)
self.assertInHTML('<script src="script.js">', rendered, count=1)
def test_preload_css_dependencies_render_when_no_components_used(self):
component.registry.register(name="test", component=SimpleComponent)
@ -136,6 +127,21 @@ class ComponentMediaRenderingTests(SimpleTestCase):
)
self.assertInHTML('<script src="script.js">', rendered, count=1)
def test_single_component_with_dash_or_slash_in_name(self):
component.registry.register(name="test", component=SimpleComponent)
template = Template(
"{% load component_tags %}{% component_dependencies %}"
"{% component 'test' variable='foo' %}"
)
rendered = create_and_process_template_response(template)
self.assertInHTML(
'<link href="style.css" media="all" rel="stylesheet"/>',
rendered,
count=1,
)
self.assertInHTML('<script src="script.js">', rendered, count=1)
def test_preload_dependencies_render_once_when_used(self):
component.registry.register(name="test", component=SimpleComponent)
@ -392,3 +398,19 @@ class ComponentMediaRenderingTests(SimpleTestCase):
)
request = Mock()
self.assertEqual(response, middleware(request=request))
def test_middleware_response_with_components_with_slash_and_dash(self):
component.registry.register(
name="test-component", component=SimpleComponent
)
component.registry.register(
name="test/component", component=SimpleComponent
)
template = Template(
"{% load component_tags %}{% component_js_dependencies %}"
"{% component 'test-component' variable='variable' %}"
"{% component 'test/component' variable='variable' %}"
)
rendered = create_and_process_template_response(template)
self.assertNotIn("_RENDERED", rendered)