配置 SSOT(TOML + .env) 统一错误契约 Auth 与事务边界 Redis / Celery 可靠性:业务 Redis(DB/0)与 Celery broker/backend(DB/1)显式拆分;连接池、sync client 可观测性(OpenTelemetry + LGTM)
77 lines
2.0 KiB
Python
77 lines
2.0 KiB
Python
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
|