from datetime import datetime from fastapi.testclient import TestClient from app.database import get_db from app.main import create_app from app.models import WanfaCategory, WanfaRoute class FakeScalarResult: def __init__(self, items): self.items = items def all(self): return self.items class FakeDb: def __init__(self, items): self.items = items def scalars(self, _statement): return FakeScalarResult(self.items) def make_route(): return WanfaRoute( id="family-water", categoryId="family-route", title="亲子玩水", subtitle="贵州·轻松节奏与自然课堂", image="https://example.test/family-water.jpg", routeCount=4, demandKeyword="亲子玩水", sortOrder=0, createdAt=datetime(2026, 1, 1), updatedAt=datetime(2026, 1, 2), ) def test_public_wanfa_categories_returns_frontend_display_contract_without_auth(): category = WanfaCategory( id="family-route", label="亲子路线", sortOrder=0, createdAt=datetime(2026, 1, 1), updatedAt=datetime(2026, 1, 2), routes=[make_route()], ) app = create_app() app.dependency_overrides[get_db] = lambda: FakeDb([category]) try: response = TestClient(app).get("/api/public/wanfa/categories") finally: app.dependency_overrides.clear() assert response.status_code == 200 assert response.json() == { "code": 200, "msg": "success", "data": { "categories": [ { "id": "family-route", "label": "亲子路线", "routes": [ { "id": "family-water", "title": "亲子玩水", "subtitle": "贵州·轻松节奏与自然课堂", "image": "https://example.test/family-water.jpg", "routeCount": 4, "demandKeyword": "亲子玩水", } ], } ] }, }