Testing - loyde07/RDI25 GitHub Wiki

Résumé coaching 8

PAR GROUPE
+ Le groupe présente bien, sur le wiki, la stratégie de testing mise en place : Quels tests (unitaire, intégration, API, end2end, …) et pourquoi?  
+ Tous les étudiants comprennent les différences entre les types de tests utilisés

+ Les étudiants ont mis en place au moins des tests unitaires
+ Les étudiants indiquent s'ils ont mis d'autres types de tests en place : tests d'intégration, d'API, End2End et montre des exempes
+ Sur le wiki, le groupe présente le choix de l'outil pour chaque type de tests
+ Le groupe indique ce qu'ils ont utilisé comme DB pour leurs tests (autre que production?)

INDIVIDUEL
+ Chaque étudiant a mis des tests unitaires en oeuvre pour son US personnelle (ou une autre au besoin, en concertation avec le coach).   
+ Chaque étudiant a écrit sur le wiki un bilan des tests qu'il a réalisés, sur base d'un rapport de testing et de son interprétation, avec le code coverage.
+ Chaque étudiant a réfléchi aux valeurs d'input à utiliser pour les tests, et présente cette analyse dans la page "Tests" du wiki, notamment en fournissant un tableau valeurs d'input/résultat attendu
+ Les tests sont intéressants, couvrent bien l'US et passent.  L'étudiant est capable de les expliquer. 

1. Présentation globale des tests

[Méthodologie globale, liste des types de test (unitaire, intégration, ...), et pour chacun, quelle technologie de test a été utilisée + justification]

2. Tests effectués

2.1 Tests unitaires : Outils et Bilan

[A indiquer :

  • l'outil de test
  • le nombre de test,
  • le code coverage
  • la méthodologie pour le choix des valeurs d'input,
  • les tableaux input/output utilisés pour construire les tests
  • si possible la couverture des tests concernés.
  • Le lien vers le code des tests en question
  • si cela est relevant, l'étudiant qui a mis en place le système permettant d'effectuer les tests. ]

2.2 Tests d'intégration et Tests d'API : Outils et Bilan

[Idem]

2.3 Tests end-to-end : Bilan

[Idem]

3. Rapport de test et interprétation

4. Tests individuels (a priori pour US personnelles)

4.1 Etudiant 1

