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>
This commit is contained in:
40
tests/unit/test_cli_engines_diagnostic.py
Normal file
40
tests/unit/test_cli_engines_diagnostic.py
Normal file
@@ -0,0 +1,40 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user