From 3cdc4b207a32002d976a7367df333b43f99fe9e9 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Sun, 18 Dec 2022 23:43:42 -0300 Subject: [PATCH] Tests unitaires yaml: check des RCUEs --- app/but/jury_but.py | 2 +- tests/unit/cursus_but_gb.yaml | 15 ++++++++++-- tests/unit/yaml_setup.py | 45 +++++++++++++++++++++++++++++++++-- 3 files changed, 57 insertions(+), 5 deletions(-) diff --git a/app/but/jury_but.py b/app/but/jury_but.py index 05a902a31d..f862ae340d 100644 --- a/app/but/jury_but.py +++ b/app/but/jury_but.py @@ -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 diff --git a/tests/unit/cursus_but_gb.yaml b/tests/unit/cursus_but_gb.yaml index 5dfb49ae0d..30b1d6a272 100644 --- a/tests/unit/cursus_but_gb.yaml +++ b/tests/unit/cursus_but_gb.yaml @@ -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 diff --git a/tests/unit/yaml_setup.py b/tests/unit/yaml_setup.py index 9b815c02c8..6812c41eb4 100644 --- a/tests/unit/yaml_setup.py +++ b/tests/unit/yaml_setup.py @@ -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"] + )