python-werkzeug/tests/middleware/test_shared_data.py

63 lines
2.0 KiB
Python

import os
from contextlib import closing
from werkzeug.middleware.shared_data import SharedDataMiddleware
from werkzeug.test import create_environ
from werkzeug.test import run_wsgi_app
def test_get_file_loader():
app = SharedDataMiddleware(None, {})
assert callable(app.get_file_loader("foo"))
def test_shared_data_middleware(tmpdir):
def null_application(environ, start_response):
start_response("404 NOT FOUND", [("Content-Type", "text/plain")])
yield b"NOT FOUND"
test_dir = str(tmpdir)
with open(os.path.join(test_dir, "äöü"), "w") as test_file:
test_file.write("FOUND")
for t in [list, dict]:
app = SharedDataMiddleware(
null_application,
t(
[
("/", os.path.join(os.path.dirname(__file__), "..", "res")),
("/sources", os.path.join(os.path.dirname(__file__), "..", "res")),
("/pkg", ("werkzeug.debug", "shared")),
("/foo", test_dir),
]
),
)
for p in "/test.txt", "/sources/test.txt", "/foo/äöü":
app_iter, status, headers = run_wsgi_app(app, create_environ(p))
assert status == "200 OK"
if p.endswith(".txt"):
content_type = next(v for k, v in headers if k == "Content-Type")
assert content_type == "text/plain; charset=utf-8"
with closing(app_iter) as app_iter:
data = b"".join(app_iter).strip()
assert data == b"FOUND"
app_iter, status, headers = run_wsgi_app(
app, create_environ("/pkg/debugger.js")
)
with closing(app_iter) as app_iter:
contents = b"".join(app_iter)
assert b"docReady(() =>" in contents
for path in ("/missing", "/pkg", "/pkg/", "/pkg/missing.txt"):
app_iter, status, headers = run_wsgi_app(app, create_environ(path))
assert status == "404 NOT FOUND"
assert b"".join(app_iter).strip() == b"NOT FOUND"