Appearance
BDD-13 — Depot de fichier
1. User Story
En tant que client externe Je veux déposer un ou plusieurs fichiers Afin de les transmettre à l'équipe sans passer par email ou Drive
2. Criteres d'acceptance
- Le dépôt est possible par glisser-déposer ou via un sélecteur de fichiers
- Tous les formats de fichiers sont acceptés, y compris les fichiers sans extension
- La taille maximale par fichier est de 50 Mo (paramétrable en variable d’environnement)
- Une barre de progression est affichée pendant l'upload
- Une confirmation visuelle est affichée une fois le fichier reçu
3. Perimetre fonctionnel
- Page de depot front:
front/src/pages/upload/UploadPage.vue - Item de liste + statuts/progression:
front/src/components/upload/FileUploadListItem.vue - Store front pour les fichiers:
front/src/stores/files-store.js - Endpoint back de depot:
back/src/api/documents/document.controller.ts - Service back de validation + creation document:
back/src/api/documents/document.service.ts - Helper S3 d'upload:
back/src/domains/s3Helper/uploadFile.ts
4. Points de verification
- La page
/uploadaffiche la zone de depot, le boutonChoisir les fichierset le compteurx fichier(s). - Le depot fonctionne via
input fileet via glisser-deposer. - Tous les formats sont acceptes si le fichier respecte la limite de taille.
- Les fichiers depassant la limite (50 Mo par defaut) sont rejetes avec notification; la limite exacte est acceptee.
- Les fichiers valides sont ajoutes a la liste et le compteur est mis a jour.
- Pendant l'upload, le statut passe
pending -> uploading, la progression est borne a99%, puis passe a100%etdoneau succes. - En cas d'echec d'upload, le statut passe a
erroret la progression est reinitialisee. - Cote back, l'endpoint
POST /documentsest protege (401 sans token / token invalide), valide la presence de fichier et la taille, puis persiste le document.
5. Tests associes
Tests unitaires front:
front/src/__tests__/pages/upload/UploadPage.spec.js- etat initial de la page upload
- ajout via input (1 fichier, multi-fichiers, fichier avec extension arbitraire, fichier sans extension)
- refus depassement de taille + acceptation limite exacte
- drag visuel (
upload-hero--active) et drop - ouverture du file picker au clic bouton
front/src/__tests__/stores/files-store.spec.js- appel
POST /documentsavecFormData - calcul de progression (
onUploadProgress) - gestion des erreurs/fichier manquant
- appel
Tests e2e front (Playwright):
front/e2e/pages/upload/upload.spec.js- acces reel apres login
- ajout d'un CSV via input
- depot de formats arbitraires
- verification du succes (
Fichier enregistre,100%)
front/e2e/login.spec.js- verification de la redirection login reel vers la nouvelle UI upload
Tests back:
back/src/api/documents/document.service.spec.ts- fichier manquant, extensions arbitraires, fichier sans extension, succes creation, path fallback, erreur creation
back/src/domains/s3Helper/uploadFile.spec.ts- upload buffer, erreur, cas invalides
back/test/e2e/documents-controller.e2e-spec.ts- 401 sans auth / token invalide
- cas reel avec token valide + validation taille apres acceptation d'un fichier sans extension
