Skip to content

BDD-58 — Consultation source Heriade

1. User Story

En tant qu'administrateur,
Je veux consulter les données d'une source Heriade,
Afin de vérifier le contenu chargé et naviguer dans les données.

2. Critères d'acceptance

  1. Les données sont affichées dans un tableau paginé (20 lignes par page par défaut).
  2. Les colonnes sont affichées avec leur nom et leur type.
  3. L'utilisateur peut trier par colonne (ascendant / descendant).
  4. Le nombre total de lignes est affiché.
  5. La date de dernier chargement est affichée (priorité updatedAt, sinon createdAt).
  6. Depuis la liste des sources, l'accès à la consultation se fait via un menu d'actions.

3. Périmètre fonctionnel

Frontend

  • Liste des sources (action de consultation) : front/src/pages/admin/sources/AdminSourcesPage.vue
  • Page de consultation : front/src/pages/admin/sources/AdminSourceDetailPage.vue
  • Routage : front/src/router/routes.js
  • Store Pinia : front/src/stores/source-store.js
  • Tests page liste : front/src/__tests__/pages/admin/sources/AdminSourcesPage.spec.js
  • Tests page détail : front/src/__tests__/pages/admin/sources/AdminSourceDetailPage.spec.js
  • Tests routing : front/src/__tests__/router/routes.spec.js
  • Tests store : front/src/__tests__/stores/source-store.spec.js

Backend

  • Controller : back/src/api/sources/sources.controller.ts
  • Service principal : back/src/api/sources/sources.service.ts
  • DTO : back/src/api/sources/dto/source.dto.ts
  • Presenter : back/src/api/sources/source.presenter.ts
  • Tests unitaires service : back/src/api/sources/sources.service.spec.ts
  • Tests E2E controller : back/test/e2e/sources-controller.e2e-spec.ts

Endpoints

MéthodeRouteRôle
GET/sources/:uuid/dataRetourne les données d'une source avec pagination, tri, colonnes typées, total et date de dernier chargement
GET/sourcesAlimente la liste des sources et le menu d'accès à la consultation

4. Points de vérification

  • Depuis AdminSourcesPage, chaque source propose une action Consulter via ActionMenuButton.
  • Le clic sur Consulter redirige vers /sources/:uuid.
  • Le backend protège GET /sources/:uuid/data avec AuthGuard + AdminGuard.
  • La réponse GET /sources/:uuid/data contient :
    • columns (avec name, type),
    • rows,
    • total, page, limit,
    • lastLoadedAt.
  • Le tri accepte sortBy et sortOrder (asc, desc) et refuse les colonnes invalides.
  • La pagination front s'appuie sur page, limit, total renvoyés par l'API.
  • L'affichage "Dernier chargement" utilise updatedAt si présent, sinon createdAt.
  • Dans la vue détail, le tableau affiche :
    • en-têtes lisibles,
    • type de colonne affiché (mapping métier front),
    • déclenchement du tri par colonne.

5. Tests associés

Tests unitaires back

  • back/src/api/sources/sources.service.spec.ts
    • getSourceData : récupération des colonnes + lignes paginées,
    • getSourceData : erreur 400 si sortBy invalide,
    • getSourceData : fallback created_at si updated_at est null.

Tests E2E back (Supertest)

  • back/test/e2e/sources-controller.e2e-spec.ts
    • GET /sources/:uuid/data : 401 sans token,
    • GET /sources/:uuid/data : 403 pour rôle non admin,
    • GET /sources/:uuid/data : 400 UUID invalide,
    • GET /sources/:uuid/data : 404 source introuvable.

Tests unitaires front

  • front/src/__tests__/pages/admin/sources/AdminSourcesPage.spec.js
    • chargement initial de la liste,
    • affichage "Dernier chargement" (updatedAt puis createdAt),
    • navigation via action menu Consulter,
    • pagination liste.
  • front/src/__tests__/pages/admin/sources/AdminSourceDetailPage.spec.js
    • chargement initial des données,
    • état vide et état loading,
    • affichage colonnes/lignes,
    • mapping des types affichés,
    • tri asc/desc,
    • pagination,
    • navigation retour vers /sources.
  • front/src/__tests__/stores/source-store.spec.js
    • fetchSourceData : envoi des paramètres page/limit/sortBy/sortOrder,
    • fetchSourceData : hydratation du state de consultation,
    • resetSourceDataState : remise à zéro de l'état.
  • front/src/__tests__/router/routes.spec.js
    • présence de la route sources/:uuid avec sourcesGuard.