- uv(workspace) + pnpm monorepo;docker-compose(pg+api+web) - SQLAlchemy 16 MVP 表 + Alembic 初版迁移(无漂移,users stub) - FastAPI 骨架:统一错误信封(带 request_id) + structlog + /jobs/:id + OpenAPI - Next.js 骨架:纸感主题 token + OpenAPI→TS 客户端代码生成(gen:api) - CI(ruff/mypy/pytest + pg service + alembic 漂移校验) - 四份设计规格(PRODUCT/UX/ARCHITECTURE/DEV_PLAN) + CLAUDE.md
45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
"""端点测试 fixtures:用内存替身覆盖依赖,注入有效加密 key(无 DB/无网络)。"""
|
||
|
||
from __future__ import annotations
|
||
|
||
import os
|
||
|
||
import pytest
|
||
from cryptography.fernet import Fernet
|
||
from fakes_providers import FakeCredentialStore, FakeProviderProbe
|
||
from fastapi.testclient import TestClient
|
||
|
||
|
||
@pytest.fixture
|
||
def enc_key() -> str:
|
||
return Fernet.generate_key().decode()
|
||
|
||
|
||
@pytest.fixture
|
||
def store() -> FakeCredentialStore:
|
||
return FakeCredentialStore()
|
||
|
||
|
||
@pytest.fixture
|
||
def probe() -> FakeProviderProbe:
|
||
return FakeProviderProbe()
|
||
|
||
|
||
@pytest.fixture
|
||
def client(enc_key: str, store: FakeCredentialStore, probe: FakeProviderProbe) -> TestClient:
|
||
os.environ["CREDENTIAL_ENC_KEY"] = enc_key
|
||
from ww_config import get_settings
|
||
|
||
get_settings.cache_clear() # 让新 env 生效
|
||
|
||
from ww_api.main import create_app
|
||
from ww_api.services.provider_deps import (
|
||
get_credential_store,
|
||
get_provider_probe,
|
||
)
|
||
|
||
app = create_app()
|
||
app.dependency_overrides[get_credential_store] = lambda: store
|
||
app.dependency_overrides[get_provider_probe] = lambda: probe
|
||
return TestClient(app)
|