Files
codex-register/tests/test_newapi_service_routes.py

68 lines
2.3 KiB
Python

import asyncio
from contextlib import contextmanager
import pytest
from fastapi import HTTPException
import src.web.routes.upload.newapi_services as newapi_routes
from src.database.session import DatabaseSessionManager
from src.web.routes.upload.newapi_services import NewapiServiceCreate, NewapiServiceUpdate
def _build_fake_get_db(manager):
@contextmanager
def fake_get_db():
with manager.session_scope() as session:
yield session
return fake_get_db
def test_create_newapi_service_rejects_non_ascii_api_key(tmp_path, monkeypatch):
manager = DatabaseSessionManager(f"sqlite:///{tmp_path}/newapi-create.db")
manager.create_tables()
manager.migrate_tables()
monkeypatch.setattr(newapi_routes, "get_db", _build_fake_get_db(manager))
with pytest.raises(HTTPException) as exc_info:
asyncio.run(
newapi_routes.create_newapi_service(
NewapiServiceCreate(
name="bad-token",
api_url="https://newapi.example.com",
api_key="系统访问令牌 (System Access Token)",
)
)
)
assert exc_info.value.status_code == 400
assert exc_info.value.detail == "Authorization Token 包含非 ASCII 字符,请确认填写的是实际令牌而不是中文说明"
def test_update_newapi_service_rejects_non_ascii_api_key(tmp_path, monkeypatch):
manager = DatabaseSessionManager(f"sqlite:///{tmp_path}/newapi-update.db")
manager.create_tables()
manager.migrate_tables()
monkeypatch.setattr(newapi_routes, "get_db", _build_fake_get_db(manager))
created = asyncio.run(
newapi_routes.create_newapi_service(
NewapiServiceCreate(
name="good-token",
api_url="https://newapi.example.com",
api_key="token-123",
)
)
)
with pytest.raises(HTTPException) as exc_info:
asyncio.run(
newapi_routes.update_newapi_service(
created.id,
NewapiServiceUpdate(api_key="系统访问令牌 (System Access Token)"),
)
)
assert exc_info.value.status_code == 400
assert exc_info.value.detail == "Authorization Token 包含非 ASCII 字符,请确认填写的是实际令牌而不是中文说明"