Appearance
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
- Si le fichier est trop volumineux : message "Fichier trop volumineux (max 50 Mo)"
- Si la connexion est interrompue : message "Échec du dépôt — vérifiez votre connexion"
- 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,
errorMessagepar entrée dansfiles, mapping des messages à partir deerror.response.data.message,retryFileUpload/removeFile.
- validation taille avant appel API,
- Ligne de fichier :
front/src/components/upload/FileUploadListItem.vue- libellé de statut (
Erreur/Erreur : …), boutons retry / delete uniquement sistatus === 'error'.
- libellé de statut (
- Store :
front/src/stores/files-store.jsPOST /documentsenmultipart/form-data,onUploadProgress; en cas d’échec :console.erroravec 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 danserror.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).
- tout type de fichier accepte ; taille max via
- Back — exceptions documents :
back/src/exceptions/document.exceptions.ts- messages API alignés avec le mapping front (
File is too large., etc.).
- messages API alignés avec le mapping front (
- 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 avecFILE_SIZE_LIMITcô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
FileUploadListItemou équivalent selon version du fichier).
- scénarios liste / validation client / erreurs API simulées / messages distincts par fichier / retry / remove (stub
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).
- statuts, message d’erreur détaillé, visibilité des actions, émissions
Front — store :
front/src/__tests__/stores/files-store.spec.jsPOST /documents, progression, fichier absent, journalisationconsole.erroravec ou sansresponse.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 **/documentspour erreur API puis retry ou supprimer.
- deux fichiers, interception
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.
- clé unique (UUID court), buffer vs
