diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1828e92 --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +.PHONY: test + +test: + pytest -v ./athlete/tests + pytest -v ./medaille/tests + pytest -v ./discipline/tests + +clear_before_rendreTP: + rm -rf ./data ./__pycache__ ./athlete/__pycache__ ./medaille/__pycache__ ./discipline/__pycache__ \ No newline at end of file diff --git a/PROJET.md b/PROJET.md index 12fe38c..38d2423 100644 --- a/PROJET.md +++ b/PROJET.md @@ -34,7 +34,9 @@ python app.py ## How to test ```bash -pytest -vvv . +pytest -v athlete/tests +pytest -v discipline/tests +pytest -v medaille/tests ``` ## How to build the docker images diff --git a/athlete/__pycache__/app.cpython-311.pyc b/athlete/__pycache__/app.cpython-311.pyc deleted file mode 100644 index 99dcc32..0000000 Binary files a/athlete/__pycache__/app.cpython-311.pyc and /dev/null differ diff --git a/athlete/__pycache__/athlete.cpython-311.pyc b/athlete/__pycache__/athlete.cpython-311.pyc deleted file mode 100644 index 47a1317..0000000 Binary files a/athlete/__pycache__/athlete.cpython-311.pyc and /dev/null differ diff --git a/athlete/__pycache__/conftest.cpython-311-pytest-8.1.1.pyc b/athlete/__pycache__/conftest.cpython-311-pytest-8.1.1.pyc deleted file mode 100644 index a5c712b..0000000 Binary files a/athlete/__pycache__/conftest.cpython-311-pytest-8.1.1.pyc and /dev/null differ diff --git a/athlete/athlete.py b/athlete/athlete.py index 7f216be..b39c5b0 100644 --- a/athlete/athlete.py +++ b/athlete/athlete.py @@ -41,7 +41,7 @@ class ListeAthlete(RootModel): for athlete in data: self.root.append(Athlete(**athlete)) except FileNotFoundError: - print("Fichier introuvable") + print(f"Le fichier {path} n'existe pas") def loadFromJsonData(self, data: str): """ Charge les données depuis une chaine json diff --git a/athlete/conftest.py b/athlete/conftest.py index 6ccefe3..b18de41 100644 --- a/athlete/conftest.py +++ b/athlete/conftest.py @@ -2,6 +2,7 @@ import pytest import shutil from pathlib import Path from app import create_app +from flask import request @pytest.fixture() def app(): diff --git a/athlete/tests/__pycache__/test_delAthlete.cpython-311-pytest-8.1.1.pyc b/athlete/tests/__pycache__/test_delAthlete.cpython-311-pytest-8.1.1.pyc index f696723..1bbfd28 100644 Binary files a/athlete/tests/__pycache__/test_delAthlete.cpython-311-pytest-8.1.1.pyc and b/athlete/tests/__pycache__/test_delAthlete.cpython-311-pytest-8.1.1.pyc differ diff --git a/athlete/tests/__pycache__/test_getAthlete.cpython-311-pytest-8.1.1.pyc b/athlete/tests/__pycache__/test_getAthlete.cpython-311-pytest-8.1.1.pyc index 9a9eb02..227c3ac 100644 Binary files a/athlete/tests/__pycache__/test_getAthlete.cpython-311-pytest-8.1.1.pyc and b/athlete/tests/__pycache__/test_getAthlete.cpython-311-pytest-8.1.1.pyc differ diff --git a/athlete/tests/__pycache__/test_listeAthlete.cpython-311-pytest-8.1.1.pyc b/athlete/tests/__pycache__/test_listeAthlete.cpython-311-pytest-8.1.1.pyc index 9a21fcd..7db9d00 100644 Binary files a/athlete/tests/__pycache__/test_listeAthlete.cpython-311-pytest-8.1.1.pyc and b/athlete/tests/__pycache__/test_listeAthlete.cpython-311-pytest-8.1.1.pyc differ diff --git a/athlete/tests/__pycache__/test_ping_athlete.cpython-311-pytest-8.1.1.pyc b/athlete/tests/__pycache__/test_ping_athlete.cpython-311-pytest-8.1.1.pyc index 7d52440..ad51aea 100644 Binary files a/athlete/tests/__pycache__/test_ping_athlete.cpython-311-pytest-8.1.1.pyc and b/athlete/tests/__pycache__/test_ping_athlete.cpython-311-pytest-8.1.1.pyc differ diff --git a/athlete/tests/__pycache__/test_postAthlete.cpython-311-pytest-8.1.1.pyc b/athlete/tests/__pycache__/test_postAthlete.cpython-311-pytest-8.1.1.pyc index 8678aae..c1ca027 100644 Binary files a/athlete/tests/__pycache__/test_postAthlete.cpython-311-pytest-8.1.1.pyc and b/athlete/tests/__pycache__/test_postAthlete.cpython-311-pytest-8.1.1.pyc differ diff --git a/discipline/__pycache__/conftest.cpython-311-pytest-8.1.1.pyc b/discipline/__pycache__/conftest.cpython-311-pytest-8.1.1.pyc deleted file mode 100644 index 407abd7..0000000 Binary files a/discipline/__pycache__/conftest.cpython-311-pytest-8.1.1.pyc and /dev/null differ diff --git a/discipline/__pycache__/discipline.cpython-311.pyc b/discipline/__pycache__/discipline.cpython-311.pyc deleted file mode 100644 index 02e6bcb..0000000 Binary files a/discipline/__pycache__/discipline.cpython-311.pyc and /dev/null differ diff --git a/discipline/app.py b/discipline/app.py index b8c9635..f7e1eb7 100644 --- a/discipline/app.py +++ b/discipline/app.py @@ -1,13 +1,14 @@ from flask import Flask, jsonify, request from pathlib import Path import json -from discipline import Discipline, ListeDiscipline +from models import Discipline, ListeDiscipline # noinspection PyUnresolvedReferences from flask_swagger_ui import get_swaggerui_blueprint import os app = Flask(__name__) app.config['DISCIPLINE_FILE'] = os.getenv('DISCIPLINE_FILE', Path(__file__).parent.parent / 'data' / 'disciplines.json') +print(app.config['DISCIPLINE_FILE']) @app.route('/ping', methods=["GET"]) def ping(): @@ -50,9 +51,9 @@ def deleteDiscipline(id: int): """ listeDisciplines = ListeDiscipline() listeDisciplines.loadFromJson(app.config['DISCIPLINE_FILE']) - for athlete in listeDisciplines.root: - if athlete.id == id: - listeDisciplines.root.remove(athlete) + for discipline in listeDisciplines.root: + if discipline.id == id: + listeDisciplines.root.remove(discipline) with open(app.config['DISCIPLINE_FILE'], 'w') as f: json.dump(listeDisciplines.model_dump(), f, indent=4) return jsonify({"message": "Discipline supprimé"}), 200 @@ -102,7 +103,7 @@ def addDiscipline(): listeDisciplines = ListeDiscipline() listeDisciplines.loadFromJson(app.config['DISCIPLINE_FILE']) discipline = Discipline(**json.loads(request.data)) - discipline.id = max([athlete.id for athlete in listeDisciplines.root]) + 1 + discipline.id = max([discipline.id for discipline in listeDisciplines.root]) + 1 listeDisciplines.root.append(discipline) with open(app.config['DISCIPLINE_FILE'], 'w') as f: json.dump(listeDisciplines.model_dump(), f, indent=4) diff --git a/discipline/discipline.py b/discipline/models.py similarity index 82% rename from discipline/discipline.py rename to discipline/models.py index 96cc3bd..9fe252b 100644 --- a/discipline/discipline.py +++ b/discipline/models.py @@ -35,10 +35,10 @@ class ListeDiscipline(RootModel): try: with open(path) as f: data = json.load(f) - for athlete in data: - self.root.append(Discipline(**athlete)) + for discipline in data: + self.root.append(Discipline(**discipline)) except FileNotFoundError: - print("Fichier introuvable") + print(f"Le fichier {path} n'existe pas") def loadFromJsonData(self, data: str): """ Charge les données depuis une chaine json @@ -46,5 +46,5 @@ class ListeDiscipline(RootModel): :return: None """ data = json.loads(data) - for athlete in data: - self.root.append(Discipline(**athlete)) \ No newline at end of file + for discipline in data: + self.root.append(Discipline(**discipline)) \ No newline at end of file diff --git a/discipline/tests/__pycache__/conftest.cpython-311-pytest-8.1.1.pyc b/discipline/tests/__pycache__/conftest.cpython-311-pytest-8.1.1.pyc deleted file mode 100644 index 6a8c86d..0000000 Binary files a/discipline/tests/__pycache__/conftest.cpython-311-pytest-8.1.1.pyc and /dev/null differ diff --git a/discipline/tests/__pycache__/test_delAthlete.cpython-311-pytest-8.1.1.pyc b/discipline/tests/__pycache__/test_delAthlete.cpython-311-pytest-8.1.1.pyc deleted file mode 100644 index f696723..0000000 Binary files a/discipline/tests/__pycache__/test_delAthlete.cpython-311-pytest-8.1.1.pyc and /dev/null differ diff --git a/discipline/tests/__pycache__/test_delDiscipline.cpython-311-pytest-8.1.1.pyc b/discipline/tests/__pycache__/test_delDiscipline.cpython-311-pytest-8.1.1.pyc index 682f396..2ff664f 100644 Binary files a/discipline/tests/__pycache__/test_delDiscipline.cpython-311-pytest-8.1.1.pyc and b/discipline/tests/__pycache__/test_delDiscipline.cpython-311-pytest-8.1.1.pyc differ diff --git a/discipline/tests/__pycache__/test_getAthlete.cpython-311-pytest-8.1.1.pyc b/discipline/tests/__pycache__/test_getAthlete.cpython-311-pytest-8.1.1.pyc deleted file mode 100644 index 9a9eb02..0000000 Binary files a/discipline/tests/__pycache__/test_getAthlete.cpython-311-pytest-8.1.1.pyc and /dev/null differ diff --git a/discipline/tests/__pycache__/test_getDiscipline.cpython-311-pytest-8.1.1.pyc b/discipline/tests/__pycache__/test_getDiscipline.cpython-311-pytest-8.1.1.pyc index f797c82..9ae6caa 100644 Binary files a/discipline/tests/__pycache__/test_getDiscipline.cpython-311-pytest-8.1.1.pyc and b/discipline/tests/__pycache__/test_getDiscipline.cpython-311-pytest-8.1.1.pyc differ diff --git a/discipline/tests/__pycache__/test_gettest.cpython-311-pytest-8.1.1.pyc b/discipline/tests/__pycache__/test_gettest.cpython-311-pytest-8.1.1.pyc deleted file mode 100644 index 9e5b477..0000000 Binary files a/discipline/tests/__pycache__/test_gettest.cpython-311-pytest-8.1.1.pyc and /dev/null differ diff --git a/discipline/tests/__pycache__/test_listeAthlete.cpython-311-pytest-8.1.1.pyc b/discipline/tests/__pycache__/test_listeAthlete.cpython-311-pytest-8.1.1.pyc deleted file mode 100644 index 9a21fcd..0000000 Binary files a/discipline/tests/__pycache__/test_listeAthlete.cpython-311-pytest-8.1.1.pyc and /dev/null differ diff --git a/discipline/tests/__pycache__/test_listeDiscipline.cpython-311-pytest-8.1.1.pyc b/discipline/tests/__pycache__/test_listeDiscipline.cpython-311-pytest-8.1.1.pyc index 83b75ba..d7229a8 100644 Binary files a/discipline/tests/__pycache__/test_listeDiscipline.cpython-311-pytest-8.1.1.pyc and b/discipline/tests/__pycache__/test_listeDiscipline.cpython-311-pytest-8.1.1.pyc differ diff --git a/discipline/tests/__pycache__/test_ping.cpython-311-pytest-8.1.1.pyc b/discipline/tests/__pycache__/test_ping.cpython-311-pytest-8.1.1.pyc deleted file mode 100644 index 4258ec0..0000000 Binary files a/discipline/tests/__pycache__/test_ping.cpython-311-pytest-8.1.1.pyc and /dev/null differ diff --git a/discipline/tests/__pycache__/test_ping_discipline.cpython-311-pytest-8.1.1.pyc b/discipline/tests/__pycache__/test_ping_discipline.cpython-311-pytest-8.1.1.pyc index 0b74945..f5620aa 100644 Binary files a/discipline/tests/__pycache__/test_ping_discipline.cpython-311-pytest-8.1.1.pyc and b/discipline/tests/__pycache__/test_ping_discipline.cpython-311-pytest-8.1.1.pyc differ diff --git a/discipline/tests/__pycache__/test_postAthlete.cpython-311-pytest-8.1.1.pyc b/discipline/tests/__pycache__/test_postAthlete.cpython-311-pytest-8.1.1.pyc deleted file mode 100644 index 8678aae..0000000 Binary files a/discipline/tests/__pycache__/test_postAthlete.cpython-311-pytest-8.1.1.pyc and /dev/null differ diff --git a/discipline/tests/__pycache__/test_postDiscipline.cpython-311-pytest-8.1.1.pyc b/discipline/tests/__pycache__/test_postDiscipline.cpython-311-pytest-8.1.1.pyc index 2a1d1e9..b134f20 100644 Binary files a/discipline/tests/__pycache__/test_postDiscipline.cpython-311-pytest-8.1.1.pyc and b/discipline/tests/__pycache__/test_postDiscipline.cpython-311-pytest-8.1.1.pyc differ diff --git a/discipline/tests/test_getDiscipline.py b/discipline/tests/test_getDiscipline.py index b69ed1f..c86ec33 100644 --- a/discipline/tests/test_getDiscipline.py +++ b/discipline/tests/test_getDiscipline.py @@ -1,4 +1,4 @@ -from discipline import Discipline +from models import Discipline def test_getDiscipline(client): response = client.get("/1") diff --git a/discipline/tests/test_listeDiscipline.py b/discipline/tests/test_listeDiscipline.py index 778fb6a..64069a1 100644 --- a/discipline/tests/test_listeDiscipline.py +++ b/discipline/tests/test_listeDiscipline.py @@ -1,9 +1,9 @@ -from discipline import ListeDiscipline -def test_listeAthlete(client): +from models import ListeDiscipline +def test_listeDiscipline(client): response = client.get("/") listeDiscipline = ListeDiscipline() listeDiscipline.loadFromJsonData(response.data) assert listeDiscipline.root is not None assert len(listeDiscipline.root) > 0 - assert listeDiscipline.root[0].id == 0 - assert listeDiscipline.root[0].nom is not None + assert listeDiscipline.root[0].id == 1 + assert listeDiscipline.root[0].intitule is not None diff --git a/discipline/tests/test_postDiscipline.py b/discipline/tests/test_postDiscipline.py index bd288e5..40f7070 100644 --- a/discipline/tests/test_postDiscipline.py +++ b/discipline/tests/test_postDiscipline.py @@ -1,4 +1,4 @@ -from discipline import Discipline +from models import Discipline def test_postDiscipline(client): discipline = Discipline( diff --git a/medaille/__pycache__/conftest.cpython-311-pytest-8.1.1.pyc b/medaille/__pycache__/conftest.cpython-311-pytest-8.1.1.pyc deleted file mode 100644 index 32d37cf..0000000 Binary files a/medaille/__pycache__/conftest.cpython-311-pytest-8.1.1.pyc and /dev/null differ diff --git a/medaille/app.py b/medaille/app.py index ebbf072..5a2c7f4 100644 --- a/medaille/app.py +++ b/medaille/app.py @@ -1,7 +1,7 @@ from flask import Flask, jsonify, request from pathlib import Path import json -from athlete import ListeAthlete, Athlete +from models import ListeMedaille, Medaille from flask_swagger_ui import get_swaggerui_blueprint import os @@ -11,98 +11,102 @@ app.config['MEDAILLE_FILE'] = os.getenv('MEDAILLE_FILE', Path(__file__).parent.p def ping(): return jsonify({"message": "pong"}), 200 @app.route('/', methods=["GET"]) -def listeAthlete(): +def listeMedaille(): """ - Renvoie la liste des athlètes + Renvoie la liste des médilles """ # Offset / Limit offset = request.args.get('offset', 0) limit = request.args.get('limit', 10) - listeAthletes = ListeAthlete() - listeAthletes.loadFromJson(app.config['MEDAILLE_FILE']) + listeMedailles = ListeMedaille() + listeMedailles.loadFromJson(app.config['MEDAILLE_FILE']) if limit != 0: - listeAthletes.root = listeAthletes.root[int(offset):int(offset)+int(limit)] + listeMedailles.root = listeMedailles.root[int(offset):int(offset)+int(limit)] else: - listeAthletes.root = listeAthletes.root[int(offset):] + listeMedailles.root = listeMedailles.root[int(offset):] - return jsonify(listeAthletes.model_dump()), 200 + return jsonify(listeMedailles.model_dump()), 200 @app.route('/', methods=["GET"]) -def getAthlete(id: int): +def getMedaille(id: int): """ - Renvoie un athlète par son id + Renvoie un médille par son id """ - listeAthletes = ListeAthlete() - listeAthletes.loadFromJson(app.config['MEDAILLE_FILE']) - for athlete in listeAthletes.root: - if athlete.id == id: - return jsonify(athlete.model_dump()), 200 - return jsonify({"message": "Athlete introuvable"}), 404 + listeMedailles = ListeMedaille() + listeMedailles.loadFromJson(app.config['MEDAILLE_FILE']) + for medaille in listeMedailles.root: + if medaille.id == id: + return jsonify(medaille.model_dump()), 200 + return jsonify({"message": "Medaille introuvable"}), 404 @app.route('/', methods=["DELETE"]) -def deleteAthlete(id: int): +def deleteMedaille(id: int): """ - Supprime un athlète par son id + Supprime un médille par son id """ - listeAthletes = ListeAthlete() - listeAthletes.loadFromJson(app.config['MEDAILLE_FILE']) - for athlete in listeAthletes.root: - if athlete.id == id: - listeAthletes.root.remove(athlete) + listeMedailles = ListeMedaille() + listeMedailles.loadFromJson(app.config['MEDAILLE_FILE']) + for medaille in listeMedailles.root: + if medaille.id == id: + listeMedailles.root.remove(medaille) with open(app.config['MEDAILLE_FILE'], 'w') as f: - json.dump(listeAthletes.model_dump(), f, indent=4) - return jsonify({"message": "Athlete supprimé"}), 200 - return jsonify({"message": "Athlete introuvable"}), 404 + json.dump(listeMedailles.model_dump(), f, indent=4) + return jsonify({"message": "Medaille supprimé"}), 200 + return jsonify({"message": "Medaille introuvable"}), 404 @app.route('/', methods=["PUT"]) -def updateAthlete(id: int): +def updateMedaille(id: int): """ - Met à jour un athlète par son id + Met à jour un médille par son id """ - listeAthletes = ListeAthlete() - listeAthletes.loadFromJson(app.config['MEDAILLE_FILE']) - for athlete in listeAthletes.root: - if athlete.id == id: + listeMedailles = ListeMedaille() + listeMedailles.loadFromJson(app.config['MEDAILLE_FILE']) + for medaille in listeMedailles.root: + if medaille.id == id: data = json.loads(request.data) for key, value in data.items(): - setattr(athlete, key, value) + setattr(medaille, key, value) with open(app.config['MEDAILLE_FILE'], 'w') as f: - json.dump(listeAthletes.model_dump(), f, indent=4) - return jsonify({"message": "Athlete mis à jour"}), 200 - return jsonify({"message": "Athlete introuvable"}), 404 + json.dump(listeMedailles.model_dump(), f, indent=4) + return jsonify({"message": "Medaille mis à jour"}), 200 + return jsonify({"message": "Medaille introuvable"}), 404 @app.route('/', methods=["PATCH"]) -def patchAthlete(id: int): +def patchMedaille(id: int): """ - Met à jour un athlète par son id + Met à jour un médille par son id """ - listeAthletes = ListeAthlete() - listeAthletes.loadFromJson(app.config['MEDAILLE_FILE']) - for athlete in listeAthletes.root: - if athlete.id == id: + listeMedailles = ListeMedaille() + listeMedailles.loadFromJson(app.config['MEDAILLE_FILE']) + for medaille in listeMedailles.root: + if medaille.id == id: data = json.loads(request.data) - data["id"] = athlete.id # On ne peut pas changer l'id + data["id"] = medaille.id # On ne peut pas changer l'id for key, value in data.items(): - if hasattr(athlete, key): - setattr(athlete, key, value) + if hasattr(medaille, key): + setattr(medaille, key, value) + if not medaille.validate(): + return jsonify({"message": "Données invalides"}), 400 with open(app.config['MEDAILLE_FILE'], 'w') as f: - json.dump(listeAthletes.model_dump(), f, indent=4) - return jsonify({"message": "Athlete mis à jour"}), 200 - return jsonify({"message": "Athlete introuvable"}), 404 + json.dump(listeMedailles.model_dump(), f, indent=4) + return jsonify({"message": "Medaille mis à jour"}), 200 + return jsonify({"message": "Medaille introuvable"}), 404 @app.route('/', methods=["POST"]) -def addAthlete(): +def addMedaille(): """ - Ajoute un athlète + Ajoute un médille """ - listeAthletes = ListeAthlete() - listeAthletes.loadFromJson(app.config['MEDAILLE_FILE']) - athlete = Athlete(**json.loads(request.data)) - athlete.id = max([athlete.id for athlete in listeAthletes.root]) + 1 - listeAthletes.root.append(athlete) + listeMedailles = ListeMedaille() + listeMedailles.loadFromJson(app.config['MEDAILLE_FILE']) + medaille = Medaille(**json.loads(request.data)) + if not medaille.validate(): + return jsonify({"message": "Données invalides"}), 400 + medaille.id = max([medaille.id for medaille in listeMedailles.root]) + 1 + listeMedailles.root.append(medaille) with open(app.config['MEDAILLE_FILE'], 'w') as f: - json.dump(listeAthletes.model_dump(), f, indent=4) - return jsonify(athlete.model_dump()), 200 + json.dump(listeMedailles.model_dump(), f, indent=4) + return jsonify(medaille.model_dump()), 200 swaggerui_blueprint = get_swaggerui_blueprint( "/swagger", diff --git a/medaille/models.py b/medaille/models.py new file mode 100644 index 0000000..28421ee --- /dev/null +++ b/medaille/models.py @@ -0,0 +1,60 @@ +from pydantic import BaseModel, RootModel +from typing import Optional, List +import json + +class Medaille(BaseModel): + """ + Modèle Medaille + """ + id: Optional[int] = 0 + type: str # Or, Argent, Bronze + sport: str + categorie: str # ex : 80kg pour le judo + pays: str # Nom FR du pays + + def loadFromJsonData(self, data: str): + """ + Charge les données depuis une chaine json + + :param data: Données json + :return: None + """ + data = json.loads(data) + for key, value in data.items(): + setattr(self, key, value) + + def validate(self) -> bool: + """ + Valide les données + + :return: True si les données sont valides, False sinon + """ + if self.type not in ["Or", "Argent", "Bronze"]: + return False + return True + +class ListeMedaille(RootModel): + root: List[Medaille] = [] + def loadFromJson(self, path: str): + """ + Charge les données depuis un fichier json + + :param path: Chemin du fichier json + :return: None + """ + try: + with open(path) as f: + data = json.load(f) + for discipline in data: + self.root.append(Medaille(**discipline)) + except FileNotFoundError: + print(f"Le fichier {path} n'existe pas") + def loadFromJsonData(self, data: str): + """ + Charge les données depuis une chaine json + :param data: Données json + :return: None + """ + data = json.loads(data) + for discipline in data: + self.root.append(Medaille(**discipline)) \ No newline at end of file diff --git a/medaille/static/swagger.yaml b/medaille/static/swagger.yaml index 7d18542..28a2d46 100644 --- a/medaille/static/swagger.yaml +++ b/medaille/static/swagger.yaml @@ -118,15 +118,12 @@ components: sport: type: integer example: 1234567 - disclipine: - type: integer - example: 1234567 + categorie: + type: str + example: +80kg pays: type: string example: France - logo: - type: string - example: https://olympics.com/images/static/sports/pictograms/v2/kte.svg requestBodies: User: description: Objet médaille à ajouter diff --git a/medaille/tests/test_delMedaille.py b/medaille/tests/test_delMedaille.py new file mode 100644 index 0000000..d13d995 --- /dev/null +++ b/medaille/tests/test_delMedaille.py @@ -0,0 +1,6 @@ +def test_delMedaille(client): + response = client.delete("/1") + assert response.status_code == 200 + + response = client.get("/1") + assert response.status_code == 404 \ No newline at end of file diff --git a/medaille/tests/test_getMedaille.py b/medaille/tests/test_getMedaille.py new file mode 100644 index 0000000..07fdc1b --- /dev/null +++ b/medaille/tests/test_getMedaille.py @@ -0,0 +1,13 @@ +from models import Medaille + +def test_getMedaille(client): + response = client.get("/1") + medaille = Medaille( + id=1, + type="Or", + sport="Judo", + categorie="80kg", + pays="France" + ) + assert medaille.model_dump() == response.json + assert response.status_code == 200 diff --git a/medaille/tests/test_listeMedaille.py b/medaille/tests/test_listeMedaille.py new file mode 100644 index 0000000..673106e --- /dev/null +++ b/medaille/tests/test_listeMedaille.py @@ -0,0 +1,8 @@ +from models import ListeMedaille +def test_listeMedaille(client): + response = client.get("/") + listeMedailles = ListeMedaille() + listeMedailles.loadFromJsonData(response.data) + assert listeMedailles.root is not None + assert len(listeMedailles.root) > 0 + assert listeMedailles.root[0].id == 1 diff --git a/medaille/tests/test_ping_medaille.py b/medaille/tests/test_ping_medaille.py new file mode 100644 index 0000000..e825694 --- /dev/null +++ b/medaille/tests/test_ping_medaille.py @@ -0,0 +1,3 @@ +def test_ping_medaille(client): + response = client.get("/ping") + assert b"{\"message\":\"pong\"}\n" in response.data diff --git a/medaille/tests/test_postMedaille.py b/medaille/tests/test_postMedaille.py new file mode 100644 index 0000000..28e5af6 --- /dev/null +++ b/medaille/tests/test_postMedaille.py @@ -0,0 +1,30 @@ +from models import Medaille + +def test_postMedaille(client): + medaille = Medaille( + id=1, + type="Argent", + sport="Escrime", + categorie="Fleuret", + pays="Italie" + ) + + response = client.post("/", json=medaille.model_dump()) + assert response.status_code == 200 + medaille.id = response.json["id"] + response = client.get(f"/{medaille.id}") + + assert response.json == medaille.model_dump() + +def test_postMedaille_erreur(client): + medaille = Medaille( + id=1, + type="NexistePas", + sport="Escrime", + categorie="Fleuret", + pays="Italie" + ) + + response = client.post("/", json=medaille.model_dump()) + assert response.status_code == 400 + assert response.json == {'message': 'Données invalides'} diff --git a/sample/disciplines.json b/sample/disciplines.json index c9684f1..c458b43 100644 --- a/sample/disciplines.json +++ b/sample/disciplines.json @@ -18,13 +18,13 @@ "intitule": "100m", "type": "Course", "description": "Le 100 mètres est une épreuve de sprint en athlétisme. C'est l'épreuve reine des sprinteurs.", - "logo": "https://upload.wikimedia.org/wikipedia/commons/1/1b/Athletics_pictogram.svg", + "logo": "https://upload.wikimedia.org/wikipedia/commons/1/1b/Athletics_pictogram.svg" }, { "id": 4, "intitule": "Natation", "type": "Nage", "description": "La natation est un sport consistant à parcourir une certaine distance dans l'eau, en utilisant les bras et les jambes.", - "logo": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Swimming_pictogram.svg", + "logo": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Swimming_pictogram.svg" } ] \ No newline at end of file diff --git a/sample/medailles.json b/sample/medailles.json new file mode 100644 index 0000000..7e019c7 --- /dev/null +++ b/sample/medailles.json @@ -0,0 +1,44 @@ +[ + { + "id": 1, + "type": "Or", + "sport": "Judo", + "categorie": "80kg", + "pays": "France" + }, + { + "id": 2, + "type": "Argent", + "sport": "Judo", + "categorie": "80kg", + "pays": "France" + }, + { + "id": 3, + "type": "Bronze", + "sport": "Judo", + "categorie": "80kg", + "pays": "France" + }, + { + "id": 4, + "type": "Or", + "sport": "Judo", + "categorie": "80kg", + "pays": "France" + }, + { + "id": 5, + "type": "Argent", + "sport": "Judo", + "categorie": "80kg", + "pays": "France" + }, + { + "id": 6, + "type": "Bronze", + "sport": "Judo", + "categorie": "80kg", + "pays": "France" + } +] \ No newline at end of file