File: test_custom_pages.py

package info (click to toggle)
datasette 0.65.2-2
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 4,260 kB
  • sloc: python: 28,661; javascript: 10,089; sh: 71; makefile: 47; ansic: 26
file content (106 lines) | stat: -rw-r--r-- 3,365 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import pathlib
import pytest
from .fixtures import make_app_client

TEST_TEMPLATE_DIRS = str(pathlib.Path(__file__).parent / "test_templates")


@pytest.fixture(scope="session")
def custom_pages_client():
    with make_app_client(template_dir=TEST_TEMPLATE_DIRS) as client:
        yield client


@pytest.fixture(scope="session")
def custom_pages_client_with_base_url():
    with make_app_client(
        template_dir=TEST_TEMPLATE_DIRS, settings={"base_url": "/prefix/"}
    ) as client:
        yield client


def test_custom_pages_view_name(custom_pages_client):
    response = custom_pages_client.get("/about")
    assert response.status == 200
    assert response.text == "ABOUT! view_name:page"


def test_request_is_available(custom_pages_client):
    response = custom_pages_client.get("/request")
    assert response.status == 200
    assert response.text == "path:/request"


def test_custom_pages_with_base_url(custom_pages_client_with_base_url):
    response = custom_pages_client_with_base_url.get("/prefix/request")
    assert response.status == 200
    assert response.text == "path:/prefix/request"


def test_custom_pages_nested(custom_pages_client):
    response = custom_pages_client.get("/nested/nest")
    assert response.status == 200
    assert response.text == "Nest!"
    response = custom_pages_client.get("/nested/nest2")
    assert response.status == 404


def test_custom_status(custom_pages_client):
    response = custom_pages_client.get("/202")
    assert response.status == 202
    assert response.text == "202!"


def test_custom_headers(custom_pages_client):
    response = custom_pages_client.get("/headers")
    assert response.status == 200
    assert response.headers["x-this-is-foo"] == "foo"
    assert response.headers["x-this-is-bar"] == "bar"
    assert response.text == "FOOBAR"


def test_custom_content_type(custom_pages_client):
    response = custom_pages_client.get("/atom")
    assert response.status == 200
    assert response.headers["content-type"] == "application/xml"
    assert response.text == "<?xml ...>"


def test_redirect(custom_pages_client):
    response = custom_pages_client.get("/redirect")
    assert response.status == 302
    assert response.headers["Location"] == "/example"


def test_redirect2(custom_pages_client):
    response = custom_pages_client.get("/redirect2")
    assert response.status == 301
    assert response.headers["Location"] == "/example"


@pytest.mark.parametrize(
    "path,expected",
    [
        ("/route_Sally", "<p>Hello from Sally</p>"),
        ("/topic_python", "Topic page for python"),
        ("/topic_python/info", "Slug: info, Topic: python"),
    ],
)
def test_custom_route_pattern(custom_pages_client, path, expected):
    response = custom_pages_client.get(path)
    assert response.status == 200
    assert response.text.strip() == expected


def test_custom_route_pattern_404(custom_pages_client):
    response = custom_pages_client.get("/route_OhNo")
    assert response.status == 404
    assert "<h1>Error 404</h1>" in response.text
    assert ">Oh no</" in response.text


def test_custom_route_pattern_with_slash_slash_302(custom_pages_client):
    # https://github.com/simonw/datasette/issues/2429
    response = custom_pages_client.get("//example.com/")
    assert response.status == 302
    assert response.headers["location"] == "/example.com"