新增PDF批量预生成
This commit is contained in:
31
backend/tests/test_pdf_pregeneration.py
Normal file
31
backend/tests/test_pdf_pregeneration.py
Normal file
@@ -0,0 +1,31 @@
|
||||
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
|
||||
Reference in New Issue
Block a user