From 6b15157cb0bd54714f02599a5e06af5ccd343ec5 Mon Sep 17 00:00:00 2001 From: Josh Thomas Date: Fri, 4 Oct 2024 14:48:05 -0500 Subject: [PATCH] update and test for `Path` in component dirs in settings (#11) --- src/django_bird/conf.py | 3 ++- tests/conftest.py | 33 +++++++++++++++++++-------------- tests/test_templatetags.py | 23 ++++++++++++++++++++--- 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/src/django_bird/conf.py b/src/django_bird/conf.py index dbcfb86..4a8612b 100644 --- a/src/django_bird/conf.py +++ b/src/django_bird/conf.py @@ -3,6 +3,7 @@ from contextlib import suppress from dataclasses import dataclass from dataclasses import field +from pathlib import Path from typing import Any import django.template @@ -15,7 +16,7 @@ @dataclass class AppSettings: - COMPONENT_DIRS: list[str] = field(default_factory=lambda: ["bird"]) + COMPONENT_DIRS: list[Path | str] = field(default_factory=lambda: ["bird"]) ENABLE_AUTO_CONFIG: bool = True _template_configurator: TemplateConfigurator = field(init=False) diff --git a/tests/conftest.py b/tests/conftest.py index b10f6d3..66ad0e6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -46,26 +46,21 @@ def pytest_configure(config): @pytest.fixture -def template_dirs(tmp_path): +def base_dir(tmp_path): base_dir = tmp_path / "templates" base_dir.mkdir() - bird_template_dir = base_dir / "bird" - bird_template_dir.mkdir() - return { - "base": base_dir, - "bird": bird_template_dir, - } + return base_dir @pytest.fixture(autouse=True) -def override_templates_settings(template_dirs): +def override_templates_settings(base_dir): with override_settings( TEMPLATES=[ settings.TEMPLATES[0] | { "DIRS": [ *settings.TEMPLATES[0]["DIRS"], - template_dirs["base"], + base_dir, ] } ] @@ -74,11 +69,21 @@ def override_templates_settings(template_dirs): @pytest.fixture -def create_bird_template(template_dirs): - def func(name, content, subdir=None): - bird_dir = template_dirs["bird"] - if subdir is not None: - dir = bird_dir / subdir +def create_bird_dir(base_dir): + def func(name): + bird_template_dir = base_dir / name + bird_template_dir.mkdir() + return bird_template_dir + + return func + + +@pytest.fixture +def create_bird_template(create_bird_dir): + def func(name, content, sub_dir=None, bird_dir_name="bird"): + bird_dir = create_bird_dir(bird_dir_name) + if sub_dir is not None: + dir = bird_dir / sub_dir dir.mkdir() else: dir = bird_dir diff --git a/tests/test_templatetags.py b/tests/test_templatetags.py index 0735a6c..11c7fa2 100644 --- a/tests/test_templatetags.py +++ b/tests/test_templatetags.py @@ -7,6 +7,7 @@ from django.template.base import Token from django.template.base import TokenType from django.template.exceptions import TemplateSyntaxError +from django.test import override_settings from django_bird.templatetags.django_bird import BirdNode from django_bird.templatetags.django_bird import do_bird @@ -140,7 +141,7 @@ def test_dynamic_attrs(self, create_bird_template): class TestBirdNode: @pytest.mark.parametrize( - "subdir,filename,component,nodename,expected", + "sub_dir,filename,component,nodename,expected", [ ( None, @@ -180,15 +181,31 @@ class TestBirdNode: ], ) def test_get_template_names( - self, subdir, filename, component, nodename, expected, create_bird_template + self, sub_dir, filename, component, nodename, expected, create_bird_template ): - create_bird_template(name=filename, content=component, subdir=subdir) + create_bird_template(name=filename, content=component, sub_dir=sub_dir) node = BirdNode(name=nodename, attrs=[], nodelist=None) template_names = node.get_template_names() assert any(expected in template_name for template_name in template_names) + @override_settings(DJANGO_BIRD={"COMPONENT_DIRS": ["not_default"]}) + def test_get_template_names_path_component_dirs(self, create_bird_template): + create_bird_template( + name="button", + content="", + bird_dir_name="not_default", + ) + + node = BirdNode(name="button", attrs=[], nodelist=None) + + template_names = node.get_template_names() + + print(f"{template_names=}") + assert all("not_default" in template_name for template_name in template_names) + assert not all("bird" in template_name for template_name in template_names) + class TestSlotsTemplateTag: @pytest.mark.parametrize(