Testing - dudleydehenau/ScapeGame 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)

Delcorte Maxime

  • Je me suis occupé des tests pour le login, le signup et les commentaires. Pour mes tests d'api, j'ai testé pour les différentes routes :
    • commentaire : -- vérification de le présence de l'en-tête authorization pour delete -- vérification de le présence de l'en-tête authorization pour create -- vérification de le présence de l'en-tête authorization pour fetch -- si cela est ok , je vérifie si mes routes fonctionnes
    • login : -- vérification de le présence de l'en-tête authorization -- vérification si l'utilisateur existe dans le base de donnée -- vérification de mot de passe -- si ok , je vérifie si ma route fonctionne
    • signup : -- vérification de la création d'un utilisateur

https://github.com/dudleydehenau/ScapeGame/blob/main/backend/auth.spec.js

INPUT OUTPUT
Login : (email: [email protected],userPassword: password123) should log in a user and return 200 status
Login : (email: [email protected], userPassword: password123) => valeur qui n'existe pas dans la DB should return 401 status if user does not exist
Login : (email: [email protected] ,userPassword: password), => mot de passe incorrect should return 401 status if password is incorrect
signup : ( userFName: "test",userLName: "test",userBirth: "1990-01-01",email: "[email protected]",userPassword: "password123") should return 201 status if user is created
Commentaire fetch: sans authorization should return 401 status if no authorization for fetch
Commentaire create : sans authorization should return 401 status if no authorization for create
Commentaire delete : sans auhtorization should return 401 status if no authorization for delete
Commentaire fetch ; avec authorization should return 200 status if authorization for fetch is provided
Commentaire create ; avec authorization => levelId: 1, userId: 1,commentaryText: "test pour le test" should return 201 status if authorization for create is provided
Commentaire delete ; avec authorization should return 200 status if authorization for delete is provided

Scalais Florian

  • Je me suis occupé des tests unitaires pour mon jeu et pour la page de lancement du jeu. J'ai aussi un test d'intégration qui appelle la méthode addScore du service ScoreService => test l'intégration entre le composant et le service.
INPUT OUTPUT
submitCode : codeInput = '9532' codeCorrect est vrai, calculateScore et addScoreToDatabase sont appelés.
submitCode : codeInput = '1234' codeCorrect est faux, "Code incorrect. Rien ne se passe..." est dans journalEntries, timer est augmenté.
closeSafeInterface : codeInput = '9532', showCodeInterface = true codeInput est '', showCodeInterface est faux.
calculateScore (intégration avec ScoreService) : codeInput = '9532', timer = 100, codeCorrect = true mockScoreService.addScore est appelé avec (1, 1, 100).
ngOnInit timerInterval est défini.
Initialisation (test du timer) timer est 0 au départ, puis > 0 après 1500 ms.
Test de l'initialisation du formulaire form est défini, commentaryText est défini, invalide.
Test de la validation du champ commentaryText vide ou trop court : commentaryText vide, commentaryText = 'short' form est invalide dans les deux cas.
Test de la validation du formulaire avec données valides : commentaryText = 'This is a valid comment.' form est valide.
delete (appel du service et mise à jour des commentaires) : id = 1 mockCommentaireService.deleteCommentaire est appelé avec 1, component.fetchAll est appelé.

Dudley De Henau

Swagger Output

  • Je me suis occupé des tests pour les routes d'API définies dans le fichier Swagger pour les fonctionnalités liées aux scores.

Scores

  • Create Score :
    • Vérification de la présence de l'en-tête authorization.
    • Vérification du statut de réponse approprié.
  • Fetch Best Score :
    • Vérification de la présence de l'en-tête authorization.
    • Vérification du statut de réponse approprié.
  • Update Score :
    • Vérification de la présence de l'en-tête authorization.
    • Vérification du statut de réponse approprié.
INPUT OUTPUT
POST /score/scores : (levelId: 1, userId: 1, scoreBTime: "120") should create a score and return 201 status
GET /scores/best/{userId}/{levelId} : avec authorization (userId: 1, levelId: 1) should return the best score for the user and level, 200 status
PUT /scores/update : (levelId: 1, userId: 1, score: 150) => mise à jour d'un score existant should update the score and return 201 status
POST /scores/ : (levelId: 2, userId: 2, scoreBTime: "100") => ajout sans autorisation should return 401 status if no authorization is provided
GET /scores/best/{userId}/{levelId} : sans authorization (userId: 2, levelId: 2) should return 401 status if no authorization is provided
PUT /scores/update : (levelId: 2, userId: 2, score: 200) => mise à jour sans autorisation should return 401 status if no authorization is provided

Score Test Component

  • Je me suis occupé des tests unitaires pour les fonctionnalités du composant Score. Pour mes tests unitaires, j'ai testé les différentes méthodes :

Score Component : Création

  • Vérification de la création du composant.

Méthodes

  • getScore() :

    • Vérification que la méthode retourne la liste des scores.
    • Vérification que la méthode appelle l'API get pour récupérer les scores.
  • addScore(score: any) :

    • Vérification que la méthode ajoute un score à la liste.
    • Vérification que la méthode appelle l'API post pour ajouter un nouveau score.
  • deleteScore(scoreId: number) :

    • Vérification que la méthode supprime un score de la liste.
    • Vérification que la méthode appelle l'API delete pour supprimer un score.
