Skip to content

Commit eb2dfac

Browse files
refactor other tests to use TestComponent test utils (#92)
1 parent 15d2f42 commit eb2dfac

File tree

4 files changed

+70
-77
lines changed

4 files changed

+70
-77
lines changed

tests/conftest.py

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -146,44 +146,6 @@ class TestComponentCase:
146146
template_context: dict[str, Any] = field(default_factory=dict)
147147

148148

149-
@pytest.fixture
150-
def create_bird_dir(templates_dir):
151-
def func(name):
152-
bird_template_dir = templates_dir / name
153-
bird_template_dir.mkdir(exist_ok=True)
154-
return bird_template_dir
155-
156-
return func
157-
158-
159-
@pytest.fixture
160-
def create_bird_template(create_bird_dir):
161-
def func(name, content, sub_dir=None, bird_dir_name="bird"):
162-
bird_dir = create_bird_dir(bird_dir_name)
163-
if sub_dir is not None:
164-
dir = bird_dir / sub_dir
165-
dir.mkdir()
166-
else:
167-
dir = bird_dir
168-
template = dir / f"{name}.html"
169-
template.write_text(content)
170-
return template
171-
172-
return func
173-
174-
175-
@pytest.fixture
176-
def create_bird_asset():
177-
def func(component_template: Path, content: str, asset_type: str):
178-
component_dir = component_template.parent
179-
component_name = component_template.stem
180-
asset_file = component_dir / f"{component_name}.{asset_type}"
181-
asset_file.write_text(content)
182-
return asset_file
183-
184-
return func
185-
186-
187149
@pytest.fixture
188150
def create_template():
189151
def _create_template(template_file: Path) -> DjangoTemplate:
@@ -192,8 +154,6 @@ def _create_template(template_file: Path) -> DjangoTemplate:
192154
dirs=[str(template_file.parent)],
193155
loaders=["django_bird.loader.BirdLoader"],
194156
)
195-
print(f"Engine dirs: {engine.dirs}") # Debug print
196-
print(f"Looking for template: {template_file.name}") # Debug print
197157
template = engine.get_template(template_file.name)
198158
backend = DjangoTemplates(
199159
{

tests/templatetags/test_asset.py

Lines changed: 60 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
from django_bird.templatetags.tags.asset import JS_TAG
1313
from django_bird.templatetags.tags.asset import AssetNode
1414
from django_bird.templatetags.tags.asset import do_asset
15+
from tests.conftest import TestAsset
16+
from tests.conftest import TestComponent
1517

1618

1719
class TestTemplateTag:
@@ -44,16 +46,28 @@ def test_invalid_tag_name(self, tag):
4446
with pytest.raises(ValueError):
4547
do_asset(parser, token)
4648

47-
def test_template_inheritence(
48-
self, create_bird_template, create_bird_asset, create_template, templates_dir
49-
):
50-
alert = create_bird_template("alert", '<div class="alert">{{ slot }}</div>')
51-
alert_css = create_bird_asset(alert, ".alert { color: red; }", "css")
52-
alert_js = create_bird_asset(alert, "console.log('alert');", "js")
53-
54-
button = create_bird_template("button", "<button>{{ slot }}</button>")
55-
button_css = create_bird_asset(button, ".button { color: blue; }", "css")
56-
button_js = create_bird_asset(button, "console.log('button');", "js")
49+
def test_template_inheritence(self, create_template, templates_dir):
50+
alert = TestComponent(
51+
name="alert", content='<div class="alert">{{ slot }}</div>'
52+
).create(templates_dir)
53+
alert_css = TestAsset(
54+
component=alert, content=".alert { color: red; }", asset_type=AssetType.CSS
55+
).create()
56+
alert_js = TestAsset(
57+
component=alert, content="console.log('alert');", asset_type=AssetType.JS
58+
).create()
59+
60+
button = TestComponent(
61+
name="button", content="<button>{{ slot }}</button>"
62+
).create(templates_dir)
63+
button_css = TestAsset(
64+
component=button,
65+
content=".button { color: blue; }",
66+
asset_type=AssetType.CSS,
67+
).create()
68+
button_js = TestAsset(
69+
component=button, content="console.log('button');", asset_type=AssetType.JS
70+
).create()
5771

5872
base_path = templates_dir / "base.html"
5973
base_path.write_text("""
@@ -82,15 +96,15 @@ def test_template_inheritence(
8296

8397
rendered = template.render({})
8498

85-
assert f'<link rel="stylesheet" href="{alert_css}">' in rendered
86-
assert f'<link rel="stylesheet" href="{button_css}">' in rendered
87-
assert f'<script src="{alert_js}"></script>' in rendered
88-
assert f'<script src="{button_js}"></script>' in rendered
99+
assert f'<link rel="stylesheet" href="{alert_css.file}">' in rendered
100+
assert f'<link rel="stylesheet" href="{button_css.file}">' in rendered
101+
assert f'<script src="{alert_js.file}"></script>' in rendered
102+
assert f'<script src="{button_js.file}"></script>' in rendered
89103

90-
def test_with_no_assets(
91-
self, create_bird_template, create_bird_asset, create_template, templates_dir
92-
):
93-
create_bird_template("alert", '<div class="alert">{{ slot }}</div>')
104+
def test_with_no_assets(self, create_template, templates_dir):
105+
TestComponent(
106+
name="alert", content='<div class="alert">{{ slot }}</div>'
107+
).create(templates_dir)
94108

95109
base_path = templates_dir / "base.html"
96110
base_path.write_text("""
@@ -114,16 +128,28 @@ def test_with_no_assets(
114128
assert '<link rel="stylesheet" href="' not in rendered
115129
assert '<script src="' not in rendered
116130

117-
def test_component_render_order(
118-
self, create_bird_template, create_bird_asset, create_template, templates_dir
119-
):
120-
first = create_bird_template("first", "<div>First: {{ slot }}</div>")
121-
first_css = create_bird_asset(first, ".first { color: red; }", "css")
122-
first_js = create_bird_asset(first, "console.log('first');", "js")
123-
124-
second = create_bird_template("second", "<div>Second: {{ slot }}</div>")
125-
second_css = create_bird_asset(second, ".second { color: red; }", "css")
126-
second_js = create_bird_asset(second, "console.log('second');", "js")
131+
def test_component_render_order(self, create_template, templates_dir):
132+
first = TestComponent(
133+
name="first", content="<div>First: {{ slot }}</div>"
134+
).create(templates_dir)
135+
first_css = TestAsset(
136+
component=first, content=".first { color: red; }", asset_type=AssetType.CSS
137+
).create()
138+
first_js = TestAsset(
139+
component=first, content="console.log('first');", asset_type=AssetType.JS
140+
).create()
141+
142+
second = TestComponent(
143+
name="second", content="<div>Second: {{ slot }}</div>"
144+
).create(templates_dir)
145+
second_css = TestAsset(
146+
component=second,
147+
content=".second { color: red; }",
148+
asset_type=AssetType.CSS,
149+
).create()
150+
second_js = TestAsset(
151+
component=second, content="console.log('second');", asset_type=AssetType.JS
152+
).create()
127153

128154
template_path = templates_dir / "test.html"
129155
template_path.write_text("""
@@ -147,12 +173,14 @@ def test_component_render_order(
147173
rendered = template.render({})
148174

149175
head_end = rendered.find("</head>")
150-
assert f'<link rel="stylesheet" href="{first_css}">' in rendered[:head_end]
151-
assert f'<link rel="stylesheet" href="{second_css}">' in rendered[:head_end]
176+
assert f'<link rel="stylesheet" href="{first_css.file}">' in rendered[:head_end]
177+
assert (
178+
f'<link rel="stylesheet" href="{second_css.file}">' in rendered[:head_end]
179+
)
152180

153181
body_start = rendered.find("<body")
154-
assert f'<script src="{first_js}"></script>' in rendered[body_start:]
155-
assert f'<script src="{second_js}"></script>' in rendered[body_start:]
182+
assert f'<script src="{first_js.file}"></script>' in rendered[body_start:]
183+
assert f'<script src="{second_js.file}"></script>' in rendered[body_start:]
156184

157185

158186
class TestNode:

tests/test_apps.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
from django.apps import apps
44

55
from django_bird.components import components
6+
from tests.conftest import TestComponent
67

78

8-
def test_ready_scans_components(create_bird_template):
9-
create_bird_template("button", "<button>Click me</button>")
10-
create_bird_template("alert", "<div>Alert</div>")
9+
def test_ready_scans_components(templates_dir):
10+
TestComponent(name="button", content="<button>Click me</button>").create(
11+
templates_dir
12+
)
13+
TestComponent(name="alert", content="<div>Alert</div>").create(templates_dir)
1114

1215
components.clear()
1316

tests/test_fixtures.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
import pytest
44
from django.template.loader import get_template
55

6+
from tests.conftest import TestComponent
67

7-
def test_create_bird_template(create_bird_template):
8+
9+
def test_test_component(templates_dir):
810
name = "foo"
911
content = "<div>bar</div>"
1012

11-
create_bird_template(name, content)
13+
TestComponent(name=name, content=content).create(templates_dir)
1214

1315
template = get_template(f"bird/{name}.html")
1416

0 commit comments

Comments
 (0)