From 49e8cf8e5f0da6694e7a71242543869ffd1dab3b Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Sun, 14 May 2023 17:36:06 +0200 Subject: [PATCH] =?UTF-8?q?test=20unitaire=20BUT=20Info:=20compl=C3=A8te?= =?UTF-8?q?=20formation=20et=20config=20yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/ressources/yaml/cursus_but_info.yaml | 116 ++++++++++++++++++--- tests/unit/test_but_cursus.py | 2 +- tests/unit/yaml_setup.py | 7 +- tests/unit/yaml_setup_but.py | 33 +++--- 4 files changed, 127 insertions(+), 31 deletions(-) diff --git a/tests/ressources/yaml/cursus_but_info.yaml b/tests/ressources/yaml/cursus_but_info.yaml index 473014e18..35fe3d9ec 100644 --- a/tests/ressources/yaml/cursus_but_info.yaml +++ b/tests/ressources/yaml/cursus_but_info.yaml @@ -3,41 +3,131 @@ # mais à ces niveaux sont associés des UEs dont les coefficients des ressources # varient selon le parcours. # +# Mise en place cursus avec parcours A et B ReferentielCompetences: filename: but-INFO-05012022-081701.xml specialite: INFO Formation: - filename: scodoc_formation_BUT_INFO_v1.xml + filename: scodoc_formation_BUT_INFO_v0514.xml + # nota: les associations UE/Niveaux sont déjà données dans ce fichier XML. ues: + # S1 + 'UE11': + annee: BUT1 + 'UE12': + annee: BUT1 + 'UE13': + annee: BUT1 + 'UE14': + annee: BUT1 + 'UE15': + annee: BUT1 + 'UE16': + annee: BUT1 + # S2 + 'UE21': + annee: BUT1 + 'UE22': + annee: BUT1 + 'UE23': + annee: BUT1 + 'UE24': + annee: BUT1 + 'UE25': + annee: BUT1 + 'UE26': + annee: BUT1 + # S3 + 'UE31': + annee: BUT2 + 'UE32': + annee: BUT2 + 'UE33': + annee: BUT2 + 'UE34': + annee: BUT2 + 'UE35': + annee: BUT2 + 'UE36': + annee: BUT2 # S4 'UE41-A': # UE pour le parcours A annee: BUT2 - competence: Réaliser - 'UE41-C': # UE pour le parcours C (même contenu, coefs différents) + 'UE41-B': # UE pour le parcours B (même contenu, coefs différents) annee: BUT2 - competence: Réaliser 'UE42': annee: BUT2 - competence: Optimiser 'UE43': annee: BUT2 - competence: Administrer 'UE44': annee: BUT2 - competence: Gérer 'UE45': annee: BUT2 - competence: Conduire 'UE46': annee: BUT2 - competence: Collaborer FormSemestres: - # S4 avec parcours A et C - S4: + # Semestres avec parcours A et B + S1: idx: 1 - date_debut: 2023-01-01 + date_debut: 2021-09-01 + date_fin: 2022-01-15 + codes_parcours: ['A', 'B'] + S2: + idx: 2 + date_debut: 2022-01-16 + date_fin: 2022-06-30 + codes_parcours: ['A', 'B'] + S3: + idx: 3 + date_debut: 2022-09-01 + date_fin: 2023-01-15 + codes_parcours: ['A', 'B'] + S4: + idx: 4 + date_debut: 2023-01-16 date_fin: 2023-06-30 - codes_parcours: ['A', 'C'] \ No newline at end of file + codes_parcours: ['A', 'B'] + S5: + idx: 5 + date_debut: 2023-09-01 + date_fin: 2024-01-15 + codes_parcours: ['A', 'B'] + S6: + idx: 6 + date_debut: 2024-01-16 + date_fin: 2024-06-30 + codes_parcours: ['A', 'B'] + +Etudiants: + brillant_a: # cursus S1 -> S6, valide tout + prenom: étudiant + civilite: X + formsemestres: + # on ne note que le portfolio, qui affecte toutes les UEs + S1: + parcours: A + notes_modules: + "P1": 11 + S2: + parcours: A + notes_modules: + "P2": 12 + S3: + parcours: A + notes_modules: + "P3": 13 + S4: + parcours: A + notes_modules: + "P4-A": 14 + S5: + parcours: A + notes_modules: + "P5-A": 15 + S6: + parcours: A + notes_modules: + "P6-A": 16 diff --git a/tests/unit/test_but_cursus.py b/tests/unit/test_but_cursus.py index f1e09df96..2d6b029a7 100644 --- a/tests/unit/test_but_cursus.py +++ b/tests/unit/test_but_cursus.py @@ -5,7 +5,7 @@ Ce test suppose une base département existante. -Usage: pytest tests/unit/test_cursus_but.py +Usage: pytest tests/unit/test_but_cursus.py """ diff --git a/tests/unit/yaml_setup.py b/tests/unit/yaml_setup.py index 19696acd6..4967af233 100644 --- a/tests/unit/yaml_setup.py +++ b/tests/unit/yaml_setup.py @@ -298,10 +298,11 @@ def setup_from_yaml(filename: str) -> dict: with open(filename, encoding="utf-8") as f: doc = yaml.safe_load(f.read()) + # Charge de ref. comp. avant la formation, de façon à pouvoir + # re-créer les associations UE/Niveaux + yaml_setup_but.setup_formation_referentiel(doc.get("ReferentielCompetences", {})) formation = setup_formation(doc["Formation"]) - yaml_setup_but.setup_formation_referentiel( - formation, doc.get("ReferentielCompetences", {}) - ) + yaml_setup_but.associe_ues_et_parcours(formation, doc["Formation"]) setup_formsemestres(formation, doc) etudiants = doc.get("Etudiants") diff --git a/tests/unit/yaml_setup_but.py b/tests/unit/yaml_setup_but.py index b1f9c61a4..6532cce1e 100644 --- a/tests/unit/yaml_setup_but.py +++ b/tests/unit/yaml_setup_but.py @@ -32,13 +32,15 @@ from app.scodoc import sco_utils as scu from app.scodoc import sco_pv_dict -def setup_formation_referentiel(formation: Formation, refcomp_infos: dict): +def setup_formation_referentiel( + refcomp_infos: dict, formation: Formation = None +) -> ApcReferentielCompetences: """Si il y a un référentiel de compétences, indiqué dans le YAML, le charge au besoin et l'associe à la formation. """ if not refcomp_infos: - return - assert formation.is_apc() # si ref; comp., doit être APC + return None + assert formation is None or formation.is_apc() # si ref. comp., doit être APC refcomp_filename = refcomp_infos["filename"] refcomp_specialite = refcomp_infos["specialite"] # --- Chargement Référentiel @@ -66,8 +68,10 @@ def setup_formation_referentiel(formation: Formation, refcomp_infos: dict): specialite=refcomp_specialite ).first() # le recherche à nouveau (test) assert referentiel_competence - formation.referentiel_competence_id = referentiel_competence.id - db.session.add(formation) + if formation: + formation.referentiel_competence_id = referentiel_competence.id + db.session.add(formation) + return referentiel_competence def associe_ues_et_parcours(formation: Formation, formation_infos: dict): @@ -100,15 +104,16 @@ def associe_ues_et_parcours(formation: Formation, formation_infos: dict): ue.set_parcours(parcours) # Niveaux compétences: - competence = referentiel_competence.competences.filter_by( - titre=ue_infos["competence"] - ).first() - assert competence is not None # La compétence de titre indiqué doit exister - niveau: ApcNiveau = competence.niveaux.filter_by( - annee=ue_infos["annee"] - ).first() - assert niveau is not None # le niveau de l'année indiquée doit exister - ue.set_niveau_competence(niveau) + if ue_infos.get("competence"): + competence = referentiel_competence.competences.filter_by( + titre=ue_infos["competence"] + ).first() + assert competence is not None # La compétence de titre indiqué doit exister + niveau: ApcNiveau = competence.niveaux.filter_by( + annee=ue_infos["annee"] + ).first() + assert niveau is not None # le niveau de l'année indiquée doit exister + ue.set_niveau_competence(niveau) db.session.commit() associe_modules_et_parcours(formation, formation_infos)