Skip to content

test(server-nestjs): fix failing e2e specs and add admin HTTP validation specs - #2822

Open
shikanime wants to merge 1 commit into
mainfrom
fix/e2e-spec-alignment
Open

shikanime wants to merge 1 commit into
mainfrom
fix/e2e-spec-alignment

Conversation

@shikanime

@shikanime shikanime commented Oct 6, 2026 •

Copy link
Copy Markdown
Member

Pourquoi

Les specs e2e project-services et project-secrets échouaient systématiquement contre l'environnement d'intégration HP (constaté lors de la validation du jalon 9.27) : elles assertent un comportement antérieur à l'orchestration DSO, pas le contrat courant. Accessoirement, les deux specs admin HTTP utilisaient des mocks de service, hors convention e2e.

Quoi

  • project-services.e2e-spec.ts : renommage canRunServicesE2E/describeWithServices → canRunProjectServicesE2E/describeWithProjectServices, aligné sur toutes les autres specs du dossier ; stub de USE_GITLAB/USE_NEXUS avant la compilation du module — sans eux, ConditionalModule.registerWhen ne registra que keycloak et get() renvoyait une liste vide. Vérifié : 3/3 passent.
  • project-secrets.e2e-spec.ts : les URLs de dépôts NEXUS sont désormais synthétisées par le plugin depuis la config ; la spec active les dépôts npm/maven du projet (ProjectPlugin) et asserte explicitement les trois URLs synthétisées (MAVEN_REPO_RELEASE, MAVEN_REPO_SNAPSHOT, NPM_REPO) au lieu d'un passe-plat KV brut. Assertion du groupe VAULT synthétique maintenue. Vérifié : 2/2 passent contre le Vault réel, 3 runs.
  • admin-role.e2e-spec.ts / admin-token.e2e-spec.ts : conversion en e2e réel (plus de mock) — UserGuard réel, AdminToken seedé en base, authentification via l'en-tête x-dso-token.
  • Bug corrigé au passage (dso-token.utils.ts) : makeAdminTokenSelect ne sélectionnait ni owner.id, ni status/expirationDate/permissions — chaque requête authentifiée par admin-token répondait 500 (user.update({ where: { id: undefined } })) et les permissions n'étaient jamais résolues. Invisible aux specs mockées ; révélé par la conversion e2e.

Preuves d'exécution (environnement d'intégration réel, INTEGRATION=true E2E=1) :

  • vitest run test/project-secrets.e2e-spec.ts → 2/2 passed (x3)
  • vitest run test/admin-role.e2e-spec.ts test/admin-token.e2e-spec.ts → 8/8 passed (x2)

Références

  • Issue Industrialiser les tests E2E de server-nestjs #2417 (industrialisation des tests E2E)
  • Constat initial : validation e2e du jalon 9.27.0 — ces 4 échecs étaient les seuls reproductibles déterministiquement ; les autres (SonarQube 401 token expiré, Keycloak admin invalid_grant sur le compte dsoadmin) sont environnementaux.

@shikanime
shikanime requested a review from a team as a code owner October 6, 2026 09:29
@github-actions github-actions Bot added the built label Oct 6, 2026
@shikanime
shikanime marked this pull request as draft October 6, 2026 09:39
@shikanime
shikanime force-pushed the fix/e2e-spec-alignment branch from d078d35 to 2d4f6ba Compare October 6, 2026 09:56
@shikanime

Copy link
Copy Markdown
Member Author

