# Rolebase

# Protocole de validation

# Plan de test — RoleBase UdN v12

**Version** : 12.0 — **Date** : 21/05/2026  
**Objectif** : Valider les fonctionnalités de la plateforme après chaque déploiement

Voila le lien vers le fchier excel modèle : https://partage.universite-du-nous.org/s/gxffxSKnB8Rdxxq

---

## Comment utiliser ce plan

<table id="bkmrk-symbole-significatio"><thead><tr><th>Symbole</th><th>Signification</th></tr></thead><tbody><tr><td>✅</td><td>Test passé</td></tr><tr><td>❌</td><td>Test échoué — bug à documenter</td></tr><tr><td>⚠️</td><td>Test partiel — comportement dégradé</td></tr><tr><td>—</td><td>Non testé</td></tr></tbody></table>

Pour chaque test : remplir la colonne **Résultat**, **Commentaire** et **Bug** dans le fichier Excel associé.

---

## AUTH — Authentification

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis-"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>AUTH-01</td><td>Se connecter avec email/mot de passe valide</td><td>Compte existant</td><td>Redirection vers le tableau de bord de l'orga</td></tr><tr><td>AUTH-02</td><td>Se connecter avec email/mot de passe invalide</td><td>Compte existant</td><td>Message d'erreur affiché, pas de redirection</td></tr><tr><td>AUTH-03</td><td>Créer un nouveau compte</td><td>Email non utilisé</td><td>Compte créé, email de confirmation envoyé</td></tr><tr><td>AUTH-04</td><td>Se déconnecter</td><td>Être connecté</td><td>Redirection vers la page de connexion</td></tr></tbody></table>

---

## ORG — Organisation

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis--1"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>ORG-01</td><td>Créer une nouvelle organisation</td><td>Être connecté</td><td>Organisation créée, redirection vers l'orga</td></tr><tr><td>ORG-02</td><td>Modifier le nom et logo de l'orga</td><td>Être admin de l'orga</td><td>Modifications sauvegardées et visibles</td></tr><tr><td>ORG-03</td><td>Modifier la couleur d'accent</td><td>Être admin de l'orga</td><td>Couleur appliquée sur l'interface</td></tr><tr><td>ORG-04</td><td>Modifier le message de bienvenue</td><td>Être admin de l'orga</td><td>Message visible sur la page d'accueil</td></tr><tr><td>ORG-05</td><td>Changer le mode de gouvernance (Libre/Agile/Holacratique)</td><td>Être admin</td><td>Permissions UI adaptées au mode choisi</td></tr><tr><td>ORG-06</td><td>Passer en mode Holacratique → confirmation modale</td><td>Être admin</td><td>Modale de confirmation affichée, rôles structurels créés</td></tr></tbody></table>

---

## ORG — Organigramme

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis--2"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>ORG-10</td><td>Visualiser l'organigramme</td><td>Orga avec cercles</td><td>Cercles et rôles affichés correctement</td></tr><tr><td>ORG-11</td><td>Cliquer sur un cercle → voir les sous-cercles</td><td>Cercle avec enfants</td><td>Sous-cercles affichés</td></tr><tr><td>ORG-12</td><td>Filtrer par 'Mes rôles'</td><td>Être membre d'un rôle</td><td>Seuls mes rôles sont mis en surbrillance</td></tr><tr><td>ORG-13</td><td>Distinction visuelle cercle (🫧 small-caps) vs rôle</td><td>Orga avec cercles et rôles</td><td>Cercles en small-caps, rôles normaux</td></tr></tbody></table>

---

## ROLE — Rôles &amp; Cercles

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis--3"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>ROLE-01</td><td>Créer un nouveau rôle dans un cercle</td><td>Être admin/leader</td><td>Rôle créé et visible dans l'organigramme</td></tr><tr><td>ROLE-02</td><td>Modifier la raison d'être d'un rôle</td><td>Être admin/leader</td><td>Modification sauvegardée</td></tr><tr><td>ROLE-03</td><td>Ajouter des redevabilités à un rôle</td><td>Être admin/leader</td><td>Redevabilités sauvegardées et affichées</td></tr><tr><td>ROLE-04</td><td>Ajouter des règles communes à un rôle</td><td>Être admin/leader</td><td>Règles sauvegardées</td></tr><tr><td>ROLE-05</td><td>Assigner un membre à un rôle</td><td>Être admin/leader + membre existant</td><td>Membre assigné, visible dans l'organigramme</td></tr><tr><td>ROLE-06</td><td>Retirer un membre d'un rôle (bouton UserMinus)</td><td>Membre assigné</td><td>Membre retiré du rôle</td></tr><tr><td>ROLE-07</td><td>Archiver un rôle</td><td>Être admin/leader</td><td>Rôle archivé et non visible</td></tr><tr><td>ROLE-08</td><td>Créer un cercle (sous-groupe)</td><td>Être admin/leader</td><td>Cercle créé avec rôles structurels</td></tr></tbody></table>

