feat(vwb): add dashboard competence testing and health tools

This commit is contained in:
Dom
2026-06-02 16:27:19 +02:00
parent d38f0b0f2f
commit 18ed6cb751
23 changed files with 2769 additions and 27 deletions

View File

@@ -6,6 +6,7 @@ Vérifie que les fonctions d'extraction d'apps et de génération
d'actions de setup 100% visuelles fonctionnent correctement.
"""
import pytest
import os
import sys
from pathlib import Path
@@ -13,6 +14,10 @@ from pathlib import Path
ROOT = Path(__file__).parent.parent.parent
sys.path.insert(0, str(ROOT))
# api_stream est fail-closed si RPA_API_TOKEN est absent. Ces tests ciblent les
# helpers de setup, pas le bootstrap d'authentification.
os.environ.setdefault("RPA_API_TOKEN", "test_env_setup_token_0123456789abcdef")
from agent_v0.server_v1.api_stream import (
_extract_required_apps_from_events,
_extract_required_apps_from_workflow,
@@ -630,7 +635,7 @@ class TestGenerateSetupActions:
}
actions = _generate_setup_actions(app_info)
assert len(actions) == 7
assert len(actions) == 10
assert actions[0]["type"] == "key_combo"
assert actions[0]["keys"] == ["win", "r"]
@@ -652,7 +657,17 @@ class TestGenerateSetupActions:
assert actions[5]["duration_ms"] == 2000
assert actions[6]["type"] == "verify_screen"
assert actions[6]["expected_window_title_contains"] == ["Bloc-notes", "notepad"]
assert actions[6]["_setup_step"] == "verify_app_ready_before_fresh_document"
assert actions[7]["type"] == "key_combo"
assert actions[7]["keys"] == ["ctrl", "n"]
assert actions[7]["_setup_step"] == "ensure_fresh_document"
assert actions[8]["type"] == "wait"
assert actions[8]["duration_ms"] == 400
assert actions[9]["type"] == "verify_screen"
assert actions[9]["expected_window_title_contains"] == ["Bloc-notes", "notepad"]
# Toutes les actions sont marquées comme phase setup
for action in actions:
@@ -1126,9 +1141,10 @@ class TestSetupPipeline:
app_info = _extract_required_apps_from_events(events)
assert app_info["primary_app"] == "Notepad.exe"
assert app_info["has_neutral_window_title"] is True
actions = _generate_setup_actions(app_info)
assert len(actions) == 7
assert len(actions) == 10
types = [a["type"] for a in actions]
steps = [a.get("_setup_step") for a in actions]
@@ -1139,11 +1155,14 @@ class TestSetupPipeline:
"wait_launch_command",
"submit_run_dialog",
"wait_app_launch",
"verify_app_ready_before_fresh_document",
"ensure_fresh_document",
"wait_fresh_document",
"verify_app_ready",
]
assert steps == expected_step_order, steps
assert types.count("key_combo") == 2
assert types.count("key_combo") == 3
idx_type = steps.index("type_launch_command")
assert actions[idx_type]["text"] == "notepad"
@@ -1165,14 +1184,15 @@ class TestSetupPipeline:
app_info = _extract_required_apps_from_workflow(workflow)
assert app_info["primary_app"] == "Notepad.exe"
assert app_info["has_neutral_window_title"] is True
actions = _generate_setup_actions(app_info)
assert len(actions) == 7
assert len(actions) == 10
# Le texte tapé doit être la commande shell pour le setup Win+R.
type_action = [a for a in actions if a["type"] == "type"][0]
assert type_action["text"] == "notepad"
# Le setup Notepad s'appuie maintenant sur deux key_combo.
# Win+R, Enter, puis Ctrl+N pour garantir un document vierge.
key_combos = [a for a in actions if a["type"] == "key_combo"]
assert len(key_combos) == 2
assert len(key_combos) == 3