Files
anonymisation/tests/unit/test_cli_engines_diagnostic.py
Domi31tls 890edb360e feat(cli): option --engines, diagnostic honnête des moteurs du build CLI
Axe CLI (intégration dans d'autres programmes) : contrat stable, codes retour
fiables. `--engines` liste les moteurs réellement disponibles dans CET
exécutable CLI (`[OUI]/[NON] Label (requis/optionnel) — raison`) et sort 0, sans
traiter. `input` devient optionnel pour ce mode (sinon code 2).

Le fail-closed CamemBERT (code 3) et le best-effort EDS/GLiNER (jamais déclarés
actifs si le chargement échoue) restent inchangés. Ne présume pas du build GUI.

2 tests (--engines → code 0 + moteurs listés ; absence d'input → code 2).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 17:38:56 +02:00

41 lines
1.2 KiB
Python

"""Le CLI expose `--engines` : diagnostic honnête des moteurs embarqués (code 0).
On charge le module CLI par chemin (il n'est pas packagé) et on vérifie que
`--engines` liste les moteurs et sort 0, sans exiger d'argument `input`.
"""
from __future__ import annotations
import importlib.util
from pathlib import Path
import pytest
_CLI_PATH = Path(__file__).resolve().parents[2] / "scripts" / "anonymize_cli.py"
def _load_cli():
spec = importlib.util.spec_from_file_location("anonymize_cli_undertest", _CLI_PATH)
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
return mod
def test_engines_flag_lists_engines_and_exits_zero(capsys):
cli = _load_cli()
rc = cli.main(["--engines"])
assert rc == 0
out = capsys.readouterr().out
assert "Moteurs d'anonymisation" in out
# les 3 moteurs connus apparaissent dans le diagnostic
assert "CamemBERT-bio" in out
assert "EDS-Pseudo" in out
assert "GLiNER" in out
def test_no_input_without_engines_errors(capsys):
cli = _load_cli()
with pytest.raises(SystemExit) as exc: # argparse error => exit 2
cli.main([])
assert exc.value.code == 2