Couverture des fonctionnalités du jalon 9.27 ajoutée (suite) :

  • AdminRole : nouvelle spec HTTP e2e test/admin-role.e2e-spec.ts — codes de statut (200/201/204), validation zod du body (POST sans name → 400, PATCH avec position: -1 → 400), pipe uuid sur DELETE /:roleId (400) et délégation au service. Complète les specs unitaires existantes (service + ponts d'événements).
  • AdminToken : e2e étendue au DELETE (pipe uuid → 400, 204 + délégation revoke).
  • Stage et User restent couverts côté unitaire (specs controller+service) : surfaces CRUD fines, pas de comportement multi-services à priver en e2e.

vitest run sur les 4 fichiers modifiés/nouveaux : 15/15 passed (E2E=1 INTEGRATION=true).

@shikanime
shikanime force-pushed the fix/e2e-spec-alignment branch from 2d4f6ba to 96c8677 Compare October 6, 2026 10:52

@StephaneTrebel StephaneTrebel left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Les corrections des deux scénarios d’intégration sont cohérentes avec les services Nest actuels et les contrôles CI sont verts. Les ajouts HTTP admin restent isolés du réseau externe ; aucun point bloquant relevé, mais la MR est encore en brouillon et ne reçoit pas d’approbation.

@shikanime shikanime left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alignement justifié : les specs cassaient sur un contrat antérieur à l'orchestration DSO, et les preuves d'exécution (5/5 contre l'environnement d'intégration réel) appuient l'adaptation. La suppression de l'écriture KV brute NEXUS est cohérente avec la nouvelle synthèse côté plugin, mais l'assertion de remplacement est vacuelle et les cas false/null ne sont plus couverts nulle part. Le nouveau spec admin-role est un plus (validation HTTP 400/201/204) mais utilise mock() là où la convention ratifiée demande mockDeep. Le flag draft reste approprié tant que la campagne e2e du jalon 9.27 n'est pas soldée. Détail : le corps commence par un # Why en h1 au lieu du format ## What/## Why attendu.

Comment thread apps/server-nestjs/test/project-secrets.e2e-spec.ts Outdated
Comment thread apps/server-nestjs/test/project-secrets.e2e-spec.ts Outdated
Comment thread apps/server-nestjs/test/admin-role.e2e-spec.ts Outdated
@shikanime shikanime self-assigned this Oct 8, 2026
@shikanime
shikanime force-pushed the fix/e2e-spec-alignment branch 2 times, most recently from 9c4ce19 to 7b7678f Compare October 8, 2026 12:54
@shikanime shikanime changed the title test(server-nestjs): align project services and secrets e2e specs with DSO orchestration test(server-nestjs): fix failing e2e specs and add admin HTTP validation specs Oct 8, 2026
@shikanime
shikanime force-pushed the fix/e2e-spec-alignment branch from 7b7678f to e1b2461 Compare October 8, 2026 13:24
@shikanime
shikanime marked this pull request as ready for review October 8, 2026 13:27
…nd naming

Aligns the two outliers with the established conventions: project-services renames
canRunServicesE2E/describeWithServices to
canRunProjectServicesE2E/describeWithProjectServices matching every other spec;
admin-role/admin-token HTTP specs gain the runIf(E2E) gate + canRun*/describeWith*
naming used by the rest of the folder.

Converts the admin-role/admin-token HTTP specs to real e2e: no mocks, real Prisma
and the real UserGuard auth chain (seeded AdminToken + x-dso-token header). This
uncovered a genuine bug: makeAdminTokenSelect never selected owner.id (nor
status/expirationDate/permissions), so every admin-token authenticated request
crashed in updateLastUse with `user.update({ where: { id: undefined } })` (HTTP
500) and token permissions were never resolved. The select is fixed at the shared
source; both specs pass 2x consecutively against the integration environment.

Refs #2417

Co-authored-by: Automata <automata@shikanime.studio>
Signed-off-by: William Phetsinorath <william.phetsinorath-open@interieur.gouv.fr>
Change-Id: I94bffa90189d5608ee0cb8b989259db56a6a6964
@shikanime
shikanime force-pushed the fix/e2e-spec-alignment branch from e1b2461 to 5f28da0 Compare October 8, 2026 13:32
@cloud-pi-native-sonarqube

Copy link
Copy Markdown

@StephaneTrebel StephaneTrebel left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✨ Revue sans finding : le select AdminToken couvre désormais les champs consommés par l’authentification, et les tests HTTP utilisent le vrai guard avec une donnée persistée. La CI est verte ; aucune issue n’est liée directement à cette MR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants