[Mineur] Channels d'event : orphelins, suppression en cascade inverse et nom vide #127

Closed
opened 2026-10-28 10:32:16 +00:00 by asventi · 0 comments
Owner

Gravité : Mineur
Rapports QA d'origine : EVENTS-08, EVENTS-09, EVENTS-16, EVENTS-05

Le channel survit à la suppression de l'event ; un échec de création laisse un channel orphelin diffusé à tous ; supprimer le channel supprime l'event ; un nom !!! donne un channel au nom vide.

Détails des rapports

[EVENTS-08] Channels orphelins : le channel d'un event survit à la suppression de l'event (messages inclus) — Gravité : Mineur
  • Où : DELETE /api/events/{id} (et CleanUp)
  • Étapes : 1. org crée E2 (channel C2). 2. un user poste un message dans C2. 3. DELETE /events/E2 -> 204. 4. GET /channels / GET /channels/C2/messages.
  • Attendu : le channel (et ses messages) est supprimé avec l'event, ou archivé explicitement.
  • Obtenu : GET /channels contient toujours C2 avec eventId = id de l'event supprimé ; GET /channels/C2/messages -> 200 avec les messages, lisibles par tout user connecté qui connaît l'id. Avant mes tests la base contenait déjà 5 channels d'events disparus (default-event, test x3, super).
  • Impact visible limité : la sidebar filtre !ch.eventId (frontend/src/components/Sidebar/Sidebar.tsx:60), donc le channel orphelin n'apparaît pas dans l'UI, mais s'accumule en base.
  • Cause probable : FK Event.ChannelId en OnDelete(Cascade) (backend/API/Database.cs:30-32) : supprimer le channel supprime l'event, pas l'inverse. DeleteEventCommand.cs:18 et CleanUp/CleanUp.cs:64 ne suppriment pas le channel.
  • Statut : re-vérifié.
[EVENTS-09] Échec de création d'event -> channel orphelin créé et diffusé à tout le monde — Gravité : Mineur
  • Où : POST /api/events qui échoue après la création du channel (ex. tags: null ou description: null -> 500)
  • Obtenu : le channel (qa_events_null_tags, qa_events_nulltags2, ...) reste dans GET /api/channels avec un eventId inexistant ; en plus CreateChannelCommand envoie NewChannel à tous les clients connectés (le channel apparaît dans leur liste).
  • Cause probable : CreateEventCommand.cs:46-57 crée/sauvegarde le channel (via CreateChannelCommand, qui fait son propre SaveChanges + broadcast hub.Clients.All) avant de sauver l'event ; pas de transaction.
  • Statut : re-vérifié (4 channels orphelins après 4 POST en échec).
[EVENTS-16] Supprimer le channel d'un event (DELETE /channels/{id}) supprime l'event et ses inscriptions en cascade — Gravité : Mineur
  • Étapes : DELETE /channels/{C3} (admin) -> 204 ; GET /events/{E3} -> 404. Le sens de la FK est inversé par rapport à l'attente (event supprimé -> channel conservé ; channel supprimé -> event supprimé).
  • Cause probable : Database.cs:28-32. Pas de garde dans DeleteChannelCommand.cs pour les channels portant un EventId, ni de mise à jour RAG.
[EVENTS-05] Nom composé uniquement de caractères spéciaux (ex. `!!!`) -> channel d'event avec nom vide — Gravité : Mineur
  • Où : POST /api/events avec name: "!!!"
  • Obtenu : 201, channel associé name: "".
  • Cause probable : CreateEventCommand.cs:46 (ChannelSlug.Sanitize renvoie "" et CreateChannelCommand ne rejette pas le nom vide, regex ChannelNameValidation ne matche pas "").
  • Statut : confirmé (1re passe).

Trouvé par une campagne de tests QA automatisés (agents Claude, Playwright) sur l'environnement de dev. Les captures citées sont locales et non jointes.

