fix: veraPDF-FAIL respektiert original_on_success, Logverzeichnis raus (v0.4.1)
- Bei fehlgeschlagener veraPDF-Validierung wurde das Original bisher bedingungslos geloescht. Es folgt jetzt derselben [output].original_on_success-Regel wie im Erfolgsfall, damit "archive" das Original nicht ausgerechnet im Fehlerfall verliert. - Das nie benutzte Logverzeichnis /var/log/pdf-ocr-hotfolder/ wird nicht mehr angelegt; der Dienst loggt ausschliesslich nach journald. README und Briefing nennen stattdessen die journalctl-Kommandos. - 3 neue Tests (95 gesamt) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -244,3 +244,72 @@ def test_process_pdf_archive_name_collision(tmp_path: Path) -> None:
|
||||
archived = list(env["archive"].glob("scan_*.pdf"))
|
||||
assert len(archived) == 1
|
||||
assert archived[0].read_bytes() == b"%PDF-1.4 original\n"
|
||||
|
||||
|
||||
# ---------------- veraPDF FAIL: Original folgt original_on_success ----------------
|
||||
|
||||
def _run_with_vera_fail(env: dict, out_cfg: OutputConfig):
|
||||
"""process_pdf mit gemocktem OCR und einem veraPDF, das FAIL meldet."""
|
||||
with patch("pdf_ocr_hotfolder.processor.run_ocr", side_effect=_fake_ocr), \
|
||||
patch("pdf_ocr_hotfolder.processor.run_verapdf", return_value=False):
|
||||
return process_pdf(
|
||||
src=env["src"],
|
||||
working_dir=env["working"],
|
||||
outgoing_dir=env["outgoing"],
|
||||
error_dir=env["error"],
|
||||
ocr_cfg=OcrConfig(),
|
||||
vera_cfg=VeraPdfConfig(enabled=True),
|
||||
output_cfg=out_cfg,
|
||||
)
|
||||
|
||||
|
||||
def test_process_pdf_verapdf_fail_delete_removes_original(tmp_path: Path) -> None:
|
||||
"""delete: Verhalten wie bisher — OCR-Ergebnis nach error/, Original weg."""
|
||||
env = _prepare(tmp_path)
|
||||
out_cfg = OutputConfig(name_mode="prefix", name_tag="OCR_",
|
||||
original_on_success="delete")
|
||||
result = _run_with_vera_fail(env, out_cfg)
|
||||
|
||||
assert not result.success
|
||||
assert result.verapdf_passed is False
|
||||
# OCR-Ergebnis liegt in error/
|
||||
assert (env["error"] / "__ocr_OCR_scan.pdf").exists()
|
||||
# Original ist weg
|
||||
assert not env["src"].exists()
|
||||
assert not (env["working"] / "scan.pdf").exists()
|
||||
assert not (env["outgoing"] / "OCR_scan.pdf").exists()
|
||||
|
||||
|
||||
def test_process_pdf_verapdf_fail_archive_keeps_original(tmp_path: Path) -> None:
|
||||
"""archive: das Original darf im Fehlerfall NICHT verloren gehen."""
|
||||
env = _prepare(tmp_path)
|
||||
out_cfg = OutputConfig(name_mode="prefix", name_tag="OCR_",
|
||||
original_on_success="archive",
|
||||
archive_dir=str(env["archive"]))
|
||||
result = _run_with_vera_fail(env, out_cfg)
|
||||
|
||||
assert not result.success
|
||||
assert result.verapdf_passed is False
|
||||
# OCR-Ergebnis liegt in error/
|
||||
assert (env["error"] / "__ocr_OCR_scan.pdf").exists()
|
||||
# Original liegt unversehrt im Archiv
|
||||
archived = env["archive"] / "scan.pdf"
|
||||
assert archived.exists()
|
||||
assert archived.read_bytes() == b"%PDF-1.4 original\n"
|
||||
assert not (env["working"] / "scan.pdf").exists()
|
||||
assert not (env["outgoing"] / "OCR_scan.pdf").exists()
|
||||
|
||||
|
||||
def test_process_pdf_verapdf_fail_archive_name_collision(tmp_path: Path) -> None:
|
||||
"""Auch im veraPDF-FAIL-Pfad greift der Timestamp-Kollisionsschutz."""
|
||||
env = _prepare(tmp_path)
|
||||
(env["archive"] / "scan.pdf").write_bytes(b"old")
|
||||
out_cfg = OutputConfig(name_mode="prefix", name_tag="OCR_",
|
||||
original_on_success="archive",
|
||||
archive_dir=str(env["archive"]))
|
||||
_run_with_vera_fail(env, out_cfg)
|
||||
|
||||
assert (env["archive"] / "scan.pdf").read_bytes() == b"old"
|
||||
archived = list(env["archive"].glob("scan_*.pdf"))
|
||||
assert len(archived) == 1
|
||||
assert archived[0].read_bytes() == b"%PDF-1.4 original\n"
|
||||
|
||||
Reference in New Issue
Block a user