统一测试辅助函数到 conftest.py,消除代码重复

This commit is contained in:
2026-07-26 01:23:12 +08:00
parent 6b1f0d5f5f
commit 12d15878da
7 changed files with 276 additions and 421 deletions
+11 -32
View File
@@ -1,19 +1,6 @@
import io
from fastapi.testclient import TestClient
from PIL import Image
from app.routers import auth as auth_router
def _png_bytes() -> bytes:
output = io.BytesIO()
Image.new("RGB", (1200, 800), color=(125, 196, 240)).save(output, format="PNG")
return output.getvalue()
def _bearer(token: str) -> dict[str, str]:
return {"Authorization": f"Bearer {token}"}
from tests.conftest import bearer, capture_email, confirm_email, png_bytes
def test_openapi_contains_all_feature_groups(client: TestClient) -> None:
@@ -34,12 +21,7 @@ def test_openapi_contains_all_feature_groups(client: TestClient) -> None:
def test_complete_user_cloud_and_admin_flow(client: TestClient, monkeypatch) -> None:
captured_tokens: dict[str, str] = {}
async def capture_confirmation(_: str, token: str) -> None:
captured_tokens["confirmation"] = token
monkeypatch.setattr(auth_router, "send_confirmation_email", capture_confirmation)
captured_tokens = capture_email(monkeypatch)
health = client.get("/api/v1/health")
assert health.status_code == 200
@@ -53,12 +35,9 @@ def test_complete_user_cloud_and_admin_flow(client: TestClient, monkeypatch) ->
},
)
assert registered.status_code == 201
assert "confirmation" in captured_tokens
assert "token" in captured_tokens
confirmed = client.post(
"/api/v1/auth/confirm-email",
json={"token": captured_tokens["confirmation"]},
)
confirmed = confirm_email(client, captured_tokens["token"])
assert confirmed.status_code == 200
login = client.post(
@@ -69,21 +48,21 @@ def test_complete_user_cloud_and_admin_flow(client: TestClient, monkeypatch) ->
user_token = login.json()["access_token"]
user_id = login.json()["user"]["id"]
me = client.get("/api/v1/auth/me", headers=_bearer(user_token))
me = client.get("/api/v1/auth/me", headers=bearer(user_token))
assert me.status_code == 200
assert me.json()["profile"]["username"] == "观云者"
renamed = client.patch(
"/api/v1/profiles/me",
headers=_bearer(user_token),
headers=bearer(user_token),
json={"username": "天空观察员"},
)
assert renamed.status_code == 200
upload = client.post(
"/api/v1/clouds",
headers=_bearer(user_token),
files={"image": ("cloud.png", _png_bytes(), "image/png")},
headers=bearer(user_token),
files={"image": ("cloud.png", png_bytes(), "image/png")},
data={
"cloud_type_id": "1",
"latitude": "31.2345",
@@ -101,7 +80,7 @@ def test_complete_user_cloud_and_admin_flow(client: TestClient, monkeypatch) ->
assert cloud["latitude"] == 31.23
assert upload.json()["unlocked_badge"]["cloud_type_id"] == 1
collection = client.get("/api/v1/collections/me", headers=_bearer(user_token))
collection = client.get("/api/v1/collections/me", headers=bearer(user_token))
assert collection.status_code == 200
assert len(collection.json()) == 1
@@ -116,7 +95,7 @@ def test_complete_user_cloud_and_admin_flow(client: TestClient, monkeypatch) ->
admin_token = admin_login.json()["access_token"]
approved = client.patch(
"/api/v1/admin/clouds/status",
headers=_bearer(admin_token),
headers=bearer(admin_token),
json={"ids": [cloud_id], "status": "approved"},
)
assert approved.status_code == 200
@@ -140,7 +119,7 @@ def test_complete_user_cloud_and_admin_flow(client: TestClient, monkeypatch) ->
assert public_profile_clouds.status_code == 200
assert public_profile_clouds.json()["total"] == 1
deleted = client.delete(f"/api/v1/clouds/{cloud_id}", headers=_bearer(user_token))
deleted = client.delete(f"/api/v1/clouds/{cloud_id}", headers=bearer(user_token))
assert deleted.status_code == 200
assert deleted.json()["deleted"] == 1