From ca20c303f0d4cb8649b6e6e59e1e30e470785a1c Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Thu, 8 Dec 2022 17:57:01 +0100 Subject: [PATCH] BUT: tests unitaires yaml: associe modules/parcours + fix formation GB exemple --- app/scodoc/sco_utils.py | 2 +- .../formations/scodoc_formation_BUT_GB_v1.xml | 116 ++++++++++++++---- tests/unit/cursus_but_gb.yaml | 69 ++++++++++- tests/unit/test_but_jury.py | 23 +++- 4 files changed, 184 insertions(+), 26 deletions(-) diff --git a/app/scodoc/sco_utils.py b/app/scodoc/sco_utils.py index 8b302a3a..6ad70430 100644 --- a/app/scodoc/sco_utils.py +++ b/app/scodoc/sco_utils.py @@ -1182,7 +1182,7 @@ def confirm_dialog( def objects_renumber(db, obj_list) -> None: """fixe les numeros des objets d'une liste de modèles pour ne pas changer son ordre""" - log(f"objects_renumber {obj_list}") + log(f"objects_renumber") for i, obj in enumerate(obj_list): obj.numero = i db.session.add(obj) diff --git a/tests/ressources/formations/scodoc_formation_BUT_GB_v1.xml b/tests/ressources/formations/scodoc_formation_BUT_GB_v1.xml index e51e1166..d0c36362 100644 --- a/tests/ressources/formations/scodoc_formation_BUT_GB_v1.xml +++ b/tests/ressources/formations/scodoc_formation_BUT_GB_v1.xml @@ -625,7 +625,26 @@ - + + + + + + + + + + + + + + + + + + + + @@ -650,26 +669,7 @@ - - - - - - - - - - - - - - - - - - - - + @@ -702,6 +702,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/unit/cursus_but_gb.yaml b/tests/unit/cursus_but_gb.yaml index c8b1f731..2dba62e9 100644 --- a/tests/unit/cursus_but_gb.yaml +++ b/tests/unit/cursus_but_gb.yaml @@ -9,14 +9,14 @@ Formation: filename: scodoc_formation_BUT_GB_v1.xml # Association des UE aux compétences: ues: - # Tronc commun GB: + # S1 : Tronc commun GB 'UE 11': annee: BUT1 competence: Analyser 'UE 12': annee: BUT1 competence: Experimenter - # Parcours SEE + # S1 Parcours SEE 'UE 1.3 SEE': annee: BUT1 competence: Gérer @@ -25,7 +25,7 @@ Formation: annee: BUT1 competence: Traiter parcours: SEE - # Parcours BMB + # S1 Parcours BMB 'UE 1.3 BMB': annee: BUT1 competence: Mener @@ -34,6 +34,69 @@ Formation: annee: BUT1 competence: Réaliser parcours: BMB + # S2 : Tronc commun GB + 'UE 21': + annee: BUT1 + competence: Analyser + 'UE 22': + annee: BUT1 + competence: Experimenter + # S2 Parcours SEE + 'UE 23 SEE': + annee: BUT1 + competence: Gérer + parcours: SEE + 'UE 24 SEE': + annee: BUT1 + competence: Traiter + parcours: SEE + # S2 Parcours BMB + 'UE 23 BMB': + annee: BUT1 + competence: Mener + parcours: BMB + 'UE 24 BMB': + annee: BUT1 + competence: Réaliser + parcours: BMB + # S3 : Tronc commun GB + 'UE 3.1': + annee: BUT2 + competence: Analyser + 'UE 3.2': + annee: BUT2 + competence: Experimenter + # S3 BMB + 'UE 3.3 BMB': + annee: BUT2 + competence: Mener + parcours: BMB + 'UE 3.4 BMB': + annee: BUT2 + competence: Réaliser + parcours: BMB + 'UE 3.5 BMB': + annee: BUT2 + competence: Mettre en œuvre + parcours: BMB + # S3 SEE + 'UE 3.3 SEE': + annee: BUT2 + competence: Gérer + parcours: SEE + 'UE 3.4 SEE': + annee: BUT2 + competence: Traiter + parcours: SEE + 'UE 3.5 SEE': + annee: BUT2 + competence: Déployer + parcours: SEE + modules_parcours: + # cette section permet d'associer des modules à des parcours + # les codes modules peuvent être des regexp + BMB: [ .*BMB.* ] + SEE: [ .*SEE.* ] FormSemestres: # S1 et S2 avec les parcours séparés: diff --git a/tests/unit/test_but_jury.py b/tests/unit/test_but_jury.py index 0445ed4d..03757db7 100644 --- a/tests/unit/test_but_jury.py +++ b/tests/unit/test_but_jury.py @@ -1,8 +1,8 @@ """ Test jury BUT avec parcours """ -import datetime import os from pathlib import Path +import re from flask import current_app, g import pytest @@ -110,9 +110,30 @@ def setup_but_formation(doc: dict) -> Formation: ue.set_niveau_competence(niveau) db.session.commit() + associe_modules_et_parcours(formation, formation_infos) return formation +def associe_modules_et_parcours(formation: Formation, formation_infos: dict): + """Associe les modules à des parcours, grâce au champ modules_parcours""" + for code_parcours, codes_modules in formation_infos.get( + "modules_parcours", {} + ).items(): + parcour = formation.referentiel_competence.parcours.filter_by( + code=code_parcours + ).first() + assert parcour is not None # code parcours doit exister dans le ref. comp. + for code_module in codes_modules: + for module in [ + module + for module in formation.modules + if re.match(code_module, module.code) + ]: + module.parcours.append(parcour) + db.session.add(module) + db.session.commit() + + def _un_semestre( formation: Formation, parcours: list[ApcParcours],