chore: sauvegarde complète avant factorisation executor
Some checks failed
security-audit / Bandit (scan statique) (push) Successful in 12s
security-audit / pip-audit (CVE dépendances) (push) Successful in 10s
security-audit / Scan secrets (grep) (push) Successful in 8s
tests / Lint (ruff + black) (push) Successful in 13s
tests / Tests unitaires (sans GPU) (push) Failing after 14s
tests / Tests sécurité (critique) (push) Has been skipped

Point de sauvegarde incluant les fichiers non committés des sessions
précédentes (systemd, docs, agents, GPU manager).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dom
2026-04-20 17:03:44 +02:00
parent 623be15bfe
commit 447fbb2c6e
1869 changed files with 791438 additions and 324 deletions

View File

@@ -46,7 +46,6 @@ class TestDashboardRoutes:
data = resp.get_json()
assert 'sessions_count' in data
assert 'workflows_count' in data
assert 'tests' in data
def test_system_performance(self, client):
"""L'API system/performance retourne les metriques."""
@@ -54,7 +53,6 @@ class TestDashboardRoutes:
assert resp.status_code == 200
data = resp.get_json()
assert 'faiss' in data
assert 'metrics' in data
def test_version(self, client):
"""L'API version retourne la version actuelle."""
@@ -126,13 +124,10 @@ class TestDashboardRoutes:
data = resp.get_json()
assert 'sessions' in data
def test_tests_list(self, client):
"""L'API tests retourne la liste des tests."""
def test_tests_list_removed(self, client):
"""L'API /api/tests a été retirée (RCE via subprocess)."""
resp = client.get('/api/tests')
assert resp.status_code == 200
data = resp.get_json()
assert 'tests' in data
assert 'total' in data
assert resp.status_code == 404
def test_logs(self, client):
"""L'API logs retourne les logs."""
@@ -155,10 +150,10 @@ class TestDashboardRoutes:
data = resp.get_json()
assert 'triggers' in data
def test_automation_status(self, client):
"""L'API automation/status retourne le statut."""
def test_automation_status_removed(self, client):
"""L'API /api/automation/status a été retirée."""
resp = client.get('/api/automation/status')
assert resp.status_code == 200
assert resp.status_code == 404
def test_metrics_endpoint(self, client):
"""L'endpoint Prometheus /metrics fonctionne."""
@@ -171,151 +166,47 @@ class TestDashboardRoutes:
assert resp.status_code == 404 or resp.status_code == 405
class TestGesturesRoutes:
"""Tests des routes du catalogue de gestes."""
class TestRemovedRoutes:
"""Vérifie que les routes supprimées retournent 404."""
def test_gestures_page_renders(self, client):
"""La page /gestures se rend correctement."""
def test_gestures_page_removed(self, client):
"""La page /gestures a été retirée."""
resp = client.get('/gestures')
assert resp.status_code == 200
assert b'Gestes Primitifs' in resp.data
assert resp.status_code == 404
def test_gestures_page_has_categories(self, client):
"""La page /gestures affiche les catégories de gestes."""
resp = client.get('/gestures')
assert resp.status_code == 200
# Vérifier qu'au moins une catégorie est présente
assert b'windows' in resp.data or b'chrome' in resp.data
def test_gestures_page_has_shortcuts(self, client):
"""La page /gestures affiche les raccourcis clavier."""
resp = client.get('/gestures')
assert resp.status_code == 200
assert b'Ctrl' in resp.data or b'Alt' in resp.data
def test_api_gestures(self, client):
"""L'API /api/gestures retourne les gestes en JSON."""
def test_api_gestures_removed(self, client):
"""L'API /api/gestures a été retirée."""
resp = client.get('/api/gestures')
assert resp.status_code == 200
data = resp.get_json()
assert 'gestures' in data
assert 'total' in data
assert 'categories' in data
assert data['total'] > 0
assert isinstance(data['gestures'], list)
assert len(data['gestures']) == data['total']
assert resp.status_code == 404
def test_api_gestures_structure(self, client):
"""Chaque geste a les champs requis."""
resp = client.get('/api/gestures')
data = resp.get_json()
for gesture in data['gestures']:
assert 'name' in gesture
assert 'category' in gesture
assert 'description' in gesture
def test_api_gestures_categories(self, client):
"""Les catégories sont bien structurées."""
resp = client.get('/api/gestures')
data = resp.get_json()
categories = data['categories']
assert len(categories) >= 4 # windows, chrome, edition, system au minimum
for cat in categories:
assert 'id' in cat
assert 'name' in cat
assert 'count' in cat
assert cat['count'] > 0
class TestStreamingRoutes:
"""Tests des routes streaming."""
def test_streaming_page_renders(self, client):
"""La page /streaming se rend correctement."""
def test_streaming_page_removed(self, client):
"""La page /streaming a été retirée."""
resp = client.get('/streaming')
assert resp.status_code == 200
assert b'Streaming' in resp.data
assert resp.status_code == 404
def test_streaming_page_has_stats_section(self, client):
"""La page /streaming contient les sections de stats."""
resp = client.get('/streaming')
assert resp.status_code == 200
assert b'Sessions actives' in resp.data
assert b'Serveur streaming' in resp.data
def test_extractions_page_removed(self, client):
"""La page /extractions a été retirée."""
resp = client.get('/extractions')
assert resp.status_code == 404
def test_api_streaming_status(self, client):
"""L'API /api/streaming/status retourne un résultat (même si serveur offline)."""
resp = client.get('/api/streaming/status')
# Le serveur streaming peut ne pas être lancé (502) ou répondre (200)
assert resp.status_code in (200, 502)
def test_api_extractions_removed(self, client):
"""L'API /api/extractions a été retirée."""
resp = client.get('/api/extractions')
assert resp.status_code == 404
def test_chat_page_removed(self, client):
"""La page /chat a été retirée."""
resp = client.get('/chat')
assert resp.status_code == 404
class TestFleetProxy:
"""Tests du proxy fleet (requiert serveur streaming, donc 502 attendu)."""
def test_fleet_list_proxy(self, client):
"""Le proxy /api/fleet/fleet retourne 200, 401 ou 502 (serveur offline/auth)."""
resp = client.get('/api/fleet/fleet')
# 200 = ok, 401 = streaming server rejette le token, 502 = serveur offline
assert resp.status_code in (200, 401, 502)
data = resp.get_json()
assert isinstance(data, dict)
class TestExtractionsRoutes:
"""Tests des routes extractions."""
def test_extractions_page_renders(self, client):
"""La page /extractions se rend correctement."""
resp = client.get('/extractions')
assert resp.status_code == 200
assert b'Extractions' in resp.data
def test_extractions_page_module_unavailable(self, client):
"""La page /extractions affiche un message si le module n'est pas disponible."""
resp = client.get('/extractions')
assert resp.status_code == 200
# Le module core.extraction n'existe pas, on doit voir le message
assert b'non disponible' in resp.data or b'Module' in resp.data
def test_api_extractions(self, client):
"""L'API /api/extractions retourne un résultat valide."""
resp = client.get('/api/extractions')
assert resp.status_code == 200
data = resp.get_json()
assert 'available' in data
assert 'extractions' in data
assert isinstance(data['extractions'], list)
def test_api_extractions_module_status(self, client):
"""L'API /api/extractions indique si le module est disponible."""
resp = client.get('/api/extractions')
data = resp.get_json()
# Le module n'existe pas dans ce contexte
assert data['available'] is False
assert 'message' in data
def test_api_extraction_export_no_module(self, client):
"""L'export CSV retourne 501 si le module n'est pas disponible."""
resp = client.get('/api/extractions/test-id/export?format=csv')
assert resp.status_code == 501
data = resp.get_json()
assert 'error' in data
class TestNavigationLinks:
"""Tests de la navigation entre pages."""
def test_index_has_gestures_link(self, client):
"""La page d'accueil contient un lien vers /gestures."""
resp = client.get('/')
assert resp.status_code == 200
assert b'/gestures' in resp.data
def test_index_has_streaming_link(self, client):
"""La page d'accueil contient un lien vers /streaming."""
resp = client.get('/')
assert resp.status_code == 200
assert b'/streaming' in resp.data
def test_index_has_extractions_link(self, client):
"""La page d'accueil contient un lien vers /extractions."""
resp = client.get('/')
assert resp.status_code == 200
assert b'/extractions' in resp.data
def test_gestures_has_back_link(self, client):
"""La page gestures contient un lien retour vers le dashboard."""
resp = client.get('/gestures')
assert resp.status_code == 200
assert b'href="/"' in resp.data or b"href='/'" in resp.data