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" "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) 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) self.passage_de_droit = self.valide_moitie_rcue and (self.nb_rcues_under_8 == 0)
# XXX TODO ajouter condition pour passage en S5 # XXX TODO ajouter condition pour passage en S5

View File

@ -139,10 +139,12 @@ Etudiants:
"SAÉ 1.01": 8 # UE11 ratée "SAÉ 1.01": 8 # UE11 ratée
"SAÉ 1.02": 9 # UE12 ratée "SAÉ 1.02": 9 # UE12 ratée
"SAÉ 1.SEE.03": 18 # UE13 => sera capitalisé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 attendu: # les codes jury que l'on doit vérifier
deca: # decision année deca: # decision année
passage_de_droit: False passage_de_droit: False
nb_competences: 4
nb_rcue_annee: 0 # pas de RCUE en S1
# jury S1, pas de décision annuelle # jury S1, pas de décision annuelle
decisions_ues: decisions_ues:
"UE 11": "UE 11":
@ -168,6 +170,10 @@ Etudiants:
"SAE24.SEE": 12 # UE24 SEE ok, mais ne compense pas "SAE24.SEE": 12 # UE24 SEE ok, mais ne compense pas
attendu: attendu:
deca: 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 passage_de_droit: False
code: ["RED", "..."] code: ["RED", "..."]
code_valide: "RED" code_valide: "RED"
@ -181,7 +187,12 @@ Etudiants:
code_valide: ADM code_valide: ADM
"UE 24 SEE": "UE 24 SEE":
code_valide: ADM 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: S3:
parcours: SEE parcours: SEE

View File

@ -15,7 +15,11 @@ from app import db
from app.auth.models import User from app.auth.models import User
from app.but.import_refcomp import orebut_import_refcomp 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 ( from app.models import (
ApcNiveau, ApcNiveau,
ApcParcours, ApcParcours,
@ -354,6 +358,35 @@ def _check_decisions_ues(
assert getattr(dec_ue, attr) == dec_ue_att[attr] 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): def compare_decisions_annee(deca: DecisionsProposeesAnnee, deca_att: dict):
"""Vérifie que les résultats de jury calculés sont ceux attendus. """Vérifie que les résultats de jury calculés sont ceux attendus.
deca est le résultat calculé par ScoDoc 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: if "codes" in deca_att:
_check_codes_jury(deca.codes, deca_att["codes"]) _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: if attr in deca_att:
assert getattr(deca, attr) == deca_att[attr] assert getattr(deca, attr) == deca_att[attr]
if "decisions_ues" in deca_att: if "decisions_ues" in deca_att:
_check_decisions_ues(deca.decisions_ues, deca_att["decisions_ues"]) _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"]
)