import pytest from .fixtures import make_app_client VIEW_NAME_PLUGIN = """ from datasette import hookimpl @hookimpl def extra_template_vars(view_name): return { "view_name": view_name, } """ @pytest.fixture(scope="session") def custom_pages_client(tmp_path_factory): template_dir = tmp_path_factory.mktemp("page-templates") extra_plugins = {"view_name.py": VIEW_NAME_PLUGIN} pages_dir = template_dir / "pages" pages_dir.mkdir() (pages_dir / "about.html").write_text("ABOUT! view_name:{{ view_name }}", "utf-8") (pages_dir / "202.html").write_text("{{ custom_status(202) }}202!", "utf-8") (pages_dir / "headers.html").write_text( '{{ custom_header("x-this-is-foo", "foo") }}FOO' '{{ custom_header("x-this-is-bar", "bar") }}BAR', "utf-8", ) (pages_dir / "atom.html").write_text( '{{ custom_header("content-type", "application/xml") }}', "utf-8", ) (pages_dir / "redirect.html").write_text( '{{ custom_redirect("/example") }}', "utf-8" ) (pages_dir / "redirect2.html").write_text( '{{ custom_redirect("/example", 301) }}', "utf-8" ) nested_dir = pages_dir / "nested" nested_dir.mkdir() (nested_dir / "nest.html").write_text("Nest!", "utf-8") for client in make_app_client( template_dir=str(template_dir), extra_plugins=extra_plugins ): yield client def test_custom_pages_view_name(custom_pages_client): response = custom_pages_client.get("/about") assert 200 == response.status assert "ABOUT! view_name:page" == response.text def test_custom_pages_nested(custom_pages_client): response = custom_pages_client.get("/nested/nest") assert 200 == response.status assert "Nest!" == response.text response = custom_pages_client.get("/nested/nest2") assert 404 == response.status def test_custom_status(custom_pages_client): response = custom_pages_client.get("/202") assert 202 == response.status assert "202!" == response.text def test_custom_headers(custom_pages_client): response = custom_pages_client.get("/headers") assert 200 == response.status assert "foo" == response.headers["x-this-is-foo"] assert "bar" == response.headers["x-this-is-bar"] assert "FOOBAR" == response.text def test_custom_content_type(custom_pages_client): response = custom_pages_client.get("/atom") assert 200 == response.status assert response.headers["content-type"] == "application/xml" assert "" == response.text def test_redirect(custom_pages_client): response = custom_pages_client.get("/redirect", allow_redirects=False) assert 302 == response.status assert "/example" == response.headers["Location"] def test_redirect2(custom_pages_client): response = custom_pages_client.get("/redirect2", allow_redirects=False) assert 301 == response.status assert "/example" == response.headers["Location"]