refactor(api): TOML 配置 SSOT、统一错误契约、Auth/事务加固与可观测性 (#33)
配置 SSOT(TOML + .env) 统一错误契约 Auth 与事务边界 Redis / Celery 可靠性:业务 Redis(DB/0)与 Celery broker/backend(DB/1)显式拆分;连接池、sync client 可观测性(OpenTelemetry + LGTM)
This commit is contained in:
76
api/tests/test_chapter_cover_enqueue_redis.py
Normal file
76
api/tests/test_chapter_cover_enqueue_redis.py
Normal file
@@ -0,0 +1,76 @@
|
||||
import pytest
|
||||
|
||||
from app.tasks import chapter_cover_enqueue as enqueue_mod
|
||||
|
||||
|
||||
def test_chapter_cover_enqueue_reuses_sync_redis_client(
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
) -> None:
|
||||
class FakeRedis:
|
||||
def __init__(self) -> None:
|
||||
self.set_calls = 0
|
||||
|
||||
def set(self, *args, **kwargs):
|
||||
self.set_calls += 1
|
||||
return True
|
||||
|
||||
def delete(self, key: str) -> None:
|
||||
return None
|
||||
|
||||
shared_client = FakeRedis()
|
||||
|
||||
def fake_get_sync_redis(*, decode_responses: bool):
|
||||
assert decode_responses is True
|
||||
return shared_client
|
||||
|
||||
class Chapter:
|
||||
category = "childhood"
|
||||
cover_asset_id = None
|
||||
story_links = [object()]
|
||||
images = []
|
||||
|
||||
class FakeCoverTask:
|
||||
def delay(self, chapter_id: str) -> None:
|
||||
return None
|
||||
|
||||
monkeypatch.setattr(enqueue_mod, "get_sync_redis", fake_get_sync_redis)
|
||||
monkeypatch.setattr(
|
||||
enqueue_mod,
|
||||
"_load_chapter_for_enqueue_sync",
|
||||
lambda chapter_id: Chapter(),
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
enqueue_mod,
|
||||
"chapter_has_story_links",
|
||||
lambda chapter: True,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
enqueue_mod,
|
||||
"effective_chapter_markdown_for_cover_gates",
|
||||
lambda chapter: "body",
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
enqueue_mod,
|
||||
"strip_image_placeholders",
|
||||
lambda text: text,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
enqueue_mod,
|
||||
"chapter_eligible_for_cover_by_inline_body_image_count",
|
||||
lambda chapter, markdown: True,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
enqueue_mod,
|
||||
"primary_chapter_memoir_image",
|
||||
lambda chapter: None,
|
||||
)
|
||||
import app.tasks.chapter_cover_tasks as cover_tasks
|
||||
|
||||
monkeypatch.setattr(cover_tasks, "generate_chapter_cover", FakeCoverTask())
|
||||
|
||||
ok = enqueue_mod.try_enqueue_generate_chapter_cover("chapter-1", source="http")
|
||||
assert ok is True
|
||||
assert shared_client.set_calls == 1
|
||||
|
||||
enqueue_mod.try_enqueue_generate_chapter_cover("chapter-2", source="http")
|
||||
assert shared_client.set_calls == 2
|
||||
Reference in New Issue
Block a user