Aller au contenu

Pipeline

Le tableau ci-dessous présente les cas de test du pipeline de données financières, et la légende qui le suit explique comment les interpréter.

🗃️ Cas de test

Taux de couverture fonctionnelle : 87%

Statut ID Titre
● Actif tc-pipe01 Import complet avec gestion des devises
● Actif tc-pipe02 Nettoyage et validation des données CSV
● Actif tc-pipe03 Synchronisation des titres et suppression des obsolètes
● Actif tc-pipe-qty01 Réimporter cours et métriques sans remplacer les quantités du registre par celles du CSV
● Actif tc-pipe-fail01 Gestion d'un CSV corrompu
● Actif tc-pipe-date01 Vérification de la logique de date (veille de marché)
● Actif tc-pipe-schedule01 Le cron UTC cible la dernière séance terminée en heure d'été et d'hiver, y compris le vendredi
● Actif tc-pipe-schedule02 L'exécution du samedi récupère, persiste et affiche le snapshot du vendredi 30 octobre
● Actif tc-pipe-csv01 Nettoyage des quantités CSV (<0.1, nombres avec espaces)
● Actif tc-pipe-nocsv01 Absence de repli CSV quand la clé API est présente
● Actif tc-pipe-date02 Rattrapage autorisé le lundi matin uniquement après un échec enregistré
● Actif tc-pipe-date03 Exécution du lundi bloquée en l'absence d'échec précédent
● Actif tc-pipe-fail02 Les exceptions inattendues sont enregistrées en état d'échec pour les décisions suivantes
● Actif tc-pipe-date04 Garde calendrier : l'exécution du dimanche est bloquée
● Actif tc-pipe-integrity01 Le schéma historique refuse un second prix pour le même titre à la même date
● Actif tc-pipe-integrity02 Une réimportation de la même date met à jour la ligne existante sans créer de doublon
● Actif tc-pipe-fx01 Les prix USD sont convertis en CAD, les prix déjà en CAD restent inchangés
● Actif tc-pipe-catchup01 Le calendrier de rattrapage exclut les fins de semaine entre deux dates
● Actif tc-pipe-catchup02 Le calendrier de rattrapage retourne une liste vide si la période est déjà à jour
● Actif tc-pipe-quota01 Bornes de classification des modes quota (normal, eco, protection, blocked)
● Actif tc-pipe-quota02 Le mode blocked annule l'enrichissement API et émet une alerte quota
● Actif tc-pipe-quota03 Le retry cible seulement les titres manquants et ne s'exécute qu'une fois
● Actif tc-pipe-quota04 Le mode eco désactive le retry sans alerte quota
● Actif tc-pipe-quota05 Le mode protection désactive le retry et envoie une alerte quota distincte
● Actif tc-pipe-quota06 Fail-open de lecture quota sur timeout ou erreur de /v1/account
● Actif tc-pipe-quota07 La configuration quota absente retombe sur les défauts et journalise l'événement
● Actif tc-pipe-quota08 /v1/account est appelé avant la première requête /v2/eod
● Actif tc-pipe-quota09 Des seuils quota invalides retombent sur les défauts avec log invalid_thresholds
● Actif tc-pipe-quota10 Les transitions de mode sont journalisées via quota_mode_change entre deux runs
● Actif tc-pipe-quota11 Si /v1/account est indisponible, le compteur quota local mensuel est utilisé puis mis à jour
● Actif tc-pipe-smtp01 Le mode STARTTLS utilise SMTP avec timeout configuré
● Actif tc-pipe-smtp02 Le mode SSL utilise le transport SMTP_SSL
● Actif tc-pipe-smtp03 Un mode SMTP invalide est fail-open (aucune tentative d'envoi)
● Actif tc-pipe-smtp04 Une configuration SMTP incomplète est fail-open (aucune tentative d'envoi)
● Actif tc-pipe-smtp05 Le contenu du courriel inclut des instructions (logs + lien de documentation)
● Actif tc-pipe-ticker01 L'insertion d'un ticker de longueur standard réussit
● Actif tc-pipe-ticker02 L'insertion d'un ticker à la longueur maximale du schéma (255 caractères) réussit
● Actif tc-pipe-api01 API Marketstack : Résilience au Timeout
● Actif tc-pipe-api02 API Marketstack : Gestion erreur 500 / JSON invalide
● À Faire Script d'import : fail-fast si les variables d'environnement DB sont absentes (import_data.py)
● À Faire Script d'import : fail-fast en cas d'échec de connexion DB (import_data.py)
● À Faire Script d'import : fail-fast si le CSV source est introuvable (import_data.py)
● À Faire Mode quota blocked : arrêt avant enrichissement et persistance de l'état d'échec
● À Faire Échec envoi SMTP : journalise smtp_alert_send_failure et continue en fail-open
● À Faire Erreur API Marketstack irrécoverable : déclenche le chemin d'alerte opérateur API

Calcul du taux fonctionnel de cette page : 39 cas actifs / 45 cas définis = 87 %.

Validation ciblée du 31 octobre 2026 : 74 tests réussis (calendrier, pipeline et dashboard), avec deux avertissements attendus du CSV corrompu. La couverture de code de pipeline.py sur cette sélection est de 70,93 %; elle est distincte du taux fonctionnel ci-dessus et ne mesure pas la couverture globale du dépôt.

Le test de réimport conserve dix actions du registre même lorsque le CSV en annonce dix-huit, tout en actualisant le cours. Les contrôles complémentaires couvrent sept actions à la date du relevé malgré une transaction future et un cache divergent, ainsi que zéro action pour un nouveau titre sans transaction. Le retrait des titres absents du CSV conserve la suppression des transactions avant les relevés et le titre; un fichier vide ne provoque pas de suppression générale.

ⓘ Légende du statut de couverture

Statut Description
● Actif Le cas de test est implémenté et validé par un test automatisé pytest ou Playwright.
● À Faire Le cas de test est défini mais n'a pas encore de test automatisé correspondant.