初始化提交
This commit is contained in:
commit
887c1f449e
963 files changed
+166869
No files matched your search
@@ -0,0 +1,79 @@
|
||||
"""世谱 API 集成测试。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import httpx
|
||||
|
||||
|
||||
async def _default_character_id(auth_client: httpx.AsyncClient) -> str:
|
||||
resp = await auth_client.get("/api/v1/characters")
|
||||
assert resp.status_code == 200
|
||||
return resp.json()["items"][0]["id"]
|
||||
|
||||
|
||||
async def test_create_list_get_lorebook(auth_client: httpx.AsyncClient) -> None:
|
||||
character_id = await _default_character_id(auth_client)
|
||||
|
||||
resp = await auth_client.post(
|
||||
"/api/v1/lorebooks",
|
||||
json={"name": "测试世谱", "character_id": character_id, "scope": "character"},
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
book = resp.json()
|
||||
book_id = book["id"]
|
||||
assert book["name"] == "测试世谱"
|
||||
assert book["scope"] == "character"
|
||||
|
||||
entry_resp = await auth_client.post(
|
||||
f"/api/v1/lorebooks/{book_id}/entries",
|
||||
json={"keys": ["猫"], "content": "她喜欢猫。", "position": "after_char"},
|
||||
)
|
||||
assert entry_resp.status_code == 200
|
||||
assert entry_resp.json()["keys"] == ["猫"]
|
||||
|
||||
listed = await auth_client.get(f"/api/v1/lorebooks?character_id={character_id}")
|
||||
assert listed.status_code == 200
|
||||
assert any(b["id"] == book_id for b in listed.json())
|
||||
|
||||
got = await auth_client.get(f"/api/v1/lorebooks/{book_id}")
|
||||
assert got.status_code == 200
|
||||
assert len(got.json()["entries"]) == 1
|
||||
|
||||
|
||||
async def test_update_entry(auth_client: httpx.AsyncClient) -> None:
|
||||
character_id = await _default_character_id(auth_client)
|
||||
book = (await auth_client.post("/api/v1/lorebooks", json={"character_id": character_id})).json()
|
||||
entry = (
|
||||
await auth_client.post(
|
||||
f"/api/v1/lorebooks/{book['id']}/entries",
|
||||
json={"keys": ["旧"], "content": "旧"},
|
||||
)
|
||||
).json()
|
||||
patched = await auth_client.patch(
|
||||
f"/api/v1/lorebooks/{book['id']}/entries/{entry['id']}",
|
||||
json={"keys": ["新"], "content": "新内容"},
|
||||
)
|
||||
assert patched.status_code == 200
|
||||
assert patched.json()["keys"] == ["新"]
|
||||
assert patched.json()["content"] == "新内容"
|
||||
|
||||
|
||||
async def test_delete_lorebook_archives(auth_client: httpx.AsyncClient) -> None:
|
||||
character_id = await _default_character_id(auth_client)
|
||||
book = (
|
||||
await auth_client.post("/api/v1/lorebooks", json={"character_id": character_id})
|
||||
).json()
|
||||
dele = await auth_client.delete(f"/api/v1/lorebooks/{book['id']}")
|
||||
assert dele.status_code == 200
|
||||
# archived 后不再可见
|
||||
got = await auth_client.get(f"/api/v1/lorebooks/{book['id']}")
|
||||
assert got.status_code == 404
|
||||
|
||||
|
||||
async def test_other_owner_isolated(auth_client: httpx.AsyncClient) -> None:
|
||||
character_id = await _default_character_id(auth_client)
|
||||
book = (
|
||||
await auth_client.post("/api/v1/lorebooks", json={"character_id": character_id})
|
||||
).json()
|
||||
# book id 对当前用户可见
|
||||
assert (await auth_client.get(f"/api/v1/lorebooks/{book['id']}")).status_code == 200
|
||||
Reference in new issue
Block a user