---

## MBR — Membres

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis--4"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>MBR-01</td><td>Inviter un nouveau membre par email</td><td>Être admin</td><td>Email d'invitation envoyé</td></tr><tr><td>MBR-02</td><td>Ajouter un membre sans email</td><td>Être admin</td><td>Membre créé sans compte utilisateur</td></tr><tr><td>MBR-03</td><td>Voir la liste des membres</td><td>Être connecté</td><td>Liste complète des membres affichée</td></tr></tbody></table>

---

## TENS — Tensions

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis--5"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>TENS-01</td><td>Créer une tension opérationnelle depuis le menu</td><td>Être connecté</td><td>Tension créée avec badge OPÉ</td></tr><tr><td>TENS-02</td><td>Créer une tension de gouvernance depuis le menu</td><td>Être connecté</td><td>Tension créée avec badge GOUV</td></tr><tr><td>TENS-03</td><td>Créer une tension depuis la popup (nouveau bouton)</td><td>Être connecté</td><td>Popup avec champs Rôle et Type visibles (layout colonne)</td></tr><tr><td>TENS-04</td><td>Remplir la description d'une tension</td><td>Tension créée</td><td>Description sauvegardée et affichée</td></tr><tr><td>TENS-05</td><td>Valider une tension (passer en Terminé)</td><td>Tension en cours</td><td>Tension dans la liste Terminé</td></tr><tr><td>TENS-06</td><td>Rejeter une tension (passer en Bloqué)</td><td>Tension en cours</td><td>Tension dans la liste Bloqué</td></tr><tr><td>TENS-07</td><td>Filtrer tensions par 'Mes rôles'</td><td>Être membre d'un rôle</td><td>Seules les tensions de mes rôles affichées</td></tr><tr><td>TENS-08</td><td>Filtrer tensions par 'Cercles'</td><td>Être membre d'un cercle</td><td>Tensions du cercle affichées</td></tr><tr><td>TENS-09</td><td>Filtrer tensions par 'Toute l'organisation'</td><td>Être connecté</td><td>Toutes les tensions de l'orga affichées</td></tr><tr><td>TENS-10</td><td>Voir le badge OPÉ/GOUV sur les tensions</td><td>Tensions des deux types</td><td>Badges colorés corrects</td></tr></tbody></table>

---

## PROJ — Projets

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis--6"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>PROJ-01</td><td>Créer un nouveau projet</td><td>Être connecté</td><td>Projet créé et visible dans la liste</td></tr><tr><td>PROJ-02</td><td>Modifier le statut d'un projet</td><td>Projet existant</td><td>Statut mis à jour</td></tr><tr><td>PROJ-03</td><td>Archiver un projet</td><td>Projet existant</td><td>Projet archivé et non visible</td></tr></tbody></table>

---

## PP — Prochains pas ⚠️ *Fortement modifié en v12*

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis--7"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>PP-01</td><td>Créer un prochain pas en réunion (avec note)</td><td>Être en réunion, tension ouverte</td><td>Prochain pas sauvegardé en BDD</td></tr><tr><td>PP-02</td><td>Créer un prochain pas en réunion (sans note)</td><td>Être en réunion, tension ouverte</td><td>Prochain pas sauvegardé même sans note</td></tr><tr><td>PP-03</td><td>Valider tension avec PP → apparaît dans Traités</td><td>Prochain pas saisi</td><td>PP visible sous le titre barré dans Traités</td></tr><tr><td>PP-04</td><td>PP d'une tension d'un autre membre visible</td><td>Tension d'un autre membre avec PP</td><td>PP visible dans la liste Traités</td></tr><tr><td>PP-05</td><td>Rouvrir une tension traitée → PP pré-rempli</td><td>Tension traitée avec PP</td><td>Champ PP pré-rempli avec la valeur existante</td></tr><tr><td>PP-06</td><td>PP visible toutes réunions confondues</td><td>PP créé dans une ancienne réunion</td><td>PP affiché même si créé dans une autre réunion</td></tr><tr><td>PP-07</td><td>Page 'Prochains pas' — voir mes PP</td><td>PP existants</td><td>Liste des PP avec cercle et réunion associés</td></tr><tr><td>PP-08</td><td>Marquer un prochain pas comme fait</td><td>PP existant</td><td>PP barré et marqué fait</td></tr></tbody></table>

---

