From 12ce1bcfa19f36cc3567fae218d4f1729d9bdba5 Mon Sep 17 00:00:00 2001 From: SIMAILA Djalim Date: Mon, 28 Nov 2022 15:08:29 +0100 Subject: [PATCH 1/6] added test templates --- tests/README.md | 3 +++ tests/test_api.py | 38 +++++++++++++++++++++++++++++++++++ tests/test_pages.py | 48 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 tests/README.md create mode 100644 tests/test_api.py create mode 100644 tests/test_pages.py diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..6e445bc --- /dev/null +++ b/tests/README.md @@ -0,0 +1,3 @@ +# TESTS UNITAIRES + +Pour lancer les test unitaires \ No newline at end of file diff --git a/tests/test_api.py b/tests/test_api.py new file mode 100644 index 0000000..aae490e --- /dev/null +++ b/tests/test_api.py @@ -0,0 +1,38 @@ +import requests + +############################################################################### +# # +# # +# Constantes # +# # +# # +############################################################################### + +# "scheme" : le protocol a utiliser pour les requette +scheme = "http://" + +# "baseUrl" : url racine du serveur web +baseUrl = "truthseeker.simailadjalim.fr" + +# "url" : url qui sera utilisé pour les requettes de test +url = scheme+baseUrl + +# page d'accueil +accueil = "/" + + + + + +def test_que_la_page_daccueil_existe(): + page = requests.get(url+accueil) + assert page.status_code == 200 + +def test_que_la_page_de_mentions_legales_existe(): + page = requests.get(url+mentionsLegales) + assert page.status_code == 200 + +def test_que_la_page_de_contact_existe(): + page = requests.get(url+pageDeContact) + assert page.status_code == 200 + diff --git a/tests/test_pages.py b/tests/test_pages.py new file mode 100644 index 0000000..5e2c924 --- /dev/null +++ b/tests/test_pages.py @@ -0,0 +1,48 @@ +import requests + +############################################################################### +# # +# # +# Constantes # +# # +# # +############################################################################### + +# "scheme" : le protocol a utiliser pour les requette +scheme = "http://" + +# "baseUrl" : url racine du serveur web +baseUrl = "truthseeker.simailadjalim.fr" + +# "url" : url qui sera utilisé pour les requettes de test +url = scheme+baseUrl + +# page d'accueil +accueil = "/" + +# page de mentions legales +mentionsLegales = "/mentionLegales" + +# page de contact +pageDeContact = "/contact" + +# page de jeu en mode joueur seul +pageDeJeuSolo = "/solo" + +# page de jeu en mode multijoueur +pageDeJeuMulti = "/multi" + + + +def test_que_la_page_daccueil_existe(): + page = requests.get(url+accueil) + assert page.status_code == 200 + +def test_que_la_page_de_mentions_legales_existe(): + page = requests.get(url+mentionsLegales) + assert page.status_code == 200 + +def test_que_la_page_de_contact_existe(): + page = requests.get(url+pageDeContact) + assert page.status_code == 200 + From bc92fc48f3ca9d2a65afd9dc80e5d7e774ff44c7 Mon Sep 17 00:00:00 2001 From: SIMAILA Djalim Date: Thu, 1 Dec 2022 10:15:48 +0100 Subject: [PATCH 2/6] finished tests, still require a run --- tests/test_api.py | 211 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 197 insertions(+), 14 deletions(-) diff --git a/tests/test_api.py b/tests/test_api.py index aae490e..b2ee59b 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -1,4 +1,5 @@ import requests +import json ############################################################################### # # @@ -11,28 +12,210 @@ import requests # "scheme" : le protocol a utiliser pour les requette scheme = "http://" +port = "80" # "baseUrl" : url racine du serveur web baseUrl = "truthseeker.simailadjalim.fr" -# "url" : url qui sera utilisé pour les requettes de test -url = scheme+baseUrl - -# page d'accueil -accueil = "/" +# +url= scheme+baseUrl+":"+port +############################################################################### +# # +# # +# Test Classes # +# # +# # +############################################################################### + +class User: + def __init__(self,username): + self.username = username + self.JWT ="" + self.isAdmin = False + +def createGame(user:User): + data = {"username":user.username} + response = requests.post(url+"/api/v1/createGame",data=data) + if response.status_code != 200: + return False + content = json.loads(response.content.decode("utf-8")) + if content is None: + return False + if content["status"] != "ok": + print(content["status"]) + return False + user.JWT = content["JWT"] + user.isAdmin = True + return content["game_id"] +def joinGame(user:User,game_id:str): + data = {"username":user.username,"game_id":game_id} + response = requests.post(url+"/api/v1/joinGame",data=data) + if response.status_code != 200: + return False + content = json.loads(response.content.decode("utf-8")) + if content is None: + return False + if content["status"] != "ok": + print(content["status"]) + return False + user.JWT = content["JWT"] + return True -def test_que_la_page_daccueil_existe(): - page = requests.get(url+accueil) - assert page.status_code == 200 +def startGame(user:User): + data = {"JWT":user.JWT} + response = requests.post(url+"/api/v1/startGame",data=data) + if response.status_code != 200: + return False + content = json.loads(response.content.decode("utf-8")) + if content is None: + return False + if content["status"] != "ok": + print(content["status"]) + return False + return True -def test_que_la_page_de_mentions_legales_existe(): - page = requests.get(url+mentionsLegales) - assert page.status_code == 200 -def test_que_la_page_de_contact_existe(): - page = requests.get(url+pageDeContact) - assert page.status_code == 200 +############################################################################### +# # +# # +# /api/v1/createGame # +# # +# # +############################################################################### +# +# Cette requete api crée une salle de jeu multijoueur dans le serveur, elle +# octroie ensuite les droit de creation de la salle a l'utilisateur dont le +# pseudo est donné en parametre post et lui retourne son token JWT" +def test_that_people_can_create_a_game(): + user = User("neotaku") + assert createGame(user) == True + +def test_that_two_person_creating_two_games_results_in_two_distincts_game(): + userOne = User("neorage") + userTwo = User("neobergine") + gameOne = createGame(userOne) + gameTwo = createGame(userTwo) + assert gameOne != gameTwo + +def test_that_two_person_having_the_same_pseudo_creating_two_games_results_in_two_distincts_games(): + userOne = User("neo") + userTwo = User("neo") + gameOne = createGame(userOne) + gameTwo = createGame(userTwo) + assert gameOne != gameTwo + + +def test_that_not_sending_a_username_results_in_an_error(): + response = requests.post(url+"/api/v1/createGame") + assert response.status_code == 200 + assert json.loads(response.content.decode("utf-8"))["status"] != "ok" + + +def test_that_sending_a_empty_username_results_in_an_error(): + user = User("") + assert createGame(user) == False + +def test_that_a_too_long_username_results_in_an_error(): + user = User("Le test unitaire est un moyen de vérifier qu’un extrait de code fonctionne correctement. C’est l’une des procédures mises en oeuvre dans le cadre d’une méthodologie de travail agile. ") + assert createGame(user) == False + +def test_that_username_that_contains_non_alphanumerics_results_in_an_error(): + user = User("я русский пират") + assert createGame(user) == False + +############################################################################### +# # +# # +# /api/v1/joinGame # +# # +# # +############################################################################### +# +# Cette requete ajoute dans la partie identifié par l'identifiant de jeu +# (game_id) l'utilisateur indentifié par son pseudo (username) et lui retourne +# son token JWT + +def test_that_people_can_join_a_game(): + game_id = createGame(User("neoracle")) + assert joinGame(User("neobjectif"),game_id) == True + +def test_that_two_person_can_join_a_game(): + game_id = createGame(User("neomblic")) + joueur1_a_join = joinGame(User("neobjectif"),game_id) + joueur2_a_join = joinGame(User("neorgane"),game_id) + assert joueur1_a_join == True and joueur2_a_join == True + +def test_that_people_cant_join_if_the_username_is_already_used(): + game_id = createGame(User("neoreille")) + joinGame(User("neosomse"),game_id) + assert joinGame(User("neosomse"),game_id) == False + +def test_that_people_joining_without_sending_any_data_results_in_an_error(): + game_id = createGame(User("neoxyde")) + response = requests.post(url+"/api/v1/joinGame") + assert response.status_code == 200 + assert json.loads(response.content.decode("utf-8"))["status"] != "ok" + +def test_that_people_joining_without_sending_a_game_id_results_in_an_error(): + data={"username":"neomblic"} + response = requests.post(url+"/api/v1/joinGame",data=data) + assert response.status_code == 200 + assert json.loads(response.content.decode("utf-8"))["status"] != "ok" + +def test_that_people_joining_without_sending_an_username_still_results_in_an_error(): + game_id = createGame(User("neonyx")) + data={"game_id":game_id} + response = requests.post(url+"/api/v1/joinGame",data=data) + assert response.status_code == 200 + assert json.loads(response.content.decode("utf-8"))["status"] != "ok" + +def test_that_people_joining_with_an_empty_username_still_results_in_an_error(): + game_id = createGame(User("neodeur")) + user = User("") + assert joinGame(user,game_id) == False + +def test_that_people_joining_aving_an_username_that_contains_non_alphanumerics_still_results_in_an_error(): + game_id = createGame(User("neobservateur")) + user = User("Я брат русского пирата") + assert joinGame(user,game_id) == False + +def test_that_people_joining_aving_a_too_long_username_still_results_in_an_error(): + game_id = createGame(User("neordre")) + user = User("Les tests unitaires sont généralement effectués pendant la phase de développement des applications mobiles ou logicielles. Ces tests sont normalement effectués par les développeurs, bien qu’à toutes fins pratiques, ils puissent également être effectués par les responsables en assurance QA.") + assert joinGame(user,game_id) == False + + +############################################################################### +# # +# # +# /api/v1/startGame # +# # +# # +############################################################################### +# +# Cette requete crée les données necessaire au bon fonctionnement du jeu, +# c'est a dire qu'elle choisit les personnages, leurs reactions ainsi que leurs +# reponses et les stoquent dans sa memoire en attendant que les clients les +# recuperent + +def test_that_people_can_start_a_game(): + owner = User("neosteopathie") + game_id = createGame(owner) + assert startGame(owner) == True + +def test_that_a_started_game_cannot_be_started_again(): + owner = User("neosteopathie") + game_id = createGame(owner) + startGame(owner) + assert startGame(owner) == False + +def test_that_non_owners_cant_start_a_game(): + owner = User("neosteopathie") + notOwner = User("neorphelin") + game_id = createGame(owner) + joinGame(notOwner,game_id) + assert startGame(notOwner) == False From 4632691186b1349186d8cfcb675c973efbc3ad63 Mon Sep 17 00:00:00 2001 From: SIMAILA Djalim Date: Thu, 1 Dec 2022 10:51:58 +0100 Subject: [PATCH 3/6] runned test, fixed some inconsistencies --- tests/test_api.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/tests/test_api.py b/tests/test_api.py index b2ee59b..65e048a 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -12,9 +12,9 @@ import json # "scheme" : le protocol a utiliser pour les requette scheme = "http://" -port = "80" +port = "5000" # "baseUrl" : url racine du serveur web -baseUrl = "truthseeker.simailadjalim.fr" +baseUrl = "localhost" # url= scheme+baseUrl+":"+port @@ -38,14 +38,14 @@ def createGame(user:User): data = {"username":user.username} response = requests.post(url+"/api/v1/createGame",data=data) if response.status_code != 200: - return False + raise Exception("status code is not 200") content = json.loads(response.content.decode("utf-8")) if content is None: - return False + raise Exception("Response is null") if content["status"] != "ok": print(content["status"]) - return False - user.JWT = content["JWT"] + raise Exception("Status is not ok") + user.JWT = content["jwt"] user.isAdmin = True return content["game_id"] @@ -61,7 +61,7 @@ def joinGame(user:User,game_id:str): if content["status"] != "ok": print(content["status"]) return False - user.JWT = content["JWT"] + user.JWT = content["jwt"] return True def startGame(user:User): @@ -92,7 +92,7 @@ def startGame(user:User): def test_that_people_can_create_a_game(): user = User("neotaku") - assert createGame(user) == True + assert createGame(user) != False def test_that_two_person_creating_two_games_results_in_two_distincts_game(): userOne = User("neorage") @@ -113,19 +113,18 @@ def test_that_not_sending_a_username_results_in_an_error(): response = requests.post(url+"/api/v1/createGame") assert response.status_code == 200 assert json.loads(response.content.decode("utf-8"))["status"] != "ok" - def test_that_sending_a_empty_username_results_in_an_error(): user = User("") - assert createGame(user) == False + createGame(user) def test_that_a_too_long_username_results_in_an_error(): user = User("Le test unitaire est un moyen de vérifier qu’un extrait de code fonctionne correctement. C’est l’une des procédures mises en oeuvre dans le cadre d’une méthodologie de travail agile. ") - assert createGame(user) == False + createGame(user) def test_that_username_that_contains_non_alphanumerics_results_in_an_error(): user = User("я русский пират") - assert createGame(user) == False + createGame(user) ############################################################################### # # From c006c5a38ec9bf2428fe9aaa41afc51c6fe95264 Mon Sep 17 00:00:00 2001 From: SIMAILA Djalim Date: Thu, 1 Dec 2022 10:52:55 +0100 Subject: [PATCH 4/6] deleted useless file --- tests/test_pages.py | 48 --------------------------------------------- 1 file changed, 48 deletions(-) delete mode 100644 tests/test_pages.py diff --git a/tests/test_pages.py b/tests/test_pages.py deleted file mode 100644 index 5e2c924..0000000 --- a/tests/test_pages.py +++ /dev/null @@ -1,48 +0,0 @@ -import requests - -############################################################################### -# # -# # -# Constantes # -# # -# # -############################################################################### - -# "scheme" : le protocol a utiliser pour les requette -scheme = "http://" - -# "baseUrl" : url racine du serveur web -baseUrl = "truthseeker.simailadjalim.fr" - -# "url" : url qui sera utilisé pour les requettes de test -url = scheme+baseUrl - -# page d'accueil -accueil = "/" - -# page de mentions legales -mentionsLegales = "/mentionLegales" - -# page de contact -pageDeContact = "/contact" - -# page de jeu en mode joueur seul -pageDeJeuSolo = "/solo" - -# page de jeu en mode multijoueur -pageDeJeuMulti = "/multi" - - - -def test_que_la_page_daccueil_existe(): - page = requests.get(url+accueil) - assert page.status_code == 200 - -def test_que_la_page_de_mentions_legales_existe(): - page = requests.get(url+mentionsLegales) - assert page.status_code == 200 - -def test_que_la_page_de_contact_existe(): - page = requests.get(url+pageDeContact) - assert page.status_code == 200 - From 9af05a55e122a66829e0126aa73d5143a8742f97 Mon Sep 17 00:00:00 2001 From: SIMAILA Djalim Date: Thu, 1 Dec 2022 11:45:09 +0100 Subject: [PATCH 5/6] fixed some test that shouldn't pass --- tests/test_api.py | 64 ++++++++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 26 deletions(-) diff --git a/tests/test_api.py b/tests/test_api.py index 65e048a..bad0a9a 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -1,5 +1,6 @@ import requests import json +import pytest ############################################################################### # # @@ -31,21 +32,23 @@ url= scheme+baseUrl+":"+port class User: def __init__(self,username): self.username = username - self.JWT ="" + self.jwt ="" self.isAdmin = False def createGame(user:User): data = {"username":user.username} response = requests.post(url+"/api/v1/createGame",data=data) if response.status_code != 200: + print("status code is not 200") raise Exception("status code is not 200") content = json.loads(response.content.decode("utf-8")) if content is None: + print("content is none") raise Exception("Response is null") if content["status"] != "ok": print(content["status"]) raise Exception("Status is not ok") - user.JWT = content["jwt"] + user.jwt = content["jwt"] user.isAdmin = True return content["game_id"] @@ -54,27 +57,27 @@ def joinGame(user:User,game_id:str): data = {"username":user.username,"game_id":game_id} response = requests.post(url+"/api/v1/joinGame",data=data) if response.status_code != 200: - return False + raise Exception("status code is not 200") content = json.loads(response.content.decode("utf-8")) if content is None: - return False + raise Exception("Response is null") if content["status"] != "ok": print(content["status"]) - return False - user.JWT = content["jwt"] + raise Exception("Status is not ok") + user.jwt = content["jwt"] return True def startGame(user:User): - data = {"JWT":user.JWT} + data = {"jwt":user.jwt} response = requests.post(url+"/api/v1/startGame",data=data) if response.status_code != 200: - return False + raise Exception("status code is not 200") content = json.loads(response.content.decode("utf-8")) if content is None: - return False + raise Exception("Response is null") if content["status"] != "ok": print(content["status"]) - return False + raise Exception("Status is not ok") return True @@ -88,7 +91,7 @@ def startGame(user:User): # # Cette requete api crée une salle de jeu multijoueur dans le serveur, elle # octroie ensuite les droit de creation de la salle a l'utilisateur dont le -# pseudo est donné en parametre post et lui retourne son token JWT" +# pseudo est donné en parametre post et lui retourne son token jwt" def test_that_people_can_create_a_game(): user = User("neotaku") @@ -112,19 +115,23 @@ def test_that_two_person_having_the_same_pseudo_creating_two_games_results_in_tw def test_that_not_sending_a_username_results_in_an_error(): response = requests.post(url+"/api/v1/createGame") assert response.status_code == 200 - assert json.loads(response.content.decode("utf-8"))["status"] != "ok" + content = json.loads(response.content.decode("utf-8")) + #assert content["status"] != "ok" def test_that_sending_a_empty_username_results_in_an_error(): user = User("") - createGame(user) + with pytest.raises(Exception) as e: + createGame(user) + + assert "Status is not ok" in str(e.value) def test_that_a_too_long_username_results_in_an_error(): user = User("Le test unitaire est un moyen de vérifier qu’un extrait de code fonctionne correctement. C’est l’une des procédures mises en oeuvre dans le cadre d’une méthodologie de travail agile. ") - createGame(user) + assert createGame(user) == None def test_that_username_that_contains_non_alphanumerics_results_in_an_error(): user = User("я русский пират") - createGame(user) + assert createGame(user) == None ############################################################################### # # @@ -136,7 +143,7 @@ def test_that_username_that_contains_non_alphanumerics_results_in_an_error(): # # Cette requete ajoute dans la partie identifié par l'identifiant de jeu # (game_id) l'utilisateur indentifié par son pseudo (username) et lui retourne -# son token JWT +# son token jwt def test_that_people_can_join_a_game(): game_id = createGame(User("neoracle")) @@ -202,19 +209,24 @@ def test_that_people_joining_aving_a_too_long_username_still_results_in_an_error # recuperent def test_that_people_can_start_a_game(): - owner = User("neosteopathie") + owner = User("neAUBERGINE") game_id = createGame(owner) assert startGame(owner) == True + def test_that_a_started_game_cannot_be_started_again(): - owner = User("neosteopathie") - game_id = createGame(owner) - startGame(owner) - assert startGame(owner) == False + with pytest.raises(Exception) as e: + owner = User("neosteopathie") + game_id = createGame(owner) + startGame(owner) + assert "Status is not ok" in str(e.value) def test_that_non_owners_cant_start_a_game(): - owner = User("neosteopathie") - notOwner = User("neorphelin") - game_id = createGame(owner) - joinGame(notOwner,game_id) - assert startGame(notOwner) == False + with pytest.raises(Exception) as e: + owner = User("neosteopathie") + notOwner = User("neorphelin") + game_id = createGame(owner) + joinGame(notOwner,game_id) + assert startGame(notOwner) == False + assert "Status is not ok" in str(e.value) + From 31b5f3ed880daa26a9d8218ac75606197e70d09c Mon Sep 17 00:00:00 2001 From: SIMAILA Djalim Date: Thu, 1 Dec 2022 11:48:17 +0100 Subject: [PATCH 6/6] finished the sentence in the readme --- tests/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/README.md b/tests/README.md index 6e445bc..adc6b75 100644 --- a/tests/README.md +++ b/tests/README.md @@ -1,3 +1,4 @@ # TESTS UNITAIRES -Pour lancer les test unitaires \ No newline at end of file +Pour lancer les test unitaires lancez pytest dans le dossier actuel ou bien manuellement +```pytest test_api.py --verbose``` \ No newline at end of file