datasette/tests/test_internals_response.py

55 wiersze
1.5 KiB
Python

from datasette.utils.asgi import Response
import pytest
def test_response_html():
response = Response.html("Hello from HTML")
assert 200 == response.status
assert "Hello from HTML" == response.body
assert "text/html; charset=utf-8" == response.content_type
def test_response_text():
response = Response.text("Hello from text")
assert 200 == response.status
assert "Hello from text" == response.body
assert "text/plain; charset=utf-8" == response.content_type
def test_response_json():
response = Response.json({"this_is": "json"})
assert 200 == response.status
assert '{"this_is": "json"}' == response.body
assert "application/json; charset=utf-8" == response.content_type
def test_response_redirect():
response = Response.redirect("/foo")
assert 302 == response.status
assert "/foo" == response.headers["Location"]
@pytest.mark.asyncio
async def test_response_set_cookie():
events = []
async def send(event):
events.append(event)
response = Response.redirect("/foo")
response.set_cookie("foo", "bar", max_age=10, httponly=True)
await response.asgi_send(send)
assert [
{
"type": "http.response.start",
"status": 302,
"headers": [
[b"Location", b"/foo"],
[b"content-type", b"text/plain"],
[b"set-cookie", b"foo=bar; HttpOnly; Max-Age=10; Path=/; SameSite=lax"],
],
},
{"type": "http.response.body", "body": b""},
] == events