68 lines
2.3 KiB
Python
68 lines
2.3 KiB
Python
"""Smoke test: every generator runs end-to-end into a tmp dir.
|
|
|
|
Asserts that the generator produces non-empty binary fixtures and that
|
|
every ``*.gt.json`` sidecar parses to a dict with the expected keys.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from generate_test_fixtures import (
|
|
diff_pairs,
|
|
docx_revisions,
|
|
odt_revisions,
|
|
pdf_incremental,
|
|
pptx_comments,
|
|
security_fixtures,
|
|
xlsx_revisions,
|
|
)
|
|
|
|
# (module, expected_minimum_files). Each generator must emit at least one
|
|
# binary + one sidecar. Stubs return 0, so we relax the floor to 0 for any
|
|
# generator that hasn't been implemented yet — the smoke test still asserts
|
|
# shape of whatever it does produce.
|
|
GENERATORS = [
|
|
docx_revisions,
|
|
odt_revisions,
|
|
xlsx_revisions,
|
|
pptx_comments,
|
|
pdf_incremental,
|
|
diff_pairs,
|
|
security_fixtures,
|
|
]
|
|
|
|
|
|
@pytest.fixture()
|
|
def repo_root(tmp_path: Path) -> Path:
|
|
"""A fake repo root with a ``test_documents/`` marker so relative-path
|
|
resolution in the ground-truth writer succeeds.
|
|
"""
|
|
(tmp_path / "Cargo.toml").write_text("# stub for fixture tests\n", encoding="utf-8")
|
|
(tmp_path / "test_documents").mkdir()
|
|
return tmp_path
|
|
|
|
|
|
@pytest.mark.parametrize("module", GENERATORS, ids=lambda m: m.__name__.rsplit(".", 1)[-1])
|
|
def test_generator_runs_and_emits_well_formed_outputs(module, tmp_path: Path, repo_root: Path) -> None:
|
|
"""Each generator runs without raising and every sidecar parses cleanly."""
|
|
output_root = tmp_path / "out"
|
|
output_root.mkdir()
|
|
|
|
written = module.generate(output_root, repo_root)
|
|
|
|
# Stubs may legitimately write nothing while still being valid. We only
|
|
# assert structure on files that ARE written.
|
|
assert isinstance(written, list)
|
|
for path in written:
|
|
assert path.exists(), f"{module.__name__} reported {path} but it does not exist"
|
|
assert path.stat().st_size > 0, f"{path} is zero-length"
|
|
if path.suffix == ".json":
|
|
payload = json.loads(path.read_text(encoding="utf-8"))
|
|
assert isinstance(payload, dict), f"{path} is not a JSON object"
|
|
for key in ("fixture_path", "format", "feature", "expectations", "generated_by"):
|
|
assert key in payload, f"{path} missing {key!r}"
|