diff --git a/tests/test_templatetags_slot_fill.py b/tests/test_templatetags_slot_fill.py
index 9d03c6aa..80f6b0ec 100644
--- a/tests/test_templatetags_slot_fill.py
+++ b/tests/test_templatetags_slot_fill.py
@@ -13,21 +13,17 @@ from .testutils import PARAMETRIZE_CONTEXT_BEHAVIOR, setup_test_config
setup_test_config({"autodiscover": False})
-class SlottedComponent(Component):
- template: types.django_html = """
- {% load component_tags %}
-
- {% slot "header" %}Default header{% endslot %}
- {% slot "main" %}Default main{% endslot %}
- {% slot "footer" %}Default footer{% endslot %}
-
- """
-
-
-class SlottedComponentWithContext(SlottedComponent):
- def get_context_data(self, variable):
- return {"variable": variable}
-
+def _gen_slotted_component():
+ class SlottedComponent(Component):
+ template: types.django_html = """
+ {% load component_tags %}
+
+ {% slot "header" %}Default header{% endslot %}
+ {% slot "main" %}Default main{% endslot %}
+ {% slot "footer" %}Default footer{% endslot %}
+
+ """
+ return SlottedComponent
#######################
# TESTS
@@ -38,7 +34,7 @@ class SlottedComponentWithContext(SlottedComponent):
class TestComponentSlot:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_slotted_template_basic(self, components_settings):
- registry.register(name="test1", component=SlottedComponent)
+ registry.register(name="test1", component=_gen_slotted_component())
@register("test2")
class SimpleComponent(Component):
@@ -145,7 +141,19 @@ class TestComponentSlot:
)
)
def test_slotted_template_with_context_var(self, components_settings, expected):
- registry.register(name="test1", component=SlottedComponentWithContext)
+ @register("test1")
+ class SlottedComponentWithContext(Component):
+ template: types.django_html = """
+ {% load component_tags %}
+
+ {% slot "header" %}Default header{% endslot %}
+ {% slot "main" %}Default main{% endslot %}
+ {% slot "footer" %}Default footer{% endslot %}
+
+ """
+
+ def get_context_data(self, variable):
+ return {"variable": variable}
template_str: types.django_html = """
{% load component_tags %}
@@ -176,7 +184,7 @@ class TestComponentSlot:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_slotted_template_no_slots_filled(self, components_settings):
- registry.register(name="test", component=SlottedComponent)
+ registry.register(name="test", component=_gen_slotted_component())
template_str: types.django_html = """
{% load component_tags %}
@@ -232,7 +240,7 @@ class TestComponentSlot:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_variable_fill_name(self, components_settings):
- registry.register(name="test", component=SlottedComponent)
+ registry.register(name="test", component=_gen_slotted_component())
template_str: types.django_html = """
{% load component_tags %}
{% with slotname="header" %}
@@ -697,7 +705,7 @@ class TestComponentSlotDefault:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_fill_tag_can_occur_within_component_nested_in_implicit_fill(self, components_settings):
- registry.register("slotted", SlottedComponent)
+ registry.register("slotted", _gen_slotted_component())
@register("test_comp")
class ComponentWithDefaultSlot(Component):
@@ -792,7 +800,7 @@ class TestComponentSlotDefault:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_implicit_fill_when_no_slot_marked_default(self, components_settings):
- registry.register("test_comp", SlottedComponent)
+ registry.register("test_comp", _gen_slotted_component())
template_str: types.django_html = """
{% load component_tags %}
{% component 'test_comp' %}
@@ -1052,7 +1060,7 @@ class TestPassthroughSlots:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_passthrough_slots(self, components_settings):
- registry.register("slotted", SlottedComponent)
+ registry.register("slotted", _gen_slotted_component())
@register("test_comp")
class OuterComp(Component):
@@ -1103,7 +1111,7 @@ class TestPassthroughSlots:
# with current implementation. So this tests serves as a documentation of the current behavior.
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_passthrough_slots_unknown_fills_ignored(self, components_settings):
- registry.register("slotted", SlottedComponent)
+ registry.register("slotted", _gen_slotted_component())
@register("test_comp")
class OuterComp(Component):
@@ -1154,34 +1162,36 @@ class TestPassthroughSlots:
# See https://github.com/django-components/django-components/issues/698
@djc_test
class TestNestedSlots:
- class NestedSlots(Component):
- template: types.django_html = """
- {% load component_tags %}
- {% slot 'wrapper' %}
-
- Wrapper Default
- {% slot 'parent1' %}
-
- Parent1 Default
- {% slot 'child1' %}
-
- Child 1 Default
-
- {% endslot %}
-
- {% endslot %}
- {% slot 'parent2' %}
-
- Parent2 Default
-
- {% endslot %}
-
- {% endslot %}
- """
+ def _gen_nested_slots_component(self):
+ class NestedSlots(Component):
+ template: types.django_html = """
+ {% load component_tags %}
+ {% slot 'wrapper' %}
+
+ Wrapper Default
+ {% slot 'parent1' %}
+
+ Parent1 Default
+ {% slot 'child1' %}
+
+ Child 1 Default
+
+ {% endslot %}
+
+ {% endslot %}
+ {% slot 'parent2' %}
+
+ Parent2 Default
+
+ {% endslot %}
+
+ {% endslot %}
+ """
+ return NestedSlots
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_empty(self, components_settings):
- registry.register("example", self.NestedSlots)
+ registry.register("example", self._gen_nested_slots_component())
template_str: types.django_html = """
{% load component_tags %}
{% component 'example' %}
@@ -1207,7 +1217,7 @@ class TestNestedSlots:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_override_outer(self, components_settings):
- registry.register("example", self.NestedSlots)
+ registry.register("example", self._gen_nested_slots_component())
template_str: types.django_html = """
{% load component_tags %}
{% component 'example' %}
@@ -1229,7 +1239,7 @@ class TestNestedSlots:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_override_middle(self, components_settings):
- registry.register("example", self.NestedSlots)
+ registry.register("example", self._gen_nested_slots_component())
template_str: types.django_html = """
{% load component_tags %}
{% component 'example' %}
@@ -1257,7 +1267,7 @@ class TestNestedSlots:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_override_inner(self, components_settings):
- registry.register("example", self.NestedSlots)
+ registry.register("example", self._gen_nested_slots_component())
template_str: types.django_html = """
{% load component_tags %}
{% component 'example' %}
@@ -1288,7 +1298,7 @@ class TestNestedSlots:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_override_all(self, components_settings):
- registry.register("example", self.NestedSlots)
+ registry.register("example", self._gen_nested_slots_component())
template_str: types.django_html = """
{% load component_tags %}
{% component 'example' %}
@@ -1358,7 +1368,7 @@ class TestSlottedTemplateRegression:
class TestSlotDefault:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_basic(self, components_settings):
- registry.register("test", SlottedComponent)
+ registry.register("test", _gen_slotted_component())
template_str: types.django_html = """
{% load component_tags %}
{% component "test" %}
@@ -1383,7 +1393,7 @@ class TestSlotDefault:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_multiple_calls(self, components_settings):
- registry.register("test", SlottedComponent)
+ registry.register("test", _gen_slotted_component())
template_str: types.django_html = """
{% load component_tags %}
{% component "test" %}
@@ -1409,7 +1419,7 @@ class TestSlotDefault:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_under_if_and_forloop(self, components_settings):
- registry.register("test", SlottedComponent)
+ registry.register("test", _gen_slotted_component())
template_str: types.django_html = """
{% load component_tags %}
{% component "test" %}
@@ -1440,7 +1450,7 @@ class TestSlotDefault:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_nested_fills(self, components_settings):
- registry.register("test", SlottedComponent)
+ registry.register("test", _gen_slotted_component())
template_str: types.django_html = """
{% load component_tags %}
{% component "test" %}
@@ -1954,61 +1964,67 @@ class TestScopedSlot:
@djc_test
class TestDuplicateSlot:
- class DuplicateSlotComponent(Component):
- template: types.django_html = """
- {% load component_tags %}
- {% slot "header" %}Default header{% endslot %}
- {# Slot name 'header' used twice. #}
- {% slot "header" %}Default main header{% endslot %}
- {% slot "footer" %}Default footer{% endslot %}
- """
+ def _gen_duplicate_slot_component(self):
+ class DuplicateSlotComponent(Component):
+ template: types.django_html = """
+ {% load component_tags %}
+ {% slot "header" %}Default header{% endslot %}
+ {# Slot name 'header' used twice. #}
+ {% slot "header" %}Default main header{% endslot %}
+ {% slot "footer" %}Default footer{% endslot %}
+ """
- def get_context_data(self, name: Optional[str] = None) -> Dict[str, Any]:
- return {
- "name": name,
- }
+ def get_context_data(self, name: Optional[str] = None) -> Dict[str, Any]:
+ return {
+ "name": name,
+ }
+ return DuplicateSlotComponent
- class DuplicateSlotNestedComponent(Component):
- template: types.django_html = """
- {% load component_tags %}
- {% slot "header" %}START{% endslot %}
-
- {% component "calendar" date="2020-06-06" %}
- {% fill "header" %} {# fills and slots with same name relate to diff. things. #}
- {% slot "header" %}NESTED{% endslot %}
- {% endfill %}
- {% fill "body" %}Here are your to-do items for today:{% endfill %}
- {% endcomponent %}
-
- {% for item in items %}
- {{ item }}
- {% slot "header" %}LOOP {{ item }} {% endslot %}
- {% endfor %}
-
-
- """
+ def _gen_duplicate_slot_nested_component(self):
+ class DuplicateSlotNestedComponent(Component):
+ template: types.django_html = """
+ {% load component_tags %}
+ {% slot "header" %}START{% endslot %}
+
+ {% component "calendar" date="2020-06-06" %}
+ {% fill "header" %} {# fills and slots with same name relate to diff. things. #}
+ {% slot "header" %}NESTED{% endslot %}
+ {% endfill %}
+ {% fill "body" %}Here are your to-do items for today:{% endfill %}
+ {% endcomponent %}
+
+ {% for item in items %}
+ {{ item }}
+ {% slot "header" %}LOOP {{ item }} {% endslot %}
+ {% endfor %}
+
+
+ """
- def get_context_data(self, items: List) -> Dict[str, Any]:
- return {
- "items": items,
- }
+ def get_context_data(self, items: List) -> Dict[str, Any]:
+ return {
+ "items": items,
+ }
+ return DuplicateSlotNestedComponent
- class CalendarComponent(Component):
- """Nested in ComponentWithNestedComponent"""
+ def _gen_calendar_component(self):
+ class CalendarComponent(Component):
+ """Nested in ComponentWithNestedComponent"""
- template: types.django_html = """
- {% load component_tags %}
-
-
- {% slot "header" %}Today's date is {{ date }} {% endslot %}
-
-
- {% slot "body" %}
- You have no events today.
- {% endslot %}
-
-
- """
+ template: types.django_html = """
+ {% load component_tags %}
+
+
+ {% slot "header" %}Today's date is {{ date }} {% endslot %}
+
+
+ {% slot "body" %}
+ You have no events today.
+ {% endslot %}
+
+
+ """
+ return CalendarComponent
# NOTE: Second arg is the input for the "name" component kwarg
@djc_test(
@@ -2024,8 +2040,8 @@ class TestDuplicateSlot:
)
)
def test_duplicate_slots(self, components_settings, input):
- registry.register(name="duplicate_slot", component=self.DuplicateSlotComponent)
- registry.register(name="calendar", component=self.CalendarComponent)
+ registry.register(name="duplicate_slot", component=self._gen_duplicate_slot_component())
+ registry.register(name="calendar", component=self._gen_calendar_component())
template_str: types.django_html = """
{% load component_tags %}
@@ -2052,8 +2068,8 @@ class TestDuplicateSlot:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_duplicate_slots_fallback(self, components_settings):
- registry.register(name="duplicate_slot", component=self.DuplicateSlotComponent)
- registry.register(name="calendar", component=self.CalendarComponent)
+ registry.register(name="duplicate_slot", component=self._gen_duplicate_slot_component())
+ registry.register(name="calendar", component=self._gen_calendar_component())
template_str: types.django_html = """
{% load component_tags %}
@@ -2075,8 +2091,8 @@ class TestDuplicateSlot:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_duplicate_slots_nested(self, components_settings):
- registry.register(name="duplicate_slot_nested", component=self.DuplicateSlotNestedComponent)
- registry.register(name="calendar", component=self.CalendarComponent)
+ registry.register(name="duplicate_slot_nested", component=self._gen_duplicate_slot_nested_component())
+ registry.register(name="calendar", component=self._gen_calendar_component())
template_str: types.django_html = """
{% load component_tags %}
@@ -2118,8 +2134,8 @@ class TestDuplicateSlot:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_duplicate_slots_nested_fallback(self, components_settings):
- registry.register(name="duplicate_slot_nested", component=self.DuplicateSlotNestedComponent)
- registry.register(name="calendar", component=self.CalendarComponent)
+ registry.register(name="duplicate_slot_nested", component=self._gen_duplicate_slot_nested_component())
+ registry.register(name="calendar", component=self._gen_calendar_component())
template_str: types.django_html = """
{% load component_tags %}
@@ -2173,7 +2189,7 @@ class TestSlotFillTemplateSyntaxError:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_non_unique_fill_names_is_error(self, components_settings):
- registry.register("test", SlottedComponent)
+ registry.register("test", _gen_slotted_component())
with pytest.raises(
TemplateSyntaxError,
match=re.escape(
@@ -2192,7 +2208,7 @@ class TestSlotFillTemplateSyntaxError:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_non_unique_fill_names_is_error_via_vars(self, components_settings):
- registry.register("test", SlottedComponent)
+ registry.register("test", _gen_slotted_component())
with pytest.raises(
TemplateSyntaxError,
match=re.escape(
diff --git a/tests/test_templatetags_templating.py b/tests/test_templatetags_templating.py
index 44c64a2e..023bd01e 100644
--- a/tests/test_templatetags_templating.py
+++ b/tests/test_templatetags_templating.py
@@ -13,41 +13,23 @@ from .testutils import PARAMETRIZE_CONTEXT_BEHAVIOR, setup_test_config
setup_test_config({"autodiscover": False})
-class SlottedComponent(Component):
- template: types.django_html = """
- {% load component_tags %}
-
- {% slot "header" %}Default header{% endslot %}
- {% slot "main" %}Default main{% endslot %}
- {% slot "footer" %}Default footer{% endslot %}
-
- """
-
-
-class SlottedComponentWithContext(SlottedComponent):
- def get_context_data(self, variable):
- return {"variable": variable}
-
-
-#######################
-# TESTS
-#######################
-
-
@djc_test
class TestNestedSlot:
- class NestedComponent(Component):
- template: types.django_html = """
- {% load component_tags %}
- {% slot 'outer' %}
- {% slot 'inner' %}Default{% endslot %}
- {% endslot %}
- """
+ def _get_nested_component(self):
+ class NestedComponent(Component):
+ template: types.django_html = """
+ {% load component_tags %}
+ {% slot 'outer' %}
+ {% slot 'inner' %}Default{% endslot %}
+ {% endslot %}
+ """
+
+ return NestedComponent
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_default_slot_contents_render_correctly(self, components_settings):
registry.clear()
- registry.register("test", self.NestedComponent)
+ registry.register("test", self._get_nested_component())
template_str: types.django_html = """
{% load component_tags %}
{% component 'test' %}{% endcomponent %}
@@ -59,7 +41,7 @@ class TestNestedSlot:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_inner_slot_overriden(self, components_settings):
registry.clear()
- registry.register("test", self.NestedComponent)
+ registry.register("test", self._get_nested_component())
template_str: types.django_html = """
{% load component_tags %}
{% component 'test' %}
@@ -73,7 +55,7 @@ class TestNestedSlot:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_outer_slot_overriden(self, components_settings):
registry.clear()
- registry.register("test", self.NestedComponent)
+ registry.register("test", self._get_nested_component())
template_str: types.django_html = """
{% load component_tags %}
{% component 'test' %}{% fill 'outer' %}Override
{% endfill %}{% endcomponent %}
@@ -85,7 +67,7 @@ class TestNestedSlot:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_both_overriden_and_inner_removed(self, components_settings):
registry.clear()
- registry.register("test", self.NestedComponent)
+ registry.register("test", self._get_nested_component())
template_str: types.django_html = """
{% load component_tags %}
{% component 'test' %}
@@ -175,22 +157,25 @@ class TestNestedSlot:
# as provided by {% if %} tags was previously provided by this library.
@djc_test
class TestConditionalSlot:
- class ConditionalComponent(Component):
- template: types.django_html = """
- {% load component_tags %}
- {% if branch == 'a' %}
- {% slot 'a' %}Default A{% endslot %}
- {% elif branch == 'b' %}
- {% slot 'b' %}Default B{% endslot %}
- {% endif %}
- """
+ def _get_conditional_component(self):
+ class ConditionalComponent(Component):
+ template: types.django_html = """
+ {% load component_tags %}
+ {% if branch == 'a' %}
+ {% slot 'a' %}Default A{% endslot %}
+ {% elif branch == 'b' %}
+ {% slot 'b' %}Default B{% endslot %}
+ {% endif %}
+ """
- def get_context_data(self, branch=None):
- return {"branch": branch}
+ def get_context_data(self, branch=None):
+ return {"branch": branch}
+
+ return ConditionalComponent
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_no_content_if_branches_are_false(self, components_settings):
- registry.register("test", self.ConditionalComponent)
+ registry.register("test", self._get_conditional_component())
template_str: types.django_html = """
{% load component_tags %}
{% component 'test' %}
@@ -204,7 +189,7 @@ class TestConditionalSlot:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_default_content_if_no_slots(self, components_settings):
- registry.register("test", self.ConditionalComponent)
+ registry.register("test", self._get_conditional_component())
template_str: types.django_html = """
{% load component_tags %}
{% component 'test' branch='a' %}{% endcomponent %}
@@ -222,7 +207,7 @@ class TestConditionalSlot:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_one_slot_overridden(self, components_settings):
- registry.register("test", self.ConditionalComponent)
+ registry.register("test", self._get_conditional_component())
template_str: types.django_html = """
{% load component_tags %}
{% component 'test' branch='a' %}
@@ -244,7 +229,7 @@ class TestConditionalSlot:
@djc_test(parametrize=PARAMETRIZE_CONTEXT_BEHAVIOR)
def test_both_slots_overridden(self, components_settings):
- registry.register("test", self.ConditionalComponent)
+ registry.register("test", self._get_conditional_component())
template_str: types.django_html = """
{% load component_tags %}
{% component 'test' branch='a' %}
@@ -271,20 +256,23 @@ class TestConditionalSlot:
class TestSlotIteration:
"""Tests a behaviour of {% fill .. %} tag which is inside a template {% for .. %} loop."""
- class ComponentSimpleSlotInALoop(Component):
- template: types.django_html = """
- {% load component_tags %}
- {% for object in objects %}
- {% slot 'slot_inner' %}
- {{ object }} default
- {% endslot %}
- {% endfor %}
- """
+ def _get_component_simple_slot_in_a_loop(self):
+ class ComponentSimpleSlotInALoop(Component):
+ template: types.django_html = """
+ {% load component_tags %}
+ {% for object in objects %}
+ {% slot 'slot_inner' %}
+ {{ object }} default
+ {% endslot %}
+ {% endfor %}
+ """
- def get_context_data(self, objects, *args, **kwargs) -> dict:
- return {
- "objects": objects,
- }
+ def get_context_data(self, objects, *args, **kwargs) -> dict:
+ return {
+ "objects": objects,
+ }
+
+ return ComponentSimpleSlotInALoop
# NOTE: Second arg in tuple is expected result. In isolated mode, loops should NOT leak.
@djc_test(
@@ -298,7 +286,7 @@ class TestSlotIteration:
)
)
def test_inner_slot_iteration_basic(self, components_settings, expected):
- registry.register("slot_in_a_loop", self.ComponentSimpleSlotInALoop)
+ registry.register("slot_in_a_loop", self._get_component_simple_slot_in_a_loop())
template_str: types.django_html = """
{% load component_tags %}
@@ -327,7 +315,7 @@ class TestSlotIteration:
)
)
def test_inner_slot_iteration_with_variable_from_outer_scope(self, components_settings, expected):
- registry.register("slot_in_a_loop", self.ComponentSimpleSlotInALoop)
+ registry.register("slot_in_a_loop", self._get_component_simple_slot_in_a_loop())
template_str: types.django_html = """
{% load component_tags %}
@@ -363,7 +351,7 @@ class TestSlotIteration:
)
)
def test_inner_slot_iteration_nested(self, components_settings, expected):
- registry.register("slot_in_a_loop", self.ComponentSimpleSlotInALoop)
+ registry.register("slot_in_a_loop", self._get_component_simple_slot_in_a_loop())
objects = [
{"inner": ["ITER1_OBJ1", "ITER1_OBJ2"]},
@@ -414,7 +402,7 @@ class TestSlotIteration:
)
)
def test_inner_slot_iteration_nested_with_outer_scope_variable(self, components_settings, expected):
- registry.register("slot_in_a_loop", self.ComponentSimpleSlotInALoop)
+ registry.register("slot_in_a_loop", self._get_component_simple_slot_in_a_loop())
objects = [
{"inner": ["ITER1_OBJ1", "ITER1_OBJ2"]},
@@ -460,7 +448,7 @@ class TestSlotIteration:
)
)
def test_inner_slot_iteration_nested_with_slot_default(self, components_settings, expected):
- registry.register("slot_in_a_loop", self.ComponentSimpleSlotInALoop)
+ registry.register("slot_in_a_loop", self._get_component_simple_slot_in_a_loop())
objects = [
{"inner": ["ITER1_OBJ1", "ITER1_OBJ2"]},
@@ -517,7 +505,7 @@ class TestSlotIteration:
components_settings,
expected,
):
- registry.register("slot_in_a_loop", self.ComponentSimpleSlotInALoop)
+ registry.register("slot_in_a_loop", self._get_component_simple_slot_in_a_loop())
objects = [
{"inner": ["ITER1_OBJ1", "ITER1_OBJ2"]},
@@ -554,7 +542,7 @@ class TestSlotIteration:
def test_inner_slot_iteration_nested_with_slot_default_and_outer_scope_variable__isolated_2(
self,
):
- registry.register("slot_in_a_loop", self.ComponentSimpleSlotInALoop)
+ registry.register("slot_in_a_loop", self._get_component_simple_slot_in_a_loop())
objects = [
{"inner": ["ITER1_OBJ1", "ITER1_OBJ2"]},
@@ -608,40 +596,44 @@ class TestSlotIteration:
@djc_test
class TestComponentNesting:
- class CalendarComponent(Component):
- """Nested in ComponentWithNestedComponent"""
+ def _get_calendar_component(self):
+ class CalendarComponent(Component):
+ """Nested in ComponentWithNestedComponent"""
- template: types.django_html = """
- {% load component_tags %}
-
-
- {% slot "header" %}Today's date is {{ date }} {% endslot %}
-
-
- {% slot "body" %}
- You have no events today.
- {% endslot %}
-
-
- """
+ template: types.django_html = """
+ {% load component_tags %}
+
+
+ {% slot "header" %}Today's date is {{ date }} {% endslot %}
+
+
+ {% slot "body" %}
+ You have no events today.
+ {% endslot %}
+
+
+ """
+ return CalendarComponent
- class DashboardComponent(Component):
- template: types.django_html = """
- {% load component_tags %}
-
- {% component "calendar" date="2020-06-06" %}
- {% fill "header" %} {# fills and slots with same name relate to diff. things. #}
- {% slot "header" %}Welcome to your dashboard!{% endslot %}
- {% endfill %}
- {% fill "body" %}Here are your to-do items for today:{% endfill %}
- {% endcomponent %}
-
- {% for item in items %}
- {{ item }}
- {% endfor %}
-
-
- """
+ def _get_dashboard_component(self):
+ class DashboardComponent(Component):
+ template: types.django_html = """
+ {% load component_tags %}
+
+ {% component "calendar" date="2020-06-06" %}
+ {% fill "header" %} {# fills and slots with same name relate to diff. things. #}
+ {% slot "header" %}Welcome to your dashboard!{% endslot %}
+ {% endfill %}
+ {% fill "body" %}Here are your to-do items for today:{% endfill %}
+ {% endcomponent %}
+
+ {% for item in items %}
+ {{ item }}
+ {% endfor %}
+
+
+ """
+ return DashboardComponent
# NOTE: Second arg in tuple are expected names in nested fills. In "django" mode,
# the value should be overridden by the component, while in "isolated" it should
@@ -657,8 +649,8 @@ class TestComponentNesting:
)
)
def test_component_inside_slot(self, components_settings, first_name, second_name):
- registry.register("dashboard", self.DashboardComponent)
- registry.register("calendar", self.CalendarComponent)
+ registry.register("dashboard", self._get_dashboard_component())
+ registry.register("calendar", self._get_calendar_component())
class SlottedComponent(Component):
template: types.django_html = """
@@ -730,8 +722,8 @@ class TestComponentNesting:
)
)
def test_component_nesting_component_without_fill(self, components_settings, expected):
- registry.register("dashboard", self.DashboardComponent)
- registry.register("calendar", self.CalendarComponent)
+ registry.register("dashboard", self._get_dashboard_component())
+ registry.register("calendar", self._get_calendar_component())
template_str: types.django_html = """
{% load component_tags %}
@@ -768,8 +760,8 @@ class TestComponentNesting:
)
)
def test_component_nesting_slot_inside_component_fill(self, components_settings, expected):
- registry.register("dashboard", self.DashboardComponent)
- registry.register("calendar", self.CalendarComponent)
+ registry.register("dashboard", self._get_dashboard_component())
+ registry.register("calendar", self._get_calendar_component())
template_str: types.django_html = """
{% load component_tags %}
@@ -970,8 +962,8 @@ class TestComponentNesting:
)
)
def test_component_nesting_component_with_slot_default(self, components_settings, expected):
- registry.register("dashboard", self.DashboardComponent)
- registry.register("calendar", self.CalendarComponent)
+ registry.register("dashboard", self._get_dashboard_component())
+ registry.register("calendar", self._get_calendar_component())
template_str: types.django_html = """
{% load component_tags %}