Skip to content

Commit

Permalink
adjusted cvars dynamic defaults
Browse files Browse the repository at this point in the history
  • Loading branch information
wrabit committed Sep 18, 2024
1 parent 9c3caf7 commit 3827704
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 4 deletions.
7 changes: 3 additions & 4 deletions django_cotton/templatetags/_vars.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,13 @@ def render(self, context):
if cotton_data["stack"]:
current_component = cotton_data["stack"][-1]
attrs = current_component["attrs"]
vars = {}

for key, value in self.var_dict.items():
if key not in attrs.exclude_unprocessable():
if key.startswith(":"):
try:
attrs[key[1:]] = DynamicAttr(value, is_cvar=True).resolve(context)
vars[key[1:]] = DynamicAttr(value, is_cvar=True).resolve(context)
except UnprocessableDynamicAttr:
pass
else:
Expand All @@ -41,11 +42,9 @@ def render(self, context):

# Process cvars without values
for empty_var in self.empty_vars:
# if empty_var in attrs.exclude_unprocessable():

attrs.exclude_from_string_output(empty_var)

with context.push({**attrs.make_attrs_accessible(), "attrs": attrs}):
with context.push({**attrs.make_attrs_accessible(), "attrs": attrs, **vars}):
output = self.nodelist.render(context)

return output
Expand Down
102 changes: 102 additions & 0 deletions django_cotton/tests/test_cvars.py
Original file line number Diff line number Diff line change
Expand Up @@ -240,3 +240,105 @@ def test_class_attrs_dont_come_through_as_lists(self):
with self.settings(ROOT_URLCONF=self.url_conf()):
response = self.client.get("/view/")
self.assertContains(response, "got it")

def test_cvars_with_hyphens_and_underscores(self):
self.create_template(
"cvars_hyphens_underscores_view.html",
"""<c-cvars-hyphens-underscores
overwrite-hyphenated="overwrite-hyphenated"
overwrite_underscored="overwrite_underscored"
/>""",
"view/",
)

self.create_template(
"cotton/cvars_hyphens_underscores.html",
"""
<c-vars
default-hyphenated="default-hyphenated"
default_underscored="default_underscored"
overwrite-hyphenated=".."
overwrite_underscored=".."
/>
default-hyphenated: {{ default_hyphenated }}
default_underscored: {{ default_underscored }}
overwrite-hyphenated: {{ overwrite_hyphenated }}
overwrite_underscored: {{ overwrite_underscored }}
""",
)

with self.settings(ROOT_URLCONF=self.url_conf()):
response = self.client.get("/view/")
self.assertContains(response, "default-hyphenated: default-hyphenated")
self.assertContains(response, "default_underscored: default_underscored")
self.assertContains(response, "overwrite-hyphenated: overwrite-hyphenated")
self.assertContains(response, "overwrite_underscored: overwrite_underscored")

def test_cvars_basics(self):
self.create_template(
"dynamic_cvars_basics_view.html",
"""<c-cvars-basics overwrite="overwrite" real-attribute="real" />""",
"view/",
)

self.create_template(
"cotton/cvars_basics.html",
"""
<c-vars :unprovided="False" overwrite="default" />
attrs: {{ attrs }}
overwrite: {{ overwrite }}
real: {{ real_attribute }}
""",
)

with self.settings(ROOT_URLCONF=self.url_conf()):
response = self.client.get("/view/")
self.assertContains(response, 'attrs: real-attribute="real"')
self.assertContains(response, "overwrite: overwrite")
self.assertContains(response, "real: real")

def test_cvars_dynamic_defaults(self):
self.create_template(
"dynamic_cvars_dynamic_defaults_view.html",
"""<c-dynamic-default-cvars />""",
"view/",
)

self.create_template(
"cotton/dynamic_default_cvars.html",
"""
<c-vars :dynamic_default="False" />
{% if dynamic_default is True %}not{% endif %}
{% if dynamic_default is False %}expected{% endif %}
""",
)

with self.settings(ROOT_URLCONF=self.url_conf()):
response = self.client.get("/view/")
self.assertNotContains(response, "not")
self.assertContains(response, "expected")

def test_overwriting_cvars_dynamic_defaults(self):
self.create_template(
"overwriting_cvars_dynamic_defaults_view.html",
"""<c-dynamic-default-overwrite-cvars :dynamic-default="True" />""",
"view/",
)

self.create_template(
"cotton/dynamic_default_overwrite_cvars.html",
"""
<c-vars :dynamic-default="False" />
{% if dynamic_default is True %}expected{% endif %}
{% if dynamic_default is False %}not{% endif %}
""",
)

with self.settings(ROOT_URLCONF=self.url_conf()):
response = self.client.get("/view/")
self.assertContains(response, "expected")
self.assertNotContains(response, "not")

0 comments on commit 3827704

Please sign in to comment.