Skip to content

BDD-14 — Gestion des erreurs de depot

1. User Story

En tant que client externe Je veux être informé clairement en cas d'échec de dépôt Afin de pouvoir corriger le problème et réessayer

2. Criteres d'acceptance

  1. Si le fichier est trop volumineux : message "Fichier trop volumineux (max 50 Mo)"
  2. Si la connexion est interrompue : message "Échec du dépôt — vérifiez votre connexion"
  3. Les actions "Réessayer" et "Supprimer" sont proposées sur chaque fichier en erreur

3. Perimetre fonctionnel

  • Page upload : front/src/pages/upload/UploadPage.vue
    • validation taille avant appel API, errorMessage par entrée dans files, mapping des messages à partir de error.response.data.message, retryFileUpload / removeFile.
  • Ligne de fichier : front/src/components/upload/FileUploadListItem.vue
    • libellé de statut (Erreur / Erreur : …), boutons retry / delete uniquement si status === 'error'.
  • Store : front/src/stores/files-store.js
    • POST /documents en multipart/form-data, onUploadProgress ; en cas d’échec : console.error avec le message API si présent, puis relance de l’erreur (pas de state d’erreur global).
  • Client HTTP : front/src/boot/axios.js (corps d’erreur dans error.response.data).
  • Back — dépôt : back/src/api/documents/document.service.ts
    • tout type de fichier accepte ; taille max via FILE_SIZE_LIMIT (nombre, défaut 50 Mo).
  • Back — exceptions documents : back/src/exceptions/document.exceptions.ts
    • messages API alignés avec le mapping front (File is too large., etc.).
  • Back — réponse HTTP unifiée : back/src/exceptions/allExceptions.filter.ts, back/src/exceptions/handleExceptions.ts.

4. Points de verification

  • Rejet avant upload : taille > limite → notify négative Quasar, fichier non ajouté à la liste, compteur inchangé.
  • Après ajout à la liste, échec API → statut error, progression à 0, texte d’erreur lisible sur cette ligne uniquement.
  • Correspondance des libellés : File is too large. → fichier trop volumineux (avec la limite affichée cohérente avec FILE_SIZE_LIMIT côté front).
  • Succès après retry : message d’erreur effacé, statut done, progression 100 %.
  • Supprimer : la ligne disparaît et le compteur fichier(s) est mis à jour.
  • Côté back, les tests unitaires couvrent aussi les fichiers sans extension et les extensions arbitraires.

5. Tests associes

  • Front — page upload : front/src/__tests__/pages/upload/UploadPage.spec.js

    • scénarios liste / validation client / erreurs API simulées / messages distincts par fichier / retry / remove (stub FileUploadListItem ou équivalent selon version du fichier).
  • Front — composant ligne : front/src/__tests__/components/upload/FileUploadListItem.spec.js

    • statuts, message d’erreur détaillé, visibilité des actions, émissions retry-file / remove-file, barre lente (fichier volumineux + uploading).
  • Front — store : front/src/__tests__/stores/files-store.spec.js

    • POST /documents, progression, fichier absent, journalisation console.error avec ou sans response.data.message, propagation de l’erreur.
  • Front — e2e (Playwright, sous réserve de E2E_REAL_AUTH + identifiants) : front/e2e/pages/upload/upload.spec.js

    • deux fichiers, interception POST **/documents pour erreur API puis retry ou supprimer.
  • Back — service documents : back/src/api/documents/document.service.spec.ts

    • cas succès / erreurs avec extensions arbitraires et fichiers sans extension.
  • Back — S3 : back/src/domains/s3Helper/uploadFile.spec.ts

    • clé unique (UUID court), buffer vs path, erreurs.