You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
RERO ILS — Protocole de test utilisateur (QA manuel)
Objectif : Vérifier le bon fonctionnement de toutes les interfaces utilisateur face à une mise à jour (Angular, dépendances, refactoring). Ce protocole couvre ce que les tests unitaires backend ne couvrent pas : l'affichage, les interactions, les mises à jour de listes, les formulaires, les retours visuels.
Prérequis : Environnement de test avec données de démonstration (fixtures RERO ILS). Comptes disponibles : visiteur anonyme, lecteur, bibliothécaire de succursale, bibliothécaire système, admin.
Convention :
[ ] — case à cocher pour chaque étape
⚠️ — point souvent raté lors de migrations, vérifier attentivement
🔒 — nécessite un rôle spécifique
🔄 — vérifier que la liste/vue se met à jour sans rechargement manuel de la page
Login avec identifiants valides → redirection vers page d'accueil
[ ]
1.1.2
Login avec identifiants invalides → message d'erreur affiché
[ ]
1.1.3
Logout → session terminée, redirection vers login
[ ]
1.1.4
⚠️ Accès direct à une URL protégée sans session → redirection login, puis retour à l'URL d'origine
[ ]
1.1.5
Session expirée : ouvrir DevTools → Application → Cookies → supprimer tous les cookies du domaine, puis tenter une action (ex. sauvegarder un formulaire) → redirection vers login, pas de crash silencieux ni page blanche
[ ]
1.2 Navigation principale (admin)
#
Étape
OK
1.2.1
Menu principal visible avec ses 5 catégories : Services aux usagers, Catalogue, Acquisitions, Rapports, Admin
[ ]
1.2.2
Sous-menus s'ouvrent au clic
[ ]
1.2.3
⚠️ Les raccourcis clavier fonctionnent (c → checkout, p → lecteurs, etc.)
[ ]
1.2.4
🔒 Les entrées de menu masquées selon le rôle (bibliothécaire système = tous les menus VS rôle pro_circulation = pas de menus acquisitions par exemple)
[ ]
1.2.5
Sélecteur de bibliothèque active présent et fonctionnel
[ ]
1.3 Retours visuels — points de vérification ciblés
#
Étape
OK
1.3.1
Après un checkin réussi : toast de confirmation affiché. Après un checkin en erreur (exemplaire inconnu) : toast d'erreur avec message explicite
[ ]
1.3.2
Après sauvegarde d'un formulaire (enregistrement lecteur ou notice bibliographique) : toast de succès affiché
[ ]
1.3.3
Formulaire de création de lecteur : saisir un email déjà existant → message d'erreur inline sous le champ email. Saisir un nom d'utilisateur existant → message d'erreur inline sous ce champ
[ ]
1.3.4
Formulaire de changement de mot de passe : saisir deux mots de passe différents → erreur inline visible. Après correction → erreur disparaît
[ ]
1.3.5
Console navigateur : aucune erreur JavaScript critique (vérifier au moins 1× par module)
[ ]
1.4 Changement de langue
#
Étape
OK
1.4.1
Sélecteur de langue accessible et fonctionnel
[ ]
1.4.2
⚠️ Après changement de langue, les labels d'interface sont bien traduits (pas de clé brute visible, ex. translate.key.path)
[ ]
2. Recherche (interface publique et admin)
La plupart des comportements de cette section s'appliquent à la fois à l'interface publique et aux listes de ressources de l'interface admin (documents, lecteurs, exemplaires, commandes…). La recherche avancée (§ 2.3) est spécifique à l'admin.
2.1 Page d'accueil publique
#
Étape
OK
2.1.1
Page d'accueil charge sans erreur
[ ]
2.1.2
Barre de recherche présente et focalisable
[ ]
2.1.3
Saisie d'un terme et soumission → résultats affichés
[ ]
2.2 Résultats de recherche
S'applique à la recherche publique et aux listes de l'admin.
#
Étape
OK
2.2.1
Liste de résultats affichée avec les données attendues (titre, auteur, date, disponibilité pour les documents)
[ ]
2.2.2
Facettes (filtres) affichées, cliquables
[ ]
2.2.3
⚠️ Caractères spéciaux dans la recherche (*, ?, +) → résultats affichés sans encodage parasite visible dans l'URL (%2A ou équivalent), sans message d'erreur
Filtre par facette → liste se restreint, facette cochée visible
[ ]
2.2.7
Retrait d'un filtre (croix) → liste revient à l'état précédent
[ ]
2.2.8
Combinaison de plusieurs facettes actives simultanément
[ ]
2.2.9
Recherche sans résultat → message "aucun résultat" affiché, pas d'erreur
[ ]
2.3 Recherche experte (admin uniquement)
Accessible depuis les listes de ressources admin (documents, lecteurs…) via le lien "Recherche experte" / mode expert.
#
Étape
OK
2.3.1
Accès à la recherche experte depuis la liste des documents admin
[ ]
2.3.2
Saisie d'une requête Elasticsearch/Lucene → résultats corrects
[ ]
2.3.3
Retour en recherche simple → interface normale
[ ]
3. Interface publique — Détail document
3.1 Onglet "Obtenir" (holdings et exemplaires)
#
Étape
OK
3.1.1
Onglet "Obtenir" affiché par défaut
[ ]
3.1.2
Holdings de l'organisation affichés avec bibliothèque et localisation
[ ]
3.1.3
⚠️ Filtre par bibliothèque (multi-select) fonctionne et réduit la liste
[ ]
3.1.4
Accordéon holding : clic sur l'en-tête ouvre/ferme le détail
[ ]
3.1.5
Exemplaires listés avec statut de disponibilité, cote, localisation
[ ]
3.1.6
Badge de disponibilité correct (disponible/emprunté/en transit)
[ ]
3.1.7
Notes publiques des exemplaires affichées
[ ]
3.1.8
Liens URL (texte intégral électronique) cliquables
[ ]
3.1.9
⚠️ Holdings d'autres organisations affichés dans une section séparée
[ ]
3.1.10
Pagination des exemplaires si nombreux
[ ]
3.2 Holdings sériaux (périodiques)
#
Étape
OK
3.2.1
Cote, énumération/chronologie affichées
[ ]
3.2.2
⚠️ Contenus supplémentaires, index, lacunes affichés si présents
[ ]
3.2.3
⚠️ "Ajouter une réclamation" → action déclenchée (bouton fonctionnel)
[ ]
3.3 Demandes et PEB (usager connecté)
#
Étape
OK
3.3.1
🔒 Bouton "Demander" visible pour usager connecté
[ ]
3.3.2
⚠️ Bouton "Demander" disabled avec tooltip explicatif si demande impossible
[ ]
3.3.3
Clic "Demander" → sélecteur de lieu de retrait affiché
[ ]
3.3.4
Confirmation de la demande → message de succès, bouton change d'état
[ ]
3.3.5
🔒 Bouton PEB visible depuis la vue globale pour usager connecté
[ ]
3.4 Onglet "Description"
#
Étape
OK
3.4.1
Résumé, sujets, auteurs, éditeur affichés
[ ]
3.4.2
⚠️ Les champs conditionnels (spécifiques à certains types de documents) s'affichent pour les documents qui les ont et sont absents pour les autres (ex. informations de fiction pour les romans, notes de musique pour les partitions)
[ ]
3.4.3
Liens vers les entités (auteurs, sujets) cliquables
Interface checkout accessible via menu ou raccourci c
[ ]
5.1.2
Saisie d'un code-barres lecteur (ou nom) → carte lecteur affichée
[ ]
5.1.3
⚠️ Carte lecteur affiche : nom, date de naissance, âge, type, code-barres, notes
[ ]
5.1.4
Compte bloqué → message d'avertissement visible sur la carte
[ ]
5.1.5
Compte expiré → message d'avertissement visible
[ ]
5.1.6
Lecteur introuvable → message d'erreur clair
[ ]
5.2 Prêt (checkout)
#
Étape
OK
5.2.1
Saisie d'un code-barres exemplaire → prêt enregistré
[ ]
5.2.2
🔄 ⚠️ Exemplaire apparaît immédiatement dans la liste des prêts du lecteur
[ ]
5.2.3
Exemplaire déjà prêté → message d'erreur avec information
[ ]
5.2.4
Exemplaire introuvable → message d'erreur
[ ]
5.2.5
⚠️ Notes de circulation de l'exemplaire affichées dans la liste expandée ET dans un toast d'alerte
[ ]
5.2.6
Exemplaire avec type d'exemplaire temporaire → note affichée dans la liste expandée ET dans un toast
[ ]
5.2.7
Exemplaire appartenant à une collection → note affichée dans la liste expandée ET dans un toast
[ ]
5.3 Liste des prêts en cours (pendant le checkout)
#
Étape
OK
5.3.1
Liste affiche : code-barres, titre, auteur, date d'échéance
[ ]
5.3.2
Clic "expand" par ligne → détails affichés (cote, localisation, notifications)
[ ]
5.3.3
Renouvellement individuel (bouton par ligne)
[ ]
5.3.4
⚠️ "Renouveler tout" → tous les renouvelables mis à jour en une action
[ ]
5.3.5
🔄 Après renouvellement, date d'échéance mise à jour dans la liste
[ ]
5.3.6
Bouton "Renouveler" disabled si non renouvelable (tooltip explicatif)
[ ]
5.3.7
Badge frais affiché si des frais sont associés à un prêt existant
[ ]
5.3.8
Badge demandes (réservations) affiché si d'autres lecteurs attendent
[ ]
5.4 Retour (checkin)
Le retour peut se faire depuis l'onglet "Prêts" d'un lecteur chargé (retour dans le contexte du lecteur) ou directement depuis l'interface checkout/checkin sans lecteur sélectionné (retour anonyme). Tester les deux cas.
🔄 ⚠️ Après retour, exemplaire apparaît dans la liste des retours sans rechargement
[ ]
5.4.3
Retour depuis l'onglet "Prêts" d'un lecteur : même comportement, prêt disparaît de la liste du lecteur
[ ]
5.4.4
Exemplaire en transit → message indiquant la bibliothèque de destination
[ ]
5.4.5
Exemplaire avec demande en attente → message signalant la demande
[ ]
5.4.6
Frais générés au retour → message ou badge visible
[ ]
5.4.7
⚠️ Scan d'un exemplaire sans prêt actif → exemplaire apparaît dans la liste avec un bandeau d'avertissement (icône triangle), pas de crash ni d'erreur bloquante
[ ]
5.5 Onglet "Demandes" (patron en cours)
#
Étape
OK
5.5.1
Liste des demandes du lecteur : titre, date de demande
[ ]
5.5.2
Annulation d'une demande → 🔄 disparaît de la liste
[ ]
5.6 Onglet "À récupérer" (pickup)
#
Étape
OK
5.6.1
Exemplaires disponibles au guichet listés
[ ]
5.6.2
Date limite de retrait affichée
[ ]
5.7 Onglet "Frais" (transactions lecteur)
#
Étape
OK
5.7.1
⚠️ Accordéon "Frais engagés" affiche liste avec date, catégorie, bibliothèque, montant
[ ]
5.7.2
⚠️ Bouton "Ajouter un frais" → formulaire s'ouvre
[ ]
5.7.3
🔄 ⚠️ Après ajout d'un frais, il apparaît dans la liste sans rechargement
[ ]
5.7.4
⚠️ Bouton "Tout payer" fonctionne (split button, avec option "Payer pour ma bibliothèque")
[ ]
5.7.5
🔄 Après paiement, montant total mis à jour
[ ]
5.7.6
Accordéon "Frais de retard prévisionnels" : liste avec date d'échéance, document, montant
Résultats affichent nom, rôles (tags colorés), date de naissance, ville
[ ]
6.2 Création d'un compte lecteur (user + patron)
Un compte lecteur est composé de deux parties dans le formulaire : la partie utilisateur (identité, accès) et la partie lecteur (informations bibliothécaires). Tester les deux.
#
Étape
OK
6.2.1
Formulaire de création accessible
[ ]
6.2.2
⚠️ Champs obligatoires visibles dès l'ouverture du formulaire (notamment sous-champs requis)
[ ]
6.2.3
Partie utilisateur : validation email en temps réel (unicité async)
[ ]
6.2.4
Partie utilisateur : validation nom d'utilisateur en temps réel (unicité async)
[ ]
6.2.5
⚠️ Sélection du rôle : les rôles disponibles dépendent des permissions du bibliothécaire connecté
[ ]
6.2.6
🔒 Bibliothécaire de succursale : sélection de bibliothèque limitée à ses bibliothèques
[ ]
6.2.7
Partie lecteur : date d'expiration pré-remplie (+3 ans)
[ ]
6.2.8
Partie lecteur : code-barres, type de lecteur, bibliothèque(s) d'affiliation renseignables
[ ]
6.2.9
Sauvegarde → redirect vers le détail, message de succès
[ ]
6.3 Édition d'un lecteur
#
Étape
OK
6.3.1
Formulaire pré-rempli avec les données existantes
[ ]
6.3.2
⚠️blocked_note effacé si case "bloqué" décochée
[ ]
6.3.3
⚠️ Retrait du rôle "patron" : si le lecteur a des prêts, frais ou demandes actifs → message d'erreur/blocage explicite
[ ]
6.3.4
Sauvegarde → données mises à jour dans la vue détail
[ ]
6.4 Vue détail du lecteur
#
Étape
OK
6.4.1
Coordonnées affichées : date de naissance, email, téléphones (triés par poids), adresse
[ ]
6.4.2
Accordéon "Notes" visible si des notes existent
[ ]
6.4.3
Accordéon "Informations utilisateur" : nom, keep_history, rôles, date de création
Accordéon "Informations bibliothécaire" si rôle présent
[ ]
6.4.6
⚠️ Accordéon "Permissions" se charge correctement (ne doit pas rester vide ni en erreur)
[ ]
6.4.7
Bouton "Circulation" visible pour CIRC_ADMIN
[ ]
7. Administration — Catalogue
7.1 Recherche de documents
#
Étape
OK
7.1.1
Liste des documents accessible
[ ]
7.1.2
Recherche plein texte fonctionne
[ ]
7.1.3
Facettes (type, langue, date…) fonctionnelles
[ ]
7.1.4
Boutons Modifier / Dupliquer / Supprimer présents selon les permissions du rôle ; bouton Supprimer disabled (avec tooltip) si la notice a des exemplaires liés
[ ]
7.2 Création/édition d'un document
#
Étape
OK
7.2.1
Éditeur de fiche bibliographique s'ouvre
[ ]
7.2.2
⚠️ Tous les sous-champs obligatoires sont visibles en mode création
[ ]
7.2.3
⚠️ Les champs conditionnels s'affichent ou se masquent correctement selon les valeurs saisies (ex. type de document, type de contenu)
[ ]
7.2.4
Ajout/suppression de répétitions de champs (auteurs, sujets, etc.)
[ ]
7.2.5
Sauvegarde → message de succès, redirect vers le détail
[ ]
7.2.6
⚠️ "Enregistrer comme modèle" fonctionne et le modèle est récupérable depuis l'éditeur
[ ]
7.2.7
Duplication d'un document → nouvel enregistrement avec données copiées
[ ]
7.3 Import depuis le web
#
Étape
OK
7.3.1
Interface d'import accessible depuis le menu Catalogue
Tous les champs requis sont visibles (pas masqués par défaut)
Traductions
Aucune clé de traduction brute (KEY.NOT.FOUND ou translate.xxx) visible
Accordéons/tabs
Ouverture et fermeture sans crasher, contenu chargé au bon moment
Pagination
Navigation entre pages de résultats cohérente (pas de saut de page, pas de doublon)
Annexe B — Patterns de régression à surveiller lors de mises à jour majeures
Ces patterns représentent les types de bugs les plus fréquents lors de mises à jour du framework ou de refactorings importants. Les utiliser comme grille de lecture pendant le parcours de l'application.
Catégorie
Symptôme à surveiller
Où chercher en priorité
Mises à jour de liste
Une action (ajout, paiement, retour) semble réussir (pas d'erreur) mais la liste ne reflète pas le changement → rechargement manuel révèle que l'action a bien eu lieu
Frais lecteur, liste des retours, lignes de commande
Boutons inactifs
Un bouton cliquable ne déclenche rien, pas de retour visuel, pas d'erreur console
Boutons d'action dans les vues détail, formulaires avec logique conditionnelle
Champs formulaire absents
En mode création, certains sous-champs requis ou optionnels n'apparaissent pas alors qu'ils devraient
Éditeurs de notices (surtout champs répétables), éditeur de lecteur
Affichage conditionnel cassé
Un champ ou bloc s'affiche toujours (ou jamais) quel que soit l'état des données
Sections conditionnelles dans les vues détail (notes, sections par rôle)
Encodage URL
La navigation ou la recherche produit des URLs avec des caractères encodés en double ou mal encodés, causant des erreurs ou des résultats inattendus
URLs de recherche avec filtres actifs, navigation avec paramètres spéciaux
Onglet/panneau vide
Un onglet ou accordéon s'ouvre mais reste vide alors que des données existent
Onglet Permissions dans le détail lecteur, onglets de commande
Erreurs 400 silencieuses
Une action de formulaire retourne 400 côté réseau sans message d'erreur UI, ou avec un message générique peu utile
Formulaires de frais, formulaires acquisitions
Protocole rédigé sur la base de l'analyse du code source de rero-ils-ui. À maintenir à jour lors de l'ajout de nouvelles fonctionnalités.