Files
rpa_vision_v3/tests/unit/test_lea_competence_verdict_api.py

149 lines
4.5 KiB
Python

from flask import Flask
import importlib.util
from pathlib import Path
MODULE_PATH = (
Path(__file__).resolve().parents[2]
/ "visual_workflow_builder"
/ "backend"
/ "api"
/ "lea_competences.py"
)
SPEC = importlib.util.spec_from_file_location("lea_competences_test_module", MODULE_PATH)
lea_competences_module = importlib.util.module_from_spec(SPEC)
assert SPEC and SPEC.loader
SPEC.loader.exec_module(lea_competences_module)
lea_competences_bp = lea_competences_module.lea_competences_bp
def _app():
app = Flask(__name__)
app.register_blueprint(lea_competences_bp)
return app
def test_submit_competence_verdict_endpoint(monkeypatch):
def fake_store(competence_id, payload):
assert competence_id == "key_win_r_wait_explorer_exe"
assert payload["verdict_kind"] == "valid"
return {
"verdict_id": payload["verdict_id"],
"competence_id": competence_id,
"verdict_kind": "valid",
"duplicate": False,
"write_back_enabled": False,
"yaml_write": False,
}
monkeypatch.setattr(
lea_competences_module,
"store_competence_verdict",
fake_store,
)
with _app().test_client() as client:
response = client.post(
"/api/v1/lea/competences/key_win_r_wait_explorer_exe/verdict",
json={
"verdict_id": "123e4567-e89b-42d3-a456-426614174000",
"verdict_kind": "valid",
},
)
assert response.status_code == 201
data = response.get_json()
assert data["success"] is True
assert data["write_back_enabled"] is False
assert data["yaml_write"] is False
assert data["verdict"]["duplicate"] is False
def test_submit_competence_verdict_endpoint_returns_duplicate_200(monkeypatch):
def fake_store(_competence_id, payload):
return {
"verdict_id": payload["verdict_id"],
"competence_id": "key_win_r_wait_explorer_exe",
"verdict_kind": "valid",
"duplicate": True,
"write_back_enabled": False,
"yaml_write": False,
}
monkeypatch.setattr(
lea_competences_module,
"store_competence_verdict",
fake_store,
)
with _app().test_client() as client:
response = client.post(
"/api/v1/lea/competences/key_win_r_wait_explorer_exe/verdict",
json={
"verdict_id": "123e4567-e89b-42d3-a456-426614174000",
"verdict_kind": "valid",
},
)
assert response.status_code == 200
assert response.get_json()["duplicate"] is True
def test_list_competence_verdicts_endpoint(monkeypatch):
monkeypatch.setattr(
lea_competences_module,
"iter_competence_verdicts",
lambda competence_id: [{"competence_id": competence_id, "verdict_kind": "valid"}],
)
with _app().test_client() as client:
response = client.get(
"/api/v1/lea/competences/key_win_r_wait_explorer_exe/verdicts"
)
data = response.get_json()
assert response.status_code == 200
assert data["success"] is True
assert data["verdicts"] == [
{"competence_id": "key_win_r_wait_explorer_exe", "verdict_kind": "valid"}
]
def test_promote_competence_endpoint_dry_run(monkeypatch):
def fake_promote(competence_id, payload):
assert competence_id == "key_win_r_wait_explorer_exe"
assert payload["dry_run"] is True
return {
"promotion_id": payload["promotion_id"],
"competence_id": competence_id,
"target_state": "candidate",
"dry_run": True,
"eligible": True,
"dry_run_token": "token",
"write_applied": False,
}
monkeypatch.setattr(
lea_competences_module,
"promote_competence_from_verdicts",
fake_promote,
)
with _app().test_client() as client:
response = client.post(
"/api/v1/lea/competences/key_win_r_wait_explorer_exe/promote",
json={
"promotion_id": "123e4567-e89b-42d3-a456-426614174000",
"target_state": "candidate",
"verdict_ids": ["123e4567-e89b-42d3-a456-426614174001"],
"confirmed_by": "human:dom",
"dry_run": True,
},
)
data = response.get_json()
assert response.status_code == 200
assert data["success"] is True
assert data["dry_run"] is True
assert data["yaml_write"] is False