diff --git a/app/api/assiduites.py b/app/api/assiduites.py index b1386ca72..503130eda 100644 --- a/app/api/assiduites.py +++ b/app/api/assiduites.py @@ -12,6 +12,7 @@ from flask_json import as_json from flask_login import current_user, login_required from flask_sqlalchemy.query import Query from sqlalchemy.orm.exc import ObjectDeletedError +from werkzeug.exceptions import HTTPException from app import db, log, set_sco_dept import app.scodoc.sco_assiduites as scass @@ -377,7 +378,10 @@ def evaluation_assiduites(evaluation_id): } """ # Récupération de l'évaluation - evaluation: Evaluation = Evaluation.get_evaluation(evaluation_id) + try: + evaluation: Evaluation = Evaluation.get_evaluation(evaluation_id) + except HTTPException: + return json_error(404, "L'évaluation n'existe pas") evaluation_assiduites_par_etudid: dict[int, list[Assiduite]] = {} for assi in scass.get_evaluation_assiduites(evaluation): diff --git a/app/scodoc/sco_assiduites.py b/app/scodoc/sco_assiduites.py index 1383f6ba0..fbe9ea4e1 100644 --- a/app/scodoc/sco_assiduites.py +++ b/app/scodoc/sco_assiduites.py @@ -737,12 +737,12 @@ def get_evaluation_assiduites(evaluation: Evaluation) -> Query: Renvoie une query d'assiduité en fonction des étudiants inscrits à l'évaluation et de la date de l'évaluation. - Attention : Si l'évaluation n'a pas de date, renvoie None + Attention : Si l'évaluation n'a pas de date, renvoie une liste vide """ # Evaluation sans date if evaluation.date_debut is None: - return None + return [] # Récupération des étudiants inscrits à l'évaluation etuds: Query = Identite.query.join( diff --git a/tests/api/test_api_assiduites.py b/tests/api/test_api_assiduites.py index 824fb51a7..b8f3f7e41 100644 --- a/tests/api/test_api_assiduites.py +++ b/tests/api/test_api_assiduites.py @@ -43,6 +43,8 @@ ASSIDUITES_FIELDS = { "external_data": dict, } +ASSIDUITES_EVALUATIONS_FIELDS = {"evaluation_id": int, "assiduites": list} + CREATE_FIELD = {"assiduite_id": int} BATCH_FIELD = {"errors": list, "success": list} @@ -139,6 +141,46 @@ def test_route_assiduites(api_headers): check_failure_get(f"/assiduites/{FAUX}/query?", api_headers) +def test_route_assiduites_evaluations(api_headers): + """test de la route /assiduites//evaluations""" + + # Bon fonctionnement + + data = GET( + path=f"/assiduites/{ETUDID}/evaluations", headers=api_headers, dept=DEPT_ACRONYM + ) + assert isinstance(data, list) + for evals in data: + check_fields(evals, ASSIDUITES_FIELDS) + for assi in evals["assiduites"]: + check_fields(assi, ASSIDUITES_FIELDS) + + # Mauvais fonctionnement + check_failure_get(f"/assiduites/{FAUX}/evaluations", api_headers) + + +def test_route_evaluations_assiduites(api_headers): + """test de la route /evaluation//assiduites""" + + # Bon fonctionnement + evaluation_id = 1 + data = GET( + path=f"/evaluation/{evaluation_id}/assiduites", + headers=api_headers, + dept=DEPT_ACRONYM, + ) + assert isinstance(data, dict) + for key, val in data.items(): + assert isinstance(key, str), "Erreur les clés ne sont pas des strings" + assert isinstance(val, list), "Erreur, les valeurs ne sont pas des listes" + + for assi in val: + check_fields(assi, ASSIDUITES_FIELDS) + + # Mauvais fonctionnement + check_failure_get(f"/evaluation/{FAUX}/assiduites", api_headers) + + def test_route_formsemestre_assiduites(api_headers): """test de la route /assiduites/formsemestre/""" diff --git a/tools/fakedatabase/create_test_api_database.py b/tools/fakedatabase/create_test_api_database.py index cd5182bee..adeaa7c33 100644 --- a/tools/fakedatabase/create_test_api_database.py +++ b/tools/fakedatabase/create_test_api_database.py @@ -395,12 +395,13 @@ def ajouter_assiduites_justificatifs(formsemestre: FormSemestre): MODS.append(None) for etud in formsemestre.etuds: + # Se base sur la date des évaluations base_date = datetime.datetime( - 2021, 9, [6, 13, 20, 27][random.randint(0, 3)], 8, 0, 0 + 2022, 3, [1, 8, 15, 22, 29][random.randint(0, 4)], 8, 0, 0 ) base_date = localize_datetime(base_date) - for i in range(random.randint(1, 5)): + for i in range(random.randint(1, 4)): etat = random.randint(0, 2) moduleimpl = random.choice(MODS) deb_date = base_date + datetime.timedelta(days=i)