## REU — Réunions ⚠️ *Fortement modifié en v12*

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis--8"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>REU-01</td><td>Créer une nouvelle réunion</td><td>Être admin/leader</td><td>Réunion créée avec les étapes par défaut</td></tr><tr><td>REU-02</td><td>Démarrer une réunion</td><td>Réunion planifiée</td><td>Interface de réunion active</td></tr><tr><td>REU-03</td><td>Étape Inclusion — écrire des notes</td><td>Être en réunion</td><td>Notes sauvegardées</td></tr><tr><td>REU-04</td><td>Étape Indicateurs — saisir les valeurs</td><td>Être en réunion, indicateurs configurés</td><td>Valeurs sauvegardées</td></tr><tr><td>REU-05</td><td>Étape Checklist — cocher les items</td><td>Être en réunion, checklist configurée</td><td>Items cochés sauvegardés</td></tr><tr><td>REU-06</td><td>Triage opé — ajouter une tension inline</td><td>Être en réunion, mode éditable</td><td>Tension créée et ajoutée à l'étape</td></tr><tr><td>REU-07</td><td>Triage opé — importer une tension existante</td><td>Tensions disponibles</td><td>Tension importée dans l'étape</td></tr><tr><td>REU-08</td><td>Triage opé — valider une tension avec PP</td><td>Tension dans l'étape</td><td>PP sauvegardé, tension dans Traités</td></tr><tr><td>REU-09</td><td>Triage opé — PP affiché sous le titre (pas à droite)</td><td>Tension traitée avec PP</td><td>PP affiché EN DESSOUS du titre barré</td></tr><tr><td>REU-10</td><td>Triage opé — rouvrir une tension traitée</td><td>Tension traitée</td><td>Tension repasse en À traiter</td></tr><tr><td>REU-11</td><td>Étape Prochains pas — voir les PP de la réunion</td><td>PP créés pendant la réunion</td><td>PP affichés en kanban</td></tr><tr><td>REU-12</td><td>Terminer la réunion</td><td>Être en réunion</td><td>Réunion marquée comme terminée</td></tr><tr><td>REU-13</td><td>Notes réunion → description tension à la validation</td><td>Tension créée en réunion avec notes puis validée</td><td>Description = texte des notes (pas JSON)</td></tr></tbody></table>

---

## EMAIL — Emails ⚠️ *Corrigé en v12*

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis--9"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>EMAIL-01</td><td>Rappel J-1 réunion — automatique</td><td>Réunion planifiée demain, cron 9h UTC</td><td>Email reçu la veille à 9h UTC</td></tr><tr><td>EMAIL-02</td><td>Tester rappel J-1 manuellement</td><td>Réunion dans les 36h</td><td>Email reçu après le curl test</td></tr><tr><td>EMAIL-03</td><td>CR réunion — reçu automatiquement après fin</td><td>Réunion terminée, cron toutes les heures</td><td>Email CR reçu dans l'heure suivant la fin</td></tr><tr><td>EMAIL-04</td><td>CR réunion — contient les prochains pas</td><td>Réunion avec PP</td><td>PP listés dans le mail</td></tr><tr><td>EMAIL-05</td><td>CR réunion — envoyé une seule fois (flag summarySent)</td><td>Réunion terminée</td><td>Pas de doublon même si cron passe plusieurs fois</td></tr><tr><td>EMAIL-06</td><td>Invitation nouveau membre — email reçu</td><td>Membre invité</td><td>Email d'invitation reçu</td></tr></tbody></table>

> **Commandes de test manuel :**
> 
> ```bash
> # Rappel J-1
> curl -X POST http://localhost:8888/cron.sendMeetingReminders \
>   -H "Content-Type: application/json" \
>   -H "x-nhost-webhook-secret: cron-secret-udn" \
>   -d '{}'
> 
> # Compte-rendu
> curl -X POST http://localhost:8888/cron.sendMeetingSummaries \
>   -H "Content-Type: application/json" \
>   -H "x-nhost-webhook-secret: cron-secret-udn" \
>   -d '{}'
> 
> ```

---

## ASYNC — Gouvernance asynchrone

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis--10"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>ASYNC-01</td><td>Soumettre une tension en gouvernance async</td><td>Mode holacratique + asyncGovernance activé</td><td>Mail envoyé aux membres du cercle</td></tr><tr><td>ASYNC-02</td><td>Voter 'Valider' sur une tension async</td><td>Email avec lien de vote reçu</td><td>Vote enregistré</td></tr><tr><td>ASYNC-03</td><td>Voter 'Objecter' sur une tension async</td><td>Email avec lien de vote reçu</td><td>Objection enregistrée, tension passe en réunion</td></tr><tr><td>ASYNC-04</td><td>Cron clôture auto à la deadline</td><td>Tension async sans objection à deadline</td><td>asyncStatus = governance\_async\_validated</td></tr><tr><td>ASYNC-05</td><td>Bouton 'Appliquer les évolutions' visible</td><td>asyncStatus = governance\_async\_validated</td><td>Bouton visible et actif</td></tr><tr><td>ASYNC-06</td><td>Appliquer les évolutions</td><td>Évolutions en attente</td><td>Évolutions appliquées, tension fermée</td></tr></tbody></table>

