forked from ScoDoc/ScoDoc
Assiduité : test api routes évaluations
This commit is contained in:
parent
6955c36ff5
commit
4aa85bac8d
@ -12,6 +12,7 @@ from flask_json import as_json
|
|||||||
from flask_login import current_user, login_required
|
from flask_login import current_user, login_required
|
||||||
from flask_sqlalchemy.query import Query
|
from flask_sqlalchemy.query import Query
|
||||||
from sqlalchemy.orm.exc import ObjectDeletedError
|
from sqlalchemy.orm.exc import ObjectDeletedError
|
||||||
|
from werkzeug.exceptions import HTTPException
|
||||||
|
|
||||||
from app import db, log, set_sco_dept
|
from app import db, log, set_sco_dept
|
||||||
import app.scodoc.sco_assiduites as scass
|
import app.scodoc.sco_assiduites as scass
|
||||||
@ -377,7 +378,10 @@ def evaluation_assiduites(evaluation_id):
|
|||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
# Récupération de l'évaluation
|
# 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]] = {}
|
evaluation_assiduites_par_etudid: dict[int, list[Assiduite]] = {}
|
||||||
for assi in scass.get_evaluation_assiduites(evaluation):
|
for assi in scass.get_evaluation_assiduites(evaluation):
|
||||||
|
@ -737,12 +737,12 @@ def get_evaluation_assiduites(evaluation: Evaluation) -> Query:
|
|||||||
Renvoie une query d'assiduité en fonction des étudiants inscrits à l'évaluation
|
Renvoie une query d'assiduité en fonction des étudiants inscrits à l'évaluation
|
||||||
et de la date de 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
|
# Evaluation sans date
|
||||||
if evaluation.date_debut is None:
|
if evaluation.date_debut is None:
|
||||||
return None
|
return []
|
||||||
|
|
||||||
# Récupération des étudiants inscrits à l'évaluation
|
# Récupération des étudiants inscrits à l'évaluation
|
||||||
etuds: Query = Identite.query.join(
|
etuds: Query = Identite.query.join(
|
||||||
|
@ -43,6 +43,8 @@ ASSIDUITES_FIELDS = {
|
|||||||
"external_data": dict,
|
"external_data": dict,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ASSIDUITES_EVALUATIONS_FIELDS = {"evaluation_id": int, "assiduites": list}
|
||||||
|
|
||||||
CREATE_FIELD = {"assiduite_id": int}
|
CREATE_FIELD = {"assiduite_id": int}
|
||||||
BATCH_FIELD = {"errors": list, "success": list}
|
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)
|
check_failure_get(f"/assiduites/{FAUX}/query?", api_headers)
|
||||||
|
|
||||||
|
|
||||||
|
def test_route_assiduites_evaluations(api_headers):
|
||||||
|
"""test de la route /assiduites/<etudid:int>/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/<int:evaluation_id>/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):
|
def test_route_formsemestre_assiduites(api_headers):
|
||||||
"""test de la route /assiduites/formsemestre/<formsemestre_id:int>"""
|
"""test de la route /assiduites/formsemestre/<formsemestre_id:int>"""
|
||||||
|
|
||||||
|
@ -395,12 +395,13 @@ def ajouter_assiduites_justificatifs(formsemestre: FormSemestre):
|
|||||||
MODS.append(None)
|
MODS.append(None)
|
||||||
|
|
||||||
for etud in formsemestre.etuds:
|
for etud in formsemestre.etuds:
|
||||||
|
# Se base sur la date des évaluations
|
||||||
base_date = datetime.datetime(
|
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)
|
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)
|
etat = random.randint(0, 2)
|
||||||
moduleimpl = random.choice(MODS)
|
moduleimpl = random.choice(MODS)
|
||||||
deb_date = base_date + datetime.timedelta(days=i)
|
deb_date = base_date + datetime.timedelta(days=i)
|
||||||
|
Loading…
Reference in New Issue
Block a user