Files
devplacepy/tests/api/admin/gateway/index.py
T

98 lines
2.9 KiB
Python
Raw Normal View History

# retoor <retoor@molodetz.nl>
import time
import requests
from devplacepy.database import get_table, refresh_snapshot
from tests.conftest import BASE_URL
JSON_gateway = {"Accept": "application/json"}
_counter_gateway = [0]
def _db_user_gateway(name):
refresh_snapshot()
return get_table("users").find_one(username=name)
def _unique_gateway(prefix="gw"):
_counter_gateway[0] += 1
return f"{prefix}{int(time.time() * 1000)}{_counter_gateway[0]}"
def admin_session(seeded_db):
session = requests.Session()
session.headers.update(
{"X-API-KEY": _db_user_gateway("alice_test")["api_key"], **JSON_gateway}
)
return session
def member_key():
name = _unique_gateway("gwmem")
requests.post(
f"{BASE_URL}/auth/signup",
data={
"username": name,
"email": f"{name}@t.dev",
"password": "secret123",
"confirm_password": "secret123",
"birth_date": "1990-01-01",
"accept_terms": "1",
},
allow_redirects=True,
)
return _db_user_gateway(name)["api_key"]
def test_gateway_page_requires_admin(seeded_db):
assert (
requests.get(
f"{BASE_URL}/admin/gateway", headers=JSON_gateway, allow_redirects=False
).status_code
== 401
)
key = member_key()
assert (
requests.get(
f"{BASE_URL}/admin/gateway",
headers={**JSON_gateway, "X-API-KEY": key},
allow_redirects=False,
).status_code
== 403
)
def test_gateway_page_renders_for_admin(seeded_db):
admin = admin_session(seeded_db)
response = admin.get(f"{BASE_URL}/admin/gateway", headers={"Accept": "text/html"})
assert response.status_code == 200
assert "Gateway routing" in response.text
def test_gateway_page_tabs_default_and_select_content(seeded_db):
admin = admin_session(seeded_db)
default_page = admin.get(f"{BASE_URL}/admin/gateway", headers={"Accept": "text/html"})
assert "Model routes" in default_page.text
assert "GatewayAdmin" not in default_page.text
providers_page = admin.get(f"{BASE_URL}/admin/gateway?tab=providers", headers={"Accept": "text/html"})
assert "Providers" in providers_page.text
assert "Model routes" not in providers_page.text
quota_page = admin.get(f"{BASE_URL}/admin/gateway?tab=quota", headers={"Accept": "text/html"})
assert "Quota rules" in quota_page.text
assert "Model routes" not in quota_page.text
unknown_tab_page = admin.get(f"{BASE_URL}/admin/gateway?tab=bogus", headers={"Accept": "text/html"})
assert "Model routes" in unknown_tab_page.text
def test_gateway_page_json_reports_active_tab(seeded_db):
admin = admin_session(seeded_db)
response = admin.get(f"{BASE_URL}/admin/gateway?tab=providers")
assert response.status_code == 200
assert response.json()["tab"] == "providers"