Adding upstream version 0.45+dfsg.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
b4efa209be
commit
eb42e29864
35 changed files with 4489 additions and 0 deletions
152
tests/test_middleware.py
Normal file
152
tests/test_middleware.py
Normal file
|
@ -0,0 +1,152 @@
|
|||
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"
|
Loading…
Add table
Add a link
Reference in a new issue