[Bilan personnel de la réalisation des tests, ce que l'étudiant a testé.]

Coverage

image

Test pour créer ou rejoindre une Team

Cas testé Entrée Comportement attendu Type
Nom vide '' Appelle axios.post, appelle axios.patch, user devient capitaine Cas extrême accepté (nom vide)
Nom très long (256 caractères) 'A'.repeat(256) Appelle axios.post, création réussie Cas extrême (longueur)
Nom avec caractères spéciaux 'Équipe_@#$_2025' Appelle axios.post, création réussie Cas extrême (caractères)
Nom classique 'TeamPhoenix' Appelle axios.post, création réussie Cas standard
Admin crée une équipe User admin Appelle axios.post, PAS de axios.patch, PAS d'updateProfile Cas particulier admin
Erreur équipe existante Nom d'équipe déjà existante (simulateur API) Throw générique, toast spécifique 'Ce nom d’équipe est déjà utilisé' Erreur spécifique
Erreur générique Toute autre erreur API Throw générique, toast générique 'Erreur lors de la création de l’équipe. Veuillez réessayer...' Erreur générique

Test unitaires sur la barre de recherche des joueurs

Fonction Cas testé Entrée Sortie attendue / Comportement Type de test
rechercherJoueurs Succès normal 'Player' Retourne [{ _id: '1', pseudo: 'Player1' }, ...] Normal
rechercherJoueurs Échec API 'Player' Lève erreur : 'Erreur API' Erreur
rechercherJoueurs Recherche vide (ne devrait pas appeler API, à sécuriser côté front) '' Peut être bloqué côté estRechercheValide (ne pas lancer API) Extrême (vide)
rechercherJoueurs Recherche espace seul (même comportement que vide) ' ' Idem, bloqué par estRechercheValide Extrême (vide)
rechercherJoueurs Recherche caractères spéciaux '@#$%^' Selon API : soit retour vide, soit erreur filtrée Extrême
rechercherJoueurs Recherche longue (> 100 caractères) 'a'.repeat(150) Doit soit être bloqué par validation avancée, soit renvoyer vide Extrême
rechercherJoueurs Recherche très courte (1 lettre) 'a' Comportement à valider (retourne beaucoup de résultats ou bloqué ?) Extrême
rechercherJoueurs Recherche avec accents ou majuscules 'Équipe' ou 'JOUEUR' Doit fonctionner (selon backend), vérifier normalisation/casse Norme / I18n
estRechercheValide Vide '' false Normal
estRechercheValide Uniquement espaces ' ' false Normal
estRechercheValide Texte normal 'test' true Normal
estRechercheValide Texte avec espaces autour ' joueur ' true Normal
estRechercheValide Texte avec caractères spéciaux '@#$%' true (car non vide, mais à sécuriser côté API) Extrême
estRechercheValide Texte très long (> 100 caractères) 'a'.repeat(150) true (car non vide, à gérer côté API ou validation avancée front) Extrême

Test unitaires sur les composants de updateTeam

Fonction Cas testé Entrée Sortie attendue / Comportement
ajouterJoueurAListe Ajouter joueur non présent Liste: ['1'], Joueur: '2' ['1', '2']
ajouterJoueurAListe Ajouter joueur déjà présent (doit throw) Liste: ['1'], Joueur: '1' Erreur : "Joueur déjà présent"
retirerJoueurDeListe Retirer joueur existant Liste: ['1', '2'], Joueur: '1' ['2']
retirerJoueurDeListe Retirer joueur inexistant (doit throw) Liste: ['1'], Joueur: '3' Erreur : "Joueur introuvable"
toggleSuppressionLogic Ajouter joueur non marqué Liste: [], Joueur: '1' ['1']
toggleSuppressionLogic Retirer joueur déjà marqué Liste: ['1'], Joueur: '1' []
ajouterJoueurDansEquipe Ajout joueur et mise à jour form / UI API, teamId, joueur {id}, mocks de setForm etc. API PATCH appelé, UI mise à jour, setForm, setShowAddPlayer, etc.
handleUpdateTeam Met à jour team, joueurs, rafraîchit le form et données API, teamId, form, joueurs à retirer PATCH puis GET API appelés, form et data mis à jour
toggleJoueurASupprimer Ajouter joueur non présent dans la liste Liste: ['1'], Joueur: '2' setJoueursÀRetirer(['1', '2'])
toggleJoueurASupprimer Empêche ajout si joueur déjà présent (log erreur) Liste: ['1'], Joueur: '1' Console erreur, setJoueursÀRetirer non appelé
toggleJoueurASupprimer Erreur claire si joueurId invalide (undefined) Liste: ['1'], Joueur: undefined Console erreur, setJoueursÀRetirer non appelé

Test unitaires sur les composants de updateTeam

Fonction Cas testé Entrée Sortie attendue / Comportement
ajouterJoueurAListe Ajouter joueur non présent Liste: ['1'], Joueur: '2' ['1', '2']
ajouterJoueurAListe Ajouter joueur déjà présent (doit throw) Liste: ['1'], Joueur: '1' Erreur : "Joueur déjà présent"
retirerJoueurDeListe Retirer joueur existant Liste: ['1', '2'], Joueur: '1' ['2']
retirerJoueurDeListe Retirer joueur inexistant (doit throw) Liste: ['1'], Joueur: '3' Erreur : "Joueur introuvable"
toggleSuppressionLogic Ajouter joueur non marqué Liste: [], Joueur: '1' ['1']
toggleSuppressionLogic Retirer joueur déjà marqué Liste: ['1'], Joueur: '1' []
ajouterJoueurDansEquipe Ajout joueur et mise à jour form / UI API, teamId, joueur {id}, mocks de setForm etc. API PATCH appelé, UI mise à jour, setForm, setShowAddPlayer, etc.
handleUpdateTeam Met à jour team, joueurs, rafraîchit le form et données API, teamId, form, joueurs à retirer PATCH puis GET API appelés, form et data mis à jour
toggleJoueurASupprimer Ajouter joueur non présent dans la liste Liste: ['1'], Joueur: '2' setJoueursÀRetirer(['1', '2'])
toggleJoueurASupprimer Empêche ajout si joueur déjà présent (log erreur) Liste: ['1'], Joueur: '1' Console erreur, setJoueursÀRetirer non appelé
toggleJoueurASupprimer Erreur claire si joueurId invalide (undefined) Liste: ['1'], Joueur: undefined Console erreur, setJoueursÀRetirer non appelé

Test unitaires et d'intégration sur le upload des photos

Fonction Cas testé Entrée Comportement attendu Type de test
uploadLogo Succès standard Fichier valide Retourne chemin (/uploads/logo.png) Unitaire
uploadLogo Aucun fichier null ou undefined Retourne undefined, aucun appel API Extrême
uploadLogo Erreur API simulée Fichier valide Lève erreur 'Erreur lors de l'upload du logo', toast affiché Erreur
uploadLogo (intégration) Envoi correct avec bon header & FormData Fichier valide Appel API avec multipart/form-data et fichier bien envoyé (logo) Intégration
uploadLogo (intégration) Vérifie présence du fichier dans le FormData Fichier valide Le FormData contient bien l'entrée clé logo avec le fichier Intégration
uploadLogo (intégration) Aucun fichier (cas extrême) undefined Aucun appel API, retourne undefined Extrême (Front)
uploadLogo (intégration) Échec API (réseau, serveur) Fichier valide Lève l'erreur personnalisée, toast appelé Intégration/Erreur

Test pour rejoindre une Team

Fonction Cas testé Entrée Comportement attendu Type
validerSelectionEquipe Équipe valide sélectionnée Liste d'équipes, id existant Aucun throw Validation
validerSelectionEquipe Aucun id sélectionné Liste d'équipes, '' Throw 'Aucune équipe sélectionnée' Validation Erreur
validerSelectionEquipe ID inexistant Liste d'équipes, id inexistant (999) Throw 'Équipe invalide sélectionnée' Validation Erreur
genererOptionsEquipes Transforme correctement Liste d'équipes Retourne tableau { label, value } Unitaire
genererOptionsEquipes Paramètre invalide 'not an array' Throw 'Paramètre invalide : teams doit être un tableau' Validation Erreur
fetchTeams Succès récupération URL valide Retourne data ([{ _id, nom }]) Intégration
fetchTeams Erreur API URL invalide ou serveur down Throw personnalisé 'Erreur lors de la récupération des équipes : Erreur API' Erreur
rejoindreEquipe Succès PATCH API, teamId, playerId Appel PATCH, aucune erreur Intégration
rejoindreEquipe Erreur API API, teamId, playerId Throw 'Erreur lors de la tentative de rejoindre l'équipe : Erreur API' Erreur
ajouterJoueurDansEquipe Ajout joueur réussi API, teamId, joueur, callbacks Appel PATCH, toast success, reset forms Intégration
ajouterJoueurDansEquipe Échec ajout joueur API, teamId, joueur, callbacks Toast error 'Erreur lors de l'ajout du joueur' Intégration/Erreur
handleUpdateTeam Mise à jour avec succès API, teamId, form, joueursÀRetirer, callbacks Appel PATCH, toast success, rafraîchissement des states Intégration
handleUpdateTeam Échec mise à jour équipe API, teamId, form, joueursÀRetirer, callbacks Toast error 'Erreur lors de la mise à jour' Intégration/Erreur
toggleJoueurASupprimer Toggle suppression joueur dans liste joueursÀRetirer, joueurId, callback Appelle setJoueursÀRetirer correctement Unitaire
toggleJoueurASupprimer Cas extrême : entrée invalide (null) + simulateur d'erreur null, joueurId, callback qui throw Toast error avec message personnalisé Extrême

4.2 Etudiant 2

Hassan: Rapport de Test

4.3 Etudiant 3

(Loyde)

Test pour la page Team.jsx

Cas testé Entrée Comportement attendu Type
Rendu initial avec équipes et joueurs Liste équipes (avec/sans logo) + liste joueurs Affiche équipes dans carousel, logos ou images fallback, affiche joueurs de l’équipe sélectionnée Cas Standard
Changement d’équipe au clic sur image carousel Clic sur logo d’une équipe différente Change équipe sélectionnée, affiche joueurs correspondants Interaction
Image fallback si logo équipe null Équipe sans logo Affiche image fallback /val.png dans le carousel Cas extrême
Pas d’appel API joueurs si pas d’équipe Liste équipes vide Ne fait pas d’appel pour récupérer joueurs Cas particulier
Erreur fetch équipes Requête axios échoue Log une erreur personnalisée dans la console Erreur
Ouverture modal joueur au clic bouton info Clic sur bouton info joueur Affiche modal avec détails complets du joueur Interaction
Fermeture modal joueur au clic sur fermeture Clic sur bouton "×" modal Ferme le modal Interaction
Image fallback dans modal joueur si logo null Joueur sans logo Affiche image fallback /avatar.png dans modal Cas extrême
Changement d’équipe via bouton précédent Clic sur bouton "<" Affiche équipe précédente dans carousel Interaction
Changement d’équipe via bouton suivant Clic sur bouton ">" Affiche équipe suivante dans carousel Interaction
Affichage vide si équipe sans joueurs Équipe sans joueurs N’affiche pas de joueurs (liste vide) Cas limite
Support API renvoyant directement un tableau API renvoie tableau d’équipes sans wrapper Affiche correctement les équipes Cas particulier
Gestion joueurs non tableau team.joueurs est une string (pas un tableau) Ne crashe pas, modal info joueur absent ou affiché sans erreur Cas extrême
Pas de fetch joueurs si selectedTeamId vide selectedTeamId vide Un seul appel API équipes, aucun appel joueurs Cas particulier
Aucune équipe disponible Liste équipes vide Ne rend pas d’images d’équipes Cas limite
Cas testé Entrée / Conditions Comportement attendu Type
Affichage des équipes dans le carousel Liste d’équipes avec logos et logos null Affiche les logos, affiche image fallback si logo null Cas standard
Affichage des joueurs de l’équipe sélectionnée Équipe avec joueurs Affiche les pseudos des joueurs Cas standard
Changement d’équipe au clic sur carousel Clic sur logo d’une autre équipe Change l’équipe sélectionnée et met à jour l’affichage Interaction utilisateur
Affichage image fallback dans le carousel Équipe sans logo Affiche une image par défaut /val.png dans le carousel Cas extrême (logo null)
Pas d’appel API joueurs si pas d’équipe Pas d’équipe dans la liste Ne fait pas d’appel API joueurs Cas particulier (absence de données)
Erreur fetch équipes Erreur réseau lors du fetch équipes Log une erreur dans la console avec message personnalisé Erreur spécifique
Ouverture modal joueur au clic bouton info Clic sur bouton info joueur Affiche modal avec détails du joueur Interaction utilisateur
Fermeture modal joueur au clic bouton fermer Clic sur bouton fermeture modal Ferme le modal joueur Interaction utilisateur
Image fallback dans modal joueur si logo null Joueur sans logo Affiche image par défaut /avatar.png dans modal Cas extrême (logo null joueur)
Changement d’équipe avec bouton précédent Clic sur bouton "<" Affiche l’équipe précédente dans le carousel Interaction utilisateur
Changement d’équipe avec bouton suivant Clic sur bouton ">" Affiche l’équipe suivante dans le carousel Interaction utilisateur
Affichage vide si équipe sans joueurs Équipe sans joueurs N’affiche pas de joueurs (liste vide) Cas limite (absence de joueurs)
Support API qui renvoie directement un tableau d’équipes API renvoie tableau d’équipes sans wrapper Affiche correctement les équipes Cas particulier (format API)
Erreur récupération équipes avec console.error Erreur fetch équipes console.error appelé avec message personnalisé Erreur spécifique
Gestion joueurs non tableau team.joueurs n’est pas un tableau Pas de crash, modal info joueur absent ou affiché sans erreurs Cas extrême (données malformées)
Pas de fetch joueurs si selectedTeamId vide selectedTeamId vide Un seul appel API pour équipes, pas de fetch joueurs Cas particulier (absence sélection)
Aucune équipe disponible Liste équipes vide Ne rend pas d’images d’équipes Cas limite (pas de données)

Test coverage

Capture d'écran 2025-05-22 024459

outils de test utilisé

  • jsdom

  • React Testing Library

  • Vitest

lien : lien de la page test

4.4 Etudiant 4

(Marie)

Les tests ne fonctionne pas