Files
certificate-system/backend/tests/test_pdf_pregeneration.py
2026-06-23 13:59:56 +08:00

32 lines
1.1 KiB
Python

from time import monotonic, sleep
from app.services import pdf_pregeneration
def test_pdf_pregeneration_job_deduplicates_and_tracks_progress(monkeypatch):
calls: list[tuple[int, int]] = []
def fake_pre_generate_certificate_pdf(certificate_id: int, concurrency_limit: int) -> str:
calls.append((certificate_id, concurrency_limit))
return {101: "generated", 102: "cached", 103: "skipped"}[certificate_id]
monkeypatch.setattr(pdf_pregeneration, "pre_generate_certificate_pdf", fake_pre_generate_certificate_pdf)
manager = pdf_pregeneration.PdfPregenerationManager()
job = manager.start([101, 102, 102, 103], concurrency_limit=2)
deadline = monotonic() + 2
while job.status == "running" and monotonic() < deadline:
sleep(0.01)
assert job.status == "completed"
assert job.total == 3
assert job.completed == 3
assert job.generated == 1
assert job.cached == 1
assert job.skipped == 1
assert job.failed == 0
assert sorted(certificate_id for certificate_id, _ in calls) == [101, 102, 103]
assert {limit for _, limit in calls} == {2}
assert job.to_dict()["percent"] == 100