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