Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pattern_library/templates/pattern_library/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<head>
<meta charset="UTF-8">
<title>Django pattern library</title>
<title>{% block title %}{% if pattern_name %}{{ pattern_name }} | {% endif %}Django pattern library{% endblock %}</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>♻️</text></svg>"/>
<script type="text/javascript" src="{% static 'pattern_library/dist/bundle.js' %}"></script>
Expand Down
7 changes: 7 additions & 0 deletions pattern_library/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,13 @@ def get(self, request, pattern_template_name=None):
if pattern_is_fragment:
context = self.get_context_data()
context["pattern_library_rendered_pattern"] = mark_safe(rendered_pattern)

# Add the pattern config to the context, so that name is available
# in the base template.
pattern_config = get_pattern_config(pattern_template_name)
context["pattern_config"] = pattern_config
context["pattern_name"] = pattern_config.get("name", "")

return self.render_to_response(context)

return HttpResponse(rendered_pattern)
Expand Down
2 changes: 1 addition & 1 deletion tests/templates/patterns/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<html lang="en-GB">
<head>
<meta charset="utf-8" />
<title>{% block title %}Fragment{% endblock %}</title>
<title>{% block title %}{% if pattern_name %}{{ pattern_name }} | {% endif %}Django pattern library{% endblock %}</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />

<link rel="stylesheet" href="{% static 'main.css' %}">
Expand Down
51 changes: 45 additions & 6 deletions tests/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,11 +113,21 @@ def test_page(self):
self.assertContains(response, "<title>Page</title>")

def test_fragments(self):
for template_name in [
"patterns/atoms/test_atom/test_atom.html",
"patterns/molecules/test_molecule/test_molecule.html",
"patterns/molecules/test-molecule/test-molecule.html",
]:
test_cases = [
(
"patterns/atoms/test_atom/test_atom.html",
"<title>Django pattern library</title>",
),
(
"patterns/molecules/test_molecule/test_molecule.html",
"<title>Pretty name for test molecule | Django pattern library</title>",
),
(
"patterns/molecules/test-molecule/test-molecule.html",
"<title>Django pattern library</title>",
),
]
for template_name, expected_title in test_cases:
with self.subTest(template_name=template_name):
self.assertContains(
self.client.get(
Expand All @@ -126,7 +136,7 @@ def test_fragments(self):
kwargs={"pattern_template_name": template_name},
),
),
"<title>Fragment</title>",
expected_title,
)

def test_fragment_extended_from_variable(self):
Expand All @@ -142,6 +152,35 @@ def test_fragment_extended_from_variable(self):
"base content - extended content",
)

def test_pattern_name_in_context(self):
"""Test that pattern_name and pattern_config are added to context for fragments"""
# Test pattern with custom name from YAML
response = self.client.get(
reverse(
"pattern_library:render_pattern",
kwargs={
"pattern_template_name": "patterns/molecules/test_molecule/test_molecule.html"
},
)
)
self.assertEqual(response.status_code, 200)
self.assertContains(
response,
"<title>Pretty name for test molecule | Django pattern library</title>",
)

# Test pattern without custom name (should have empty pattern_name)
response = self.client.get(
reverse(
"pattern_library:render_pattern",
kwargs={
"pattern_template_name": "patterns/atoms/test_atom/test_atom.html"
},
)
)
self.assertEqual(response.status_code, 200)
self.assertContains(response, "<title>Django pattern library</title>")


class APIViewsTestCase(SimpleTestCase):
def test_renders_with_tag_overrides(self):
Expand Down