"""스케줄러에 무엇이 등록돼 있나. ★★ 이 파일이 있는 이유: `sweep_blog_drafts` 가 **등록돼 있지 않았다**(실측 2026-09-30). `scheduler/jobs.py` 에 함수는 있고 주석도 "새벽에 재고를 채운다" 라고 말하는데 `add_job` 한 줄이 없어 한 번도 돈 적이 없다. 증상은 "미니블로그 메일이 안 온다" 로만 보여서 발송 쪽을 보게 된다 — 실제로는 **보낼 글이 0건**이었다. 잡 하나가 빠져도 서버는 정상으로 뜨고 로그에도 에러가 없다. 그래서 세는 것이다. """ import pytest import scheduler @pytest.fixture def started(monkeypatch): monkeypatch.setenv("SCHEDULER_ENABLED", "1") # 실제로 돌리지 않는다 — 등록만 본다. monkeypatch.setattr("apscheduler.schedulers.asyncio.AsyncIOScheduler.start", lambda self: None) scheduler._scheduler = None scheduler.start_scheduler() yield scheduler._scheduler scheduler._scheduler = None def test_미니블로그는_생성과_발송이_둘_다_등록된다(started): """★ 발송만 있으면 보낼 글이 영원히 0건이다.""" ids = {j.id for j in started.get_jobs()} assert "blog-drafts" in ids, "재고 채우기가 등록되지 않았다 — 자동 생성이 안 돈다" assert "blog-mail" in ids def test_재고_채우기가_발송보다_앞선다(started): """그날 아침에 나갈 글이 있으려면 생성이 먼저여야 한다.""" by_id = {j.id: j for j in started.get_jobs()} hour = lambda j: int(str(by_id[j].trigger.fields[by_id[j].trigger.FIELD_NAMES.index("hour")])) assert hour("blog-drafts") < hour("blog-mail") def test_스위치가_꺼지면_아무것도_등록하지_않는다(monkeypatch): """키 없는 환경에 돌지도 않을 잡을 만들어 두지 않는다.""" monkeypatch.setenv("SCHEDULER_ENABLED", "0") scheduler._scheduler = None scheduler.start_scheduler() assert scheduler._scheduler is None