29 lines
979 B
Python
29 lines
979 B
Python
import pytest
|
|
from fastapi.testclient import TestClient
|
|
|
|
|
|
def test_generic_query_select(client: TestClient):
|
|
payload = {
|
|
"query": "SELECT count(*) AS cnt FROM v_sleep WHERE subject = 'mila'"
|
|
}
|
|
resp = client.post("/duckdb-api/v1/query", json=payload)
|
|
assert resp.status_code == 200
|
|
data = resp.json()
|
|
assert "rows" in data
|
|
assert len(data["rows"]) == 1
|
|
assert data["rows"][0]["cnt"] > 0
|
|
assert data["execution_time_ms"] < 50.0 # verifies sub-50ms execution
|
|
|
|
|
|
def test_generic_query_disallowed_drop(client: TestClient):
|
|
payload = {"query": "DROP TABLE sleep;"}
|
|
resp = client.post("/duckdb-api/v1/query", json=payload)
|
|
assert resp.status_code == 400
|
|
assert "not permitted" in resp.json()["detail"]
|
|
|
|
|
|
def test_generic_query_disallowed_insert(client: TestClient):
|
|
payload = {"query": "INSERT INTO sleep VALUES ('x', 'y')"}
|
|
resp = client.post("/duckdb-api/v1/query", json=payload)
|
|
assert resp.status_code == 400
|