From a919b648b33a4930d12b268f65f1babcacd0eb32 Mon Sep 17 00:00:00 2001 From: Roman Imankulov Date: Thu, 28 Sep 2023 15:23:03 +0100 Subject: [PATCH] Add support for - and / in component names in middleware - Fix the COMPONENT_COMMENT_REGEX to find component names with special symbols. - Fix the test to catch the error. Follow-up of e0c29e5 and ref: #262 --- django_components/middleware.py | 4 ++-- tests/test_dependency_rendering.py | 33 ++++++++++++++++-------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/django_components/middleware.py b/django_components/middleware.py index dec203d4..7ce173bf 100644 --- a/django_components/middleware.py +++ b/django_components/middleware.py @@ -11,9 +11,9 @@ CSS_DEPENDENCY_PLACEHOLDER = '' JS_DEPENDENCY_PLACEHOLDER = '' SCRIPT_TAG_REGEX = re.compile("\w+?) -->") +COMPONENT_COMMENT_REGEX = re.compile(rb"") PLACEHOLDER_REGEX = re.compile( - rb"" + rb"" rb'|' rb'|' ) diff --git a/tests/test_dependency_rendering.py b/tests/test_dependency_rendering.py index 9c30d3cd..41fa8fe9 100644 --- a/tests/test_dependency_rendering.py +++ b/tests/test_dependency_rendering.py @@ -399,18 +399,21 @@ 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) + def test_middleware_response_with_components_with_slash_dash_and_underscore(self): + component_names = ["test-component", "test/component", "test_component"] + for component_name in component_names: + component.registry.register( + name=component_name, component=SimpleComponent + ) + template = Template( + "{% load component_tags %}" + "{% component_js_dependencies %}" + "{% component_css_dependencies %}" + f"{{% component '{component_name}' variable='value' %}}" + ) + rendered = create_and_process_template_response(template) + self.assertEqual(( + '' + '' + "Variable: value\n" + ), rendered)