forked from ScoDoc/ScoDoc
Assiduité : test unit évaluations
This commit is contained in:
parent
4aa85bac8d
commit
4754edd973
@ -793,27 +793,25 @@ def get_etud_evaluations_assiduites(etud: Identite) -> list[dict]:
|
|||||||
for evaluation in evaluations:
|
for evaluation in evaluations:
|
||||||
eval_assis: dict = {"evaluation_id": evaluation.id, "assiduites": []}
|
eval_assis: dict = {"evaluation_id": evaluation.id, "assiduites": []}
|
||||||
# Pas d'assiduités si pas de date
|
# Pas d'assiduités si pas de date
|
||||||
if evaluation.date_debut is None:
|
if evaluation.date_debut is not None:
|
||||||
continue
|
date_debut: datetime = evaluation.date_debut
|
||||||
|
date_fin: datetime
|
||||||
|
|
||||||
date_debut: datetime = evaluation.date_debut
|
if evaluation.date_fin is not None:
|
||||||
date_fin: datetime
|
date_fin = evaluation.date_fin
|
||||||
|
else:
|
||||||
|
# On met à la fin de la journée de date_debut
|
||||||
|
date_fin = datetime.combine(date_debut.date(), time.max)
|
||||||
|
|
||||||
if evaluation.date_fin is not None:
|
# Filtrage par rapport à la plage de l'évaluation
|
||||||
date_fin = evaluation.date_fin
|
assiduites: Query = etud.assiduites.filter(
|
||||||
else:
|
Assiduite.date_debut >= date_debut,
|
||||||
# On met à la fin de la journée de date_debut
|
Assiduite.date_fin <= date_fin,
|
||||||
date_fin = datetime.combine(date_debut.date(), time.max)
|
)
|
||||||
|
# On récupère les assiduités et on met à jour le dictionnaire
|
||||||
# Filtrage par rapport à la plage de l'évaluation
|
eval_assis["assiduites"] = [
|
||||||
assiduites: Query = etud.assiduites.filter(
|
assi.to_dict(format_api=True) for assi in assiduites
|
||||||
Assiduite.date_debut >= date_debut,
|
]
|
||||||
Assiduite.date_fin <= date_fin,
|
|
||||||
)
|
|
||||||
# On récupère les assiduités et on met à jour le dictionnaire
|
|
||||||
eval_assis["assiduites"] = [
|
|
||||||
assi.to_dict(format_api=True) for assi in assiduites
|
|
||||||
]
|
|
||||||
|
|
||||||
# On ajoute le dictionnaire à la liste des évaluations
|
# On ajoute le dictionnaire à la liste des évaluations
|
||||||
etud_evaluations_assiduites.append(eval_assis)
|
etud_evaluations_assiduites.append(eval_assis)
|
||||||
|
@ -7,13 +7,17 @@ ses fonctions liées
|
|||||||
|
|
||||||
Ecrit par HARTMANN Matthias (en s'inspirant de tests.unit.test_abs_count.py par Fares Amer )
|
Ecrit par HARTMANN Matthias (en s'inspirant de tests.unit.test_abs_count.py par Fares Amer )
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
from flask_sqlalchemy.query import Query
|
||||||
|
|
||||||
|
|
||||||
import app.scodoc.sco_assiduites as scass
|
import app.scodoc.sco_assiduites as scass
|
||||||
import app.scodoc.sco_utils as scu
|
import app.scodoc.sco_utils as scu
|
||||||
from app import db, log
|
from app import db, log
|
||||||
from app.models import (
|
from app.models import (
|
||||||
Assiduite,
|
Assiduite,
|
||||||
|
Evaluation,
|
||||||
FormSemestre,
|
FormSemestre,
|
||||||
Identite,
|
Identite,
|
||||||
Justificatif,
|
Justificatif,
|
||||||
@ -1115,6 +1119,7 @@ def _setup_fake_db(
|
|||||||
"formsemestres": formsemestres,
|
"formsemestres": formsemestres,
|
||||||
"etuds": etuds,
|
"etuds": etuds,
|
||||||
"etud_faux": etud_faux,
|
"etud_faux": etud_faux,
|
||||||
|
"g_fake": g_fake,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1730,3 +1735,104 @@ def test_cache_assiduites(test_client):
|
|||||||
) == (1, 1, 2)
|
) == (1, 1, 2)
|
||||||
# Deuxième semestre 2nj / 1j / 3t (Identique car cache et non modifié)
|
# Deuxième semestre 2nj / 1j / 3t (Identique car cache et non modifié)
|
||||||
assert scass.get_assiduites_count(etud.id, formsemestre2.to_dict()) == (2, 1, 3)
|
assert scass.get_assiduites_count(etud.id, formsemestre2.to_dict()) == (2, 1, 3)
|
||||||
|
|
||||||
|
|
||||||
|
def test_recuperation_evaluations(test_client):
|
||||||
|
"""
|
||||||
|
Vérification du bon fonctionnement de la récupération des assiduités d'une évaluation
|
||||||
|
et de la récupération de l'assiduité aux évaluations d'un étudiant
|
||||||
|
"""
|
||||||
|
|
||||||
|
data = _setup_fake_db(
|
||||||
|
[("2024-01-01", "2024-06-30")],
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
moduleimpl: ModuleImpl = data["moduleimpls"][0]
|
||||||
|
etud: Identite = data["etuds"][0]
|
||||||
|
|
||||||
|
# Création d'assiduités pour tester les évaluations
|
||||||
|
assiduites_dates = [
|
||||||
|
"2024-01-01",
|
||||||
|
"2024-01-02",
|
||||||
|
"2024-01-03",
|
||||||
|
]
|
||||||
|
assiduites = []
|
||||||
|
for assi in assiduites_dates:
|
||||||
|
assiduites.append(
|
||||||
|
Assiduite.create_assiduite(
|
||||||
|
etud=etud,
|
||||||
|
date_debut=scu.is_iso_formated(assi + "T10:00", True),
|
||||||
|
date_fin=scu.is_iso_formated(assi + "T12:00", True),
|
||||||
|
etat=scu.EtatAssiduite.ABSENT,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
# On génère une évaluation sans date
|
||||||
|
# elle devrait renvoyer une liste vide
|
||||||
|
evaluation_1: Evaluation = Evaluation.create(
|
||||||
|
moduleimpl=moduleimpl,
|
||||||
|
)
|
||||||
|
assert scass.get_evaluation_assiduites(evaluation_1) == []
|
||||||
|
|
||||||
|
# On génère une évaluation le 01/01/24 de 10h à 12h
|
||||||
|
evaluation_2: Evaluation = Evaluation.create(
|
||||||
|
moduleimpl=moduleimpl,
|
||||||
|
date_debut=scu.is_iso_formated("2024-01-01T10:00", True),
|
||||||
|
date_fin=scu.is_iso_formated("2024-01-01T12:00", True),
|
||||||
|
)
|
||||||
|
query: Query = scass.get_evaluation_assiduites(evaluation_2)
|
||||||
|
assert isinstance(query, Query), "Erreur, la fonction ne renvoie pas une Query"
|
||||||
|
|
||||||
|
# On vérifie le contenu de la query
|
||||||
|
# Cette query devrait contenir que la première assiduité
|
||||||
|
assert (
|
||||||
|
query.count() == 1
|
||||||
|
), "Erreur, la query ne contient pas le bon nombre d'assiduités"
|
||||||
|
assert (
|
||||||
|
query.first() == assiduites[0]
|
||||||
|
), "Erreur, la query ne contient pas la bonne assiduité"
|
||||||
|
|
||||||
|
# On génère une évaluation du 02/01/24 au 03/01/24
|
||||||
|
evaluation_3: Evaluation = Evaluation.create(
|
||||||
|
moduleimpl=moduleimpl,
|
||||||
|
date_debut=scu.is_iso_formated("2024-01-02T10:00", True),
|
||||||
|
date_fin=scu.is_iso_formated("2024-01-03T12:00", True),
|
||||||
|
)
|
||||||
|
|
||||||
|
query: Query = scass.get_evaluation_assiduites(evaluation_3)
|
||||||
|
assert isinstance(query, Query), "Erreur, la fonction ne renvoie pas une Query"
|
||||||
|
|
||||||
|
# On vérifie le contenu de la query
|
||||||
|
# On devrait avoir les deux dernières assiduités
|
||||||
|
assert (
|
||||||
|
query.count() == 2
|
||||||
|
), "Erreur, la query ne contient pas le bon nombre d'assiduités"
|
||||||
|
assert (
|
||||||
|
query.all() == assiduites[1:]
|
||||||
|
), "Erreur, la query ne contient pas les bonnes assiduités"
|
||||||
|
|
||||||
|
# Test de la récupération des assiduités aux évaluations
|
||||||
|
evaluations_assiduites = scass.get_etud_evaluations_assiduites(etud)
|
||||||
|
|
||||||
|
assert isinstance(
|
||||||
|
evaluations_assiduites, list
|
||||||
|
), "Erreur, la fonction ne renvoie pas une liste"
|
||||||
|
assert len(evaluations_assiduites) == 3, "Erreur, le nombre d'évaluations est faux"
|
||||||
|
assert all(
|
||||||
|
isinstance(e, dict) for e in evaluations_assiduites
|
||||||
|
), "Erreur, les éléments de la liste ne sont pas des dictionnaires"
|
||||||
|
assert all(
|
||||||
|
"evaluation_id" in e and "assiduites" in e for e in evaluations_assiduites
|
||||||
|
), "Erreur, les dictionnaires ne contiennent pas les bonnes clés"
|
||||||
|
assert (
|
||||||
|
evaluations_assiduites[0]["assiduites"] == []
|
||||||
|
), "Erreur, la première évaluation ne devrait pas contenir d'assiduités"
|
||||||
|
|
||||||
|
assert evaluations_assiduites[1]["assiduites"][0] == assiduites[0].to_dict(
|
||||||
|
format_api=True
|
||||||
|
), "Erreur, la deuxième évaluation n'est pas bonne"
|
||||||
|
|
||||||
|
assert evaluations_assiduites[2]["assiduites"] == [
|
||||||
|
assi.to_dict(format_api=True) for assi in assiduites[1:]
|
||||||
|
], "Erreur, la troisième évaluation n'est pas bonne"
|
||||||
|
Loading…
Reference in New Issue
Block a user