1
0
Fork 0
jinjax/tests/test_middleware.py
Daniel Baumann eb42e29864
Adding upstream version 0.45+dfsg.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-05 18:41:31 +01:00

152 lines
4.4 KiB
Python

import typing as t
from pathlib import Path
import jinjax
def application(environ, start_response) -> list[bytes]:
status = "200 OK"
headers = [("Content-type", "text/plain")]
start_response(status, headers)
return [b"NOPE"]
def make_environ(**kw) -> dict[str, t.Any]:
kw.setdefault("PATH_INFO", "/")
kw.setdefault("REQUEST_METHOD", "GET")
return kw
def mock_start_response(status: str, headers: dict[str, t.Any]):
pass
def get_catalog(folder: "str | Path", **kw) -> jinjax.Catalog:
catalog = jinjax.Catalog(**kw)
catalog.add_folder(folder)
return catalog
TMiddleware = t.Callable[
[
dict[str, t.Any],
t.Callable[[str, dict[str, t.Any]], None],
],
t.Any
]
def run_middleware(middleware: TMiddleware, url: str):
return middleware(make_environ(PATH_INFO=url), mock_start_response)
# Tests
def test_css_is_returned(folder):
(folder / "page.css").write_text("/* Page.css */")
catalog = get_catalog(folder)
middleware = catalog.get_middleware(application)
resp = run_middleware(middleware, "/static/components/page.css")
assert resp and not isinstance(resp, list)
text = resp.filelike.read().strip()
assert text == b"/* Page.css */"
def test_js_is_returned(folder):
(folder / "page.js").write_text("/* Page.js */")
catalog = get_catalog(folder)
middleware = catalog.get_middleware(application)
resp = run_middleware(middleware, "/static/components/page.js")
assert resp and not isinstance(resp, list)
text = resp.filelike.read().strip()
assert text == b"/* Page.js */"
def test_other_file_extensions_ignored(folder):
(folder / "Page.jinja").write_text("???")
catalog = get_catalog(folder)
middleware = catalog.get_middleware(application)
resp = run_middleware(middleware, "/static/components/Page.jinja")
assert resp == [b"NOPE"]
def test_add_custom_extensions(folder):
(folder / "Page.jinja").write_text("???")
catalog = get_catalog(folder)
middleware = catalog.get_middleware(application, allowed_ext=[".jinja"])
resp = run_middleware(middleware, "/static/components/Page.jinja")
assert resp and not isinstance(resp, list)
text = resp.filelike.read().strip()
assert text == b"???"
def test_custom_root_url(folder):
(folder / "page.css").write_text("/* Page.css */")
catalog = get_catalog(folder, root_url="/static/co/")
middleware = catalog.get_middleware(application)
resp = run_middleware(middleware, "/static/co/page.css")
assert resp and not isinstance(resp, list)
text = resp.filelike.read().strip()
assert text == b"/* Page.css */"
def test_autorefresh_load(folder):
(folder / "page.css").write_text("/* Page.css */")
catalog = get_catalog(folder)
middleware = catalog.get_middleware(application, autorefresh=True)
resp = run_middleware(middleware, "/static/components/page.css")
assert resp and not isinstance(resp, list)
text = resp.filelike.read().strip()
assert text == b"/* Page.css */"
def test_autorefresh_block(folder):
(folder / "Page.jinja").write_text("???")
catalog = get_catalog(folder)
middleware = catalog.get_middleware(application, autorefresh=True)
resp = run_middleware(middleware, "/static/components/Page.jinja")
assert resp == [b"NOPE"]
def test_multiple_folders(tmp_path):
folder1 = tmp_path / "folder1"
folder1.mkdir()
(folder1 / "folder1.css").write_text("folder1")
folder2 = tmp_path / "folder2"
folder2.mkdir()
(folder2 / "folder2.css").write_text("folder2")
catalog = jinjax.Catalog()
catalog.add_folder(folder1)
catalog.add_folder(folder2)
middleware = catalog.get_middleware(application)
resp = run_middleware(middleware, "/static/components/folder1.css")
assert resp.filelike.read() == b"folder1"
resp = run_middleware(middleware, "/static/components/folder2.css")
assert resp.filelike.read() == b"folder2"
def test_multiple_folders_precedence(tmp_path):
folder1 = tmp_path / "folder1"
folder1.mkdir()
(folder1 / "name.css").write_text("folder1")
folder2 = tmp_path / "folder2"
folder2.mkdir()
(folder2 / "name.css").write_text("folder2")
catalog = jinjax.Catalog()
catalog.add_folder(folder1)
catalog.add_folder(folder2)
middleware = catalog.get_middleware(application)
resp = run_middleware(middleware, "/static/components/name.css")
assert resp.filelike.read() == b"folder1"