Skip to content

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

  1. Le dépôt est possible par glisser-déposer ou via un sélecteur de fichiers
  2. Tous les formats de fichiers sont acceptés, y compris les fichiers sans extension
  3. La taille maximale par fichier est de 50 Mo (paramétrable en variable d’environnement)
  4. Une barre de progression est affichée pendant l'upload
  5. 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 /upload affiche la zone de depot, le bouton Choisir les fichiers et le compteur x fichier(s).
  • Le depot fonctionne via input file et 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 a 99%, puis passe a 100% et done au succes.
  • En cas d'echec d'upload, le statut passe a error et la progression est reinitialisee.
  • Cote back, l'endpoint POST /documents est 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 /documents avec FormData
      • calcul de progression (onUploadProgress)
      • gestion des erreurs/fichier manquant
  • 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