Tests unitaires yaml: check des RCUEs

This commit is contained in:
Emmanuel Viennet 2022-12-18 23:43:42 -03:00
parent d05ea4f002
commit 3cdc4b207a
3 changed files with 57 additions and 5 deletions

View File

@ -326,7 +326,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
)
"vrai si l'année est réussie, tous niveaux validables ou validés par le jury"
self.valide_moitie_rcue = self.nb_validables > (self.nb_competences // 2)
# Peut passer si plus de la moitié validables et tous > 8
"Peut passer si plus de la moitié validables et tous > 8"
self.passage_de_droit = self.valide_moitie_rcue and (self.nb_rcues_under_8 == 0)
# XXX TODO ajouter condition pour passage en S5

View File

@ -139,10 +139,12 @@ Etudiants:
"SAÉ 1.01": 8 # UE11 ratée
"SAÉ 1.02": 9 # UE12 ratée
"SAÉ 1.SEE.03": 18 # UE13 => sera capitalisée
"SAÉ 1.SEE.04": 7 # UE14 ratée
"SAÉ 1.SEE.04": 7.5 # UE14 ratée
attendu: # les codes jury que l'on doit vérifier
deca: # decision année
passage_de_droit: False
nb_competences: 4
nb_rcue_annee: 0 # pas de RCUE en S1
# jury S1, pas de décision annuelle
decisions_ues:
"UE 11":
@ -168,6 +170,10 @@ Etudiants:
"SAE24.SEE": 12 # UE24 SEE ok, mais ne compense pas
attendu:
deca:
passage_de_droit: False
nb_competences: 4
nb_rcue_annee: 4
valide_moitie_rcue: False # ici valide 2/2, pas plus de la moitié
passage_de_droit: False
code: ["RED", "..."]
code_valide: "RED"
@ -181,7 +187,12 @@ Etudiants:
code_valide: ADM
"UE 24 SEE":
code_valide: ADM
decisions_rcues: # on repère ici les RCUE par l'acronyme de leur 1ere UE
"UE 11":
code_valide: AJ
rcue:
moy_rcue: 8.5
est_compensable: False
S3:
parcours: SEE

View File

@ -15,7 +15,11 @@ from app import db
from app.auth.models import User
from app.but.import_refcomp import orebut_import_refcomp
from app.but.jury_but import DecisionsProposeesAnnee, DecisionsProposeesUE
from app.but.jury_but import (
DecisionsProposeesAnnee,
DecisionsProposeesRCUE,
DecisionsProposeesUE,
)
from app.models import (
ApcNiveau,
ApcParcours,
@ -354,6 +358,35 @@ def _check_decisions_ues(
assert getattr(dec_ue, attr) == dec_ue_att[attr]
def _check_decisions_rcues(
decisions_rcues: list[DecisionsProposeesRCUE], decisions_rcues_att: dict
):
"Vérifie les décisions d'RCUEs"
for acronyme, dec_rcue_att in decisions_rcues_att.items():
# retrouve la décision RCUE à partir de l'acronyme de la 1er UE
rcues_d = [
dec_rcue
for dec_rcue in decisions_rcues
if dec_rcue.rcue.ue_1.acronyme == acronyme
]
assert len(rcues_d) == 1 # un et un seul RCUE avec l'UE d'acronyme indiqué
dec_rcue = rcues_d[0]
if "codes" in dec_rcue_att:
_check_codes_jury(dec_rcue.codes, dec_rcue_att["codes"])
for attr in ("explanation", "code_valide"):
if attr in dec_rcue_att:
assert getattr(dec_rcue, attr) == dec_rcue_att[attr]
# Descend dans le RCUE:
if "rcue" in dec_rcue_att:
if "moy_rcue" in dec_rcue_att["rcue"]:
assert dec_rcue.rcue.moy_rcue == dec_rcue_att["rcue"]["moy_rcue"]
if "est_compensable" in dec_rcue_att["rcue"]:
assert (
dec_rcue.rcue.est_compensable()
== dec_rcue_att["rcue"]["est_compensable"]
)
def compare_decisions_annee(deca: DecisionsProposeesAnnee, deca_att: dict):
"""Vérifie que les résultats de jury calculés sont ceux attendus.
deca est le résultat calculé par ScoDoc
@ -362,9 +395,17 @@ def compare_decisions_annee(deca: DecisionsProposeesAnnee, deca_att: dict):
if "codes" in deca_att:
_check_codes_jury(deca.codes, deca_att["codes"])
for attr in ("passage_de_droit", "code_valide"):
for attr in ("passage_de_droit", "code_valide", "nb_competences"):
if attr in deca_att:
assert getattr(deca, attr) == deca_att[attr]
if "decisions_ues" in deca_att:
_check_decisions_ues(deca.decisions_ues, deca_att["decisions_ues"])
if "nb_rcues_annee" in deca_att:
assert deca_att["nb_rcues_annee"] == len(deca.rcues_annee)
if "decisions_rcues" in deca_att:
_check_decisions_rcues(
deca.decisions_rcue_by_niveau.values(), deca_att["decisions_rcues"]
)