feat(vwb): preview lea competence workflows
This commit is contained in:
105
tests/unit/test_competence_to_vwb_preview.py
Normal file
105
tests/unit/test_competence_to_vwb_preview.py
Normal file
@@ -0,0 +1,105 @@
|
||||
from flask import Flask
|
||||
|
||||
from visual_workflow_builder.backend.services.competence_vwb_preview import (
|
||||
competence_yaml_to_vwb_preview,
|
||||
competence_yaml_to_vwb_steps,
|
||||
)
|
||||
|
||||
|
||||
def _by_type(preview):
|
||||
return [step["action_type"] for step in preview["steps"]]
|
||||
|
||||
|
||||
def test_competence_to_vwb_preview_key_win_r_steps():
|
||||
preview = competence_yaml_to_vwb_preview("key_win_r_wait_explorer_exe")
|
||||
|
||||
assert preview["readonly"] is True
|
||||
assert preview["write_back_enabled"] is False
|
||||
assert preview["workflow"]["competence_id"] == "key_win_r_wait_explorer_exe"
|
||||
assert _by_type(preview) == [
|
||||
"pause_for_human",
|
||||
"keyboard_shortcut",
|
||||
"wait_for_state",
|
||||
"pause_for_human",
|
||||
]
|
||||
|
||||
|
||||
def test_keyboard_shortcut_keys_are_preserved():
|
||||
steps = competence_yaml_to_vwb_steps("key_win_r_wait_explorer_exe")
|
||||
shortcut = steps[1]
|
||||
|
||||
assert shortcut["action_type"] == "keyboard_shortcut"
|
||||
assert shortcut["parameters"]["keys"] == ["win", "r"]
|
||||
assert shortcut["parameters"]["source"] == (
|
||||
"lea_competence:key_win_r_wait_explorer_exe"
|
||||
)
|
||||
assert shortcut["parameters"]["source_method_id"] == "step_1_key_combo"
|
||||
|
||||
|
||||
def test_wait_for_state_expected_state_is_preserved():
|
||||
steps = competence_yaml_to_vwb_steps("key_win_r_wait_explorer_exe")
|
||||
wait_step = steps[2]
|
||||
|
||||
assert wait_step["action_type"] == "wait_for_state"
|
||||
params = wait_step["parameters"]
|
||||
assert params["expected_state"]["window_title_in"] == ["Ex\u00e9cuter"]
|
||||
assert params["expected_state"]["process_active"] == "explorer.exe"
|
||||
assert params["timeout_ms"] == 5000
|
||||
assert params["poll_interval_ms"] == 250
|
||||
assert params["evidence_required"] == "window_or_process"
|
||||
|
||||
|
||||
def test_pause_for_human_before_and_after_are_supervision_only():
|
||||
steps = competence_yaml_to_vwb_steps("key_win_r_wait_explorer_exe")
|
||||
|
||||
before = steps[0]
|
||||
after = steps[-1]
|
||||
assert before["parameters"]["phase"] == "before"
|
||||
assert before["parameters"]["verdict_required"] is False
|
||||
assert after["parameters"]["phase"] == "after"
|
||||
assert after["parameters"]["verdict_required"] is True
|
||||
assert after["parameters"]["write_back_enabled"] is False
|
||||
|
||||
|
||||
def test_adapter_is_generic_on_methods_not_hardcoded_to_win_r():
|
||||
steps = competence_yaml_to_vwb_steps("key_ctrl_s_wait_notepad_exe")
|
||||
|
||||
assert [step["action_type"] for step in steps] == [
|
||||
"pause_for_human",
|
||||
"keyboard_shortcut",
|
||||
"wait_for_state",
|
||||
"pause_for_human",
|
||||
]
|
||||
assert steps[1]["parameters"]["keys"] == ["ctrl", "s"]
|
||||
assert steps[2]["parameters"]["expected_state"]["window_title_in"] == [
|
||||
"Enregistrer sous"
|
||||
]
|
||||
assert steps[2]["parameters"]["expected_state"]["process_active"] == "Notepad.exe"
|
||||
|
||||
|
||||
def test_preview_endpoint_returns_read_only_workflow():
|
||||
from visual_workflow_builder.backend.catalog_routes_v2_vlm import (
|
||||
competence_preview_bp,
|
||||
)
|
||||
|
||||
app = Flask(__name__)
|
||||
app.register_blueprint(competence_preview_bp)
|
||||
|
||||
with app.test_client() as client:
|
||||
response = client.post(
|
||||
"/api/vwb/competences/key_win_r_wait_explorer_exe/preview",
|
||||
json={"supervised": True},
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
data = response.get_json()
|
||||
assert data["success"] is True
|
||||
assert data["readonly"] is True
|
||||
assert data["write_back_enabled"] is False
|
||||
assert data["workflow"]["source"] == "lea_competence_preview"
|
||||
assert [step["action_type"] for step in data["steps"]] == [
|
||||
"pause_for_human",
|
||||
"keyboard_shortcut",
|
||||
"wait_for_state",
|
||||
"pause_for_human",
|
||||
]
|
||||
Reference in New Issue
Block a user