datasette/tests/test_internals_response.py
Simon Willison e889403d3b
Upgrade to ruff>=0.16.0 (#2857)
* ruff>=0.16.0

See https://astral.sh/blog/ruff-v0.16.0

* uv run ruff check . --fix --unsafe-fixes

* Ruff fixes by Claude Code Opus 5
2026-07-25 15:47:08 -07:00

80 lines
2.3 KiB
Python

import json
import pytest
from datasette.utils.asgi import Response
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
def test_response_error_single_message():
response = Response.error("Method not allowed", 405)
assert response.status == 405
assert response.content_type == "application/json; charset=utf-8"
assert json.loads(response.body) == {
"ok": False,
"error": "Method not allowed",
"errors": ["Method not allowed"],
"status": 405,
}
def test_response_error_message_list_and_default_status():
response = Response.error(["First problem", "Second problem"])
assert response.status == 400
assert json.loads(response.body) == {
"ok": False,
"error": "First problem; Second problem",
"errors": ["First problem", "Second problem"],
"status": 400,
}