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 :
| 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. |