INPUT OUTPUT
getScore() : appels API pour récupérer les scores should return the list of scores
addScore(score: any) : ajout d'un score should add a score and return success response
deleteScore(scoreId: number) : suppression d'un score should delete a score and return success response

RPG Game Component

  • Je me suis occupé des tests unitaires pour les fonctionnalités du composant RPG Game. Pour mes tests unitaires, j'ai testé les différentes méthodes :

RPG Game Component : Création

  • Vérification de la création du composant.

Méthodes

  • startGame() :

    • Vérification que la méthode initialise correctement le jeu.
    • Vérification que la méthode appelle l'API pour récupérer les données nécessaires au jeu.
  • playTurn(action: string) :

    • Vérification que la méthode exécute l'action de jeu spécifiée.
    • Vérification que la méthode met à jour l'état du jeu en fonction de l'action.
  • endGame() :

    • Vérification que la méthode termine le jeu et affiche les résultats.
    • Vérification que la méthode appelle l'API pour sauvegarder les résultats du jeu.
INPUT OUTPUT
startGame() : initialisation du jeu should initialize the game and set the required data
playTurn(action: string) : action de jeu should perform the specified game action and update the state
endGame() : terminaison du jeu should end the game and save the results

Patrycja Drewnowska

Je me suis occupé des tests pour le jeux château. Etant donné qu'il y a beaucoup de fonctions pour le jeux château je n'ai pas su faire des tests sur tous, j'ai tester le component mapChateau, PieceSecrete et scoreFin. Il y a des tests sur le frontend et sur l'api que j'ai créée 'classement'

voici les tests pour le component scoreFin, il y a principalement des tests sur les api utilisées pour envoyer et récupérer les scores dans la base de donnée:

INPUT OUTPUT
submitScore() : est appeler avec ngOnInit() submitScore devrait être appelé
submitScore() : soumet le score avec le levelId, le userId et le totalScore devrait envoyer levelId, userId et totalScore
getBestScore() : récupère le meilleur score pour levelId et userId actuel devrait récupérer le meilleur score pour levelId et userId actuel
getClassement() : récupère le classement pour levelId devrais récupérer le classement pour levelId
formatClassement() : créer le classement pour afficher le meilleur score et les scores des autres utilisateurs devrait créer le classement pour afficher le meilleur score et les scores des autres utilisateurs

Voici les tests pour le component PieceSecrete:

INPUT OUTPUT
flamePorte() : change l'état de la flamme de la porte devrait changer l'état de la flamme de la porte
cartes() : change l'état des cartes devrait changer l'état des cartes
craneTable() : change l'image du crâne et met à jour le code devrait changer l'image du crâne et mettre à jour le code
validerCodePorte() : valide le code de la porte avec 'mauvais code' devrait mettre sur false 'flameCouloir' et reset crane image and flamePorteOn
validerCodePorte() : validation du code de la porte avec 'le bon code' devrait ouvrir la porte et calculer le score total
sortirChateau() : affiche l'écran de score du joueur devrait afficher l'écran de score du joueur

Voici les tests pour le component mapChateau:

INPUT OUTPUT
cle() : change l'état de 'coffreOn' devrait changer l'état de 'coffreOn' à true
tableDroite() : devrais changer l'image du crane sur la table à droite devrait changer l'état de 'craneTableDroiteOn'
monstreGauche() : appelle la fonction devrait mettre à true 'osGauche'
monstreDroit() : appelle la fonction devrait mettre à true 'osDroit'

Tran Thi Tony

Je me suis occupé des tests unitaires de mes fonctionnalités càd celle du trie, du filtre et de la barre de recherche. on vas commencer avec le filtre :

INPUT OUTPUT
Appel HTTP GET à http://localhost:3000/level/data renvoie un tableau de jeux fictifs filtrer
Méthode component.filterGames() appelée retourne expected spy updateFilterGames/updateLevelData to have been called si il y a une erreur

voici maintenant la barre de recherche :

INPUT OUTPUT
Devrait créer le composant expect(component).toBeTruthy(); passe si le composant est créé correctement.
Click sur le bouton avec la classe .loupe expect(component.search).toHaveBeenCalled(); passe si search est appelé.
component.searchTerm = 'ch'; component.updateSuggestions(); expect(component.suggestions).toEqual(['chambre', 'chateau']); passe si les suggestions sont mises à jour correctement.
component.selectSuggestion('prison'); expect(component.searchTerm).toEqual('prison'); et expect(component.suggestions).toEqual([]); passent si searchTerm et les suggestions sont mises à jour correctement.
component.searchTerm = 'prison'; component.search(); expect(levelService.searchLevels).toHaveBeenCalledWith('prison'); passe si searchLevels est appelé avec le bon terme de recherche.
component.goToLevel({ levelId: 1, levelName: 'prison' }); expect((component as any).router.navigate).toHaveBeenCalledWith(['/game', 'prison']); passe si la navigation vers la route correcte est effectuée.

pour finir le trie

INPUT OUTPUT
Devrait créer le composant component est défini (vrai)
component.tri('option1'); levelService.updateLevelData est appelé
component.tri('option2'); levelService.updateLevelData est appelé
component.tri('option3'); levelService.updateLevelData est appelé