import pytest from audita.cli import main from audita.core.reporting import ProcessResult, RunReport from audita.core.schemas import parse_transcript_json def test_cli_help_uses_audita_program_name(capsys): with pytest.raises(SystemExit) as exc: main(["--help"]) assert exc.value.code == 0 assert capsys.readouterr().out.startswith("usage: audita ") def test_process_help_exposes_framework_flags(capsys): with pytest.raises(SystemExit) as exc: main(["process", "--help"]) assert exc.value.code == 0 output = capsys.readouterr().out assert "--report-json" in output assert "--model" in output assert "--base-url" in output assert "--max-retries" in output assert "--max-section-tokens" in output assert "--glossary-confidence-threshold" in output assert "--homophones-confidence-threshold" in output assert "--work-dir-retention" in output assert "--normalize-max-segment-gap" in output assert "--grammar-validation-enabled" not in output def test_cli_process_writes_report_json(monkeypatch, tmp_path): transcript = parse_transcript_json( """ [ {"id": 1, "speaker": "Eric", "start": 0.0, "end": 1.0, "text": "Fixed."} ] """ ) report = RunReport( status="success", config={"model": "m", "base_url": "b"}, normalization={"source_segment_count": 1, "normalized_segment_count": 1, "merge_count": 0}, pipeline=["glossary_primary", "homophones", "glossary_secondary", "spoken_word", "grammar"], modules=[], applied_changes=[], skipped_corrections=[], totals={"output_segment_count": 1, "applied_change_count": 0, "skipped_correction_count": 0}, work_dir_retention="auto", work_dir_retained=False, work_dir=None, error=None, ) result = ProcessResult( transcript=transcript, report=report, run_dir=tmp_path / "run", work_dir_retained=False, ) monkeypatch.setattr("audita.cli.AuditaConfig.from_sources", lambda overrides=None: object()) monkeypatch.setattr("audita.cli.load_transcript", lambda path: []) monkeypatch.setattr("audita.cli.load_glossary", lambda path: object()) monkeypatch.setattr("audita.cli.process_transcript_result", lambda *args, **kwargs: result) output_path = tmp_path / "out.json" report_path = tmp_path / "report.json" exit_code = main( [ "process", "transcript.json", "--glossary", "glossary.yaml", "--output", str(output_path), "--report-json", str(report_path), ] ) assert exit_code == 0 assert report_path.exists()