**Gravité :** Mineur **Rapports QA d'origine :** EVENTS-08, EVENTS-09, EVENTS-16, EVENTS-05 Le channel survit à la suppression de l'event ; un échec de création laisse un channel orphelin diffusé à tous ; supprimer le channel supprime l'event ; un nom `!!!` donne un channel au nom vide. ## Détails des rapports <details><summary>[EVENTS-08] Channels orphelins : le channel d'un event survit à la suppression de l'event (messages inclus) — Gravité : Mineur</summary> - Où : `DELETE /api/events/{id}` (et CleanUp) - Étapes : 1. org crée E2 (channel C2). 2. un user poste un message dans C2. 3. `DELETE /events/E2` -> 204. 4. `GET /channels` / `GET /channels/C2/messages`. - Attendu : le channel (et ses messages) est supprimé avec l'event, ou archivé explicitement. - Obtenu : `GET /channels` contient toujours C2 avec `eventId` = id de l'event supprimé ; `GET /channels/C2/messages` -> 200 avec les messages, lisibles par tout user connecté qui connaît l'id. Avant mes tests la base contenait déjà 5 channels d'events disparus (`default-event`, `test` x3, `super`). - Impact visible limité : la sidebar filtre `!ch.eventId` (`frontend/src/components/Sidebar/Sidebar.tsx:60`), donc le channel orphelin n'apparaît pas dans l'UI, mais s'accumule en base. - Cause probable : FK `Event.ChannelId` en `OnDelete(Cascade)` (`backend/API/Database.cs:30-32`) : supprimer le channel supprime l'event, pas l'inverse. `DeleteEventCommand.cs:18` et `CleanUp/CleanUp.cs:64` ne suppriment pas le channel. - Statut : re-vérifié. </details> <details><summary>[EVENTS-09] Échec de création d'event -> channel orphelin créé et diffusé à tout le monde — Gravité : Mineur</summary> - Où : `POST /api/events` qui échoue après la création du channel (ex. `tags: null` ou `description: null` -> 500) - Obtenu : le channel (`qa_events_null_tags`, `qa_events_nulltags2`, ...) reste dans `GET /api/channels` avec un `eventId` inexistant ; en plus `CreateChannelCommand` envoie `NewChannel` à tous les clients connectés (le channel apparaît dans leur liste). - Cause probable : `CreateEventCommand.cs:46-57` crée/sauvegarde le channel (via `CreateChannelCommand`, qui fait son propre `SaveChanges` + broadcast `hub.Clients.All`) avant de sauver l'event ; pas de transaction. - Statut : re-vérifié (4 channels orphelins après 4 POST en échec). </details> <details><summary>[EVENTS-16] Supprimer le channel d'un event (DELETE /channels/{id}) supprime l'event et ses inscriptions en cascade — Gravité : Mineur</summary> - Étapes : `DELETE /channels/{C3}` (admin) -> 204 ; `GET /events/{E3}` -> 404. Le sens de la FK est inversé par rapport à l'attente (event supprimé -> channel conservé ; channel supprimé -> event supprimé). - Cause probable : `Database.cs:28-32`. Pas de garde dans `DeleteChannelCommand.cs` pour les channels portant un `EventId`, ni de mise à jour RAG. </details> <details><summary>[EVENTS-05] Nom composé uniquement de caractères spéciaux (ex. `!!!`) -> channel d'event avec nom vide — Gravité : Mineur</summary> - Où : `POST /api/events` avec `name: "!!!"` - Obtenu : 201, channel associé `name: ""`. - Cause probable : `CreateEventCommand.cs:46` (`ChannelSlug.Sanitize` renvoie "" et `CreateChannelCommand` ne rejette pas le nom vide, regex `ChannelNameValidation` ne matche pas ""). - Statut : confirmé (1re passe). </details> --- _Trouvé par une campagne de tests QA automatisés (agents Claude, Playwright) sur l'environnement de dev. Les captures citées sont locales et non jointes._
Equoo self-assigned this 2026-10-28 11:54:12 +00:00
Equoo closed this issue 2026-10-29 12:02:57 +00:00
Equoo referenced this issue from a commit 2026-10-29 12:26:22 +00:00
Equoo referenced this issue from a commit 2026-10-29 13:05:36 +00:00
Equoo referenced this issue from a commit 2026-10-31 19:16:18 +00:00
asventi referenced this issue from a commit 2026-11-02 13:08:20 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Transcendence/backend#127
No description provided.