---

## ADM — Administration

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis--11"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>ADM-01</td><td>Accéder au tableau de bord admin</td><td>Être super-admin</td><td>Page admin accessible avec liste des orgas</td></tr><tr><td>ADM-02</td><td>Impersonner un utilisateur</td><td>Être super-admin</td><td>Bandeau orange 'Mode impersonation' affiché</td></tr><tr><td>ADM-03</td><td>Modifier le plan d'une orga</td><td>Être super-admin</td><td>Plan mis à jour (vivante/carto)</td></tr><tr><td>ADM-04</td><td>Export ISO 9001 Excel</td><td>Être admin orga</td><td>Fichier Excel téléchargé avec 4 onglets</td></tr></tbody></table>

---

## IMP — Import

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis--12"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>IMP-01</td><td>Importer une structure Glassfrog (JSON)</td><td>Fichier JSON Glassfrog valide</td><td>Structure importée dans l'orga</td></tr></tbody></table>

---

## EXC — Excalidraw

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis--13"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>EXC-01</td><td>Créer une fresque collaborative depuis une tension</td><td>addon\_excalidraw activé</td><td>Lien Excalidraw créé et ouvert</td></tr><tr><td>EXC-02</td><td>Créer une fresque depuis une réunion</td><td>addon\_excalidraw activé</td><td>Lien Excalidraw créé</td></tr></tbody></table>

---

## MEET — Meet UdN

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis--14"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>MEET-01</td><td>Lancer une visio Meet depuis une réunion</td><td>addon\_meet activé</td><td>Lien Meet généré et ouvert</td></tr></tbody></table>

---

## NR — Non régression technique

> Ces tests sont à lancer après chaque déploiement ou modification technique.

<table id="bkmrk-n%C2%B0-action-pr%C3%A9requis--15"><thead><tr><th>N°</th><th>Action</th><th>Prérequis</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>NR-01</td><td>Build frontend sans erreur TypeScript</td><td>Code modifié</td><td>`npm run build` → 0 erreurs</td></tr><tr><td>NR-02</td><td>Backend démarre sans erreur</td><td>Après restart</td><td>Logs OK, port 8888 accessible</td></tr><tr><td>NR-03</td><td>Permissions Hasura next\_step = org.members</td><td>Après toute modif permissions</td><td>Membres voient les PP de tous les cercles</td></tr><tr><td>NR-04</td><td>Un seul prochain pas par tension (contrainte UNIQUE)</td><td>Plusieurs créations PP pour même tension</td><td>Upsert, pas de doublon en BDD</td></tr><tr><td>NR-05</td><td>Crons actifs et URL correctes (sans /trpc/)</td><td>Après recréation cron</td><td>URLs = `/cron.X` dans Hasura metadata</td></tr></tbody></table>

> **Vérification crons :**
> 
> ```bash
> docker exec rolebase-graphql-1 sh -c 'curl -s -X POST http://localhost:8080/v1/metadata \
>   -H "Content-Type: application/json" \
>   -H "x-hasura-admin-secret: hasura-admin-secret-prod-rolebase" \
>   -d "{\"type\":\"export_metadata\",\"args\":{}}"' | \
> python3 -c "
> import sys, json
> data = json.load(sys.stdin)
> for c in data.get('cron_triggers', []):
>     print(c['name'], '|', c['webhook'])
> "
> 
> ```

---

## Récapitulatif

<table id="bkmrk-cat%C3%A9gorie-nb-tests-a"><thead><tr><th>Catégorie</th><th>Nb tests</th></tr></thead><tbody><tr><td>Authentification</td><td>4</td></tr><tr><td>Organisation</td><td>10</td></tr><tr><td>Rôles &amp; Cercles</td><td>8</td></tr><tr><td>Membres</td><td>3</td></tr><tr><td>Tensions</td><td>10</td></tr><tr><td>Projets</td><td>3</td></tr><tr><td>Prochains pas</td><td>8</td></tr><tr><td>Réunions</td><td>13</td></tr><tr><td>Emails</td><td>6</td></tr><tr><td>Gouvernance async</td><td>6</td></tr><tr><td>Admin</td><td>4</td></tr><tr><td>Import</td><td>1</td></tr><tr><td>Excalidraw</td><td>2</td></tr><tr><td>Meet UdN</td><td>1</td></tr><tr><td>Non régression</td><td>5</td></tr><tr><td>**TOTAL**</td><td>**84**</td></tr></tbody></table>

---

*Document généré le 21/05/2026 — RoleBase UdN v12 — Université du Nous*