From c06a6e83b69ba7b0208561d08372bf7001f979bf Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Sun, 8 Jan 2023 15:33:38 -0300 Subject: [PATCH] WIP: Test jury BUT: GEII Lyon --- pytest.ini | 2 + sco_version.py | 2 +- .../scodoc_formation_BUT_GEII_lyon_v1.xml | 504 ++++++++++++++++++ tests/unit/cursus_but_geii_lyon.yaml | 205 +++++++ tests/unit/test_but_jury.py | 28 +- tests/unit/yaml_setup.py | 2 +- 6 files changed, 740 insertions(+), 3 deletions(-) create mode 100644 tests/ressources/formations/scodoc_formation_BUT_GEII_lyon_v1.xml create mode 100644 tests/unit/cursus_but_geii_lyon.yaml diff --git a/pytest.ini b/pytest.ini index a73c5d60..e6563b88 100644 --- a/pytest.ini +++ b/pytest.ini @@ -2,3 +2,5 @@ markers = slow: marks tests as slow (deselect with '-m "not slow"') lemans + lyon + diff --git a/sco_version.py b/sco_version.py index 5f885896..25269a34 100644 --- a/sco_version.py +++ b/sco_version.py @@ -1,7 +1,7 @@ # -*- mode: python -*- # -*- coding: utf-8 -*- -SCOVERSION = "9.4.22" +SCOVERSION = "9.4.23" SCONAME = "ScoDoc" diff --git a/tests/ressources/formations/scodoc_formation_BUT_GEII_lyon_v1.xml b/tests/ressources/formations/scodoc_formation_BUT_GEII_lyon_v1.xml new file mode 100644 index 00000000..81cdb8e5 --- /dev/null +++ b/tests/ressources/formations/scodoc_formation_BUT_GEII_lyon_v1.xml @@ -0,0 +1,504 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/unit/cursus_but_geii_lyon.yaml b/tests/unit/cursus_but_geii_lyon.yaml new file mode 100644 index 00000000..9b4b21af --- /dev/null +++ b/tests/unit/cursus_but_geii_lyon.yaml @@ -0,0 +1,205 @@ +# Tests unitaires jury BUT - IUT Lyon GEII +# Essais avec un BUT GEII, 2 UE en BUT1 / 4 UE en BUT2-BUT3 et 3 parcours +# Contrib Pascal B. + +ReferentielCompetences: + filename: but-GEII-05012022-081639.xml + specialite: GEII + +Formation: + filename: scodoc_formation_BUT_GEII_lyon_v1.xml + # Association des UE aux compétences: + ues: + # S1 : Tronc commun GEII + 'UE11': + annee: BUT1 + competence: Concevoir + 'UE12': + annee: BUT1 + competence: Vérifier + + # S2 : Tronc commun GEII + 'UE21': + annee: BUT1 + competence: Concevoir + 'UE22': + annee: BUT1 + competence: Vérifier + + # S3 : Tronc commun GEII + 'UE31': + annee: BUT2 + competence: Concevoir + 'UE32': + annee: BUT2 + competence: Vérifier + 'UE33': + annee: BUT2 + competence: Maintenir + # S3 : Parcours EME + 'UE34EME': + annee: BUT2 + competence: Installer + parcours: EME + # S3 : Parcours ESE + 'UE34ESE': + annee: BUT2 + competence: Implanter + parcours: ESE + # S3 : Parcours AII + 'UE34AII': + annee: BUT2 + competence: Intégrer + parcours: AII + + # S4 : Tronc commun GEII + 'UE41': + annee: BUT2 + competence: Concevoir + 'UE42': + annee: BUT2 + competence: Vérifier + 'UE43': + annee: BUT2 + competence: Maintenir + # S4 : Parcours EME + 'UE44EME': + annee: BUT2 + competence: Installer + parcours: EME + # S4 : Parcours ESE + 'UE44ESE': + annee: BUT2 + competence: Implanter + parcours: ESE + # S4 : Parcours AII + 'UE44AII': + annee: BUT2 + competence: Intégrer + parcours: AII + + modules_parcours: + # cette section permet d'associer des modules à des parcours + # les codes modules peuvent être des regexp + EME: [ .*EME.* ] + ESE: [ .*ESE.* ] + AII: [ .*AII.* ] + +FormSemestres: + # S1 et S2 : + S1: + idx: 1 + date_debut: 2021-09-01 + date_fin: 2022-01-15 + S2: + idx: 2 + date_debut: 2022-01-16 + date_fin: 2022-06-30 + # S3 avec les trois parcours réunis: + # S3: + # idx: 3 + # date_debut: 2022-09-01 + # date_fin: 2023-01-13 + # codes_parcours: ['AII', 'EME', 'ESE'] + # Un S1 pour les redoublants + S1-red: + idx: 1 + date_debut: 2022-09-02 + date_fin: 2023-01-12 + +Etudiants: + geii8: + prenom: etugeii8 + civilite: M + formsemestres: + S1: + notes_modules: # on joue avec les SAE seulement car elles sont "diagonales" + "S1.1": 7.00 + "S1.2": 9.00 + attendu: # les codes jury que l'on doit vérifier + deca: + passage_de_droit: False + nb_competences: 2 + nb_rcue_annee: 0 + decisions_ues: + "UE11": + codes: [ "AJ", "..." ] + code_valide: AJ + decision_jury: AJ + moy_ue: 7.00 + "UE12": + codes: [ "AJ", "..." ] + code_valide: AJ + decision_jury: AJ + moy_ue: 9.00 + S2: + notes_modules: # on joue avec les SAE seulement car elles sont "diagonales" + "S2.1": 12.00 + "S2.2": 12.00 + attendu: # les codes jury que l'on doit vérifier + deca: + passage_de_droit: False + nb_competences: 2 + nb_rcue_annee: 2 + valide_moitie_rcue: False + codes: [ "RED", "..." ] + decisions_ues: + "UE21": + codes: [ "ADM", "..." ] + code_valide: ADM + decision_jury: ADM + moy_ue: 12.00 + "UE22": + codes: [ "ADM", "..." ] + code_valide: ADM + decision_jury: ADM + moy_ue: 12.00 + decisions_rcues: # on repère ici les RCUE par l'acronyme de leur 1ere UE (donc du S1) + "UE11": + code_valide: AJ + decision_jury: AJ + rcue: + moy_rcue: 9.50 + est_compensable: False + "UE12": + code_valide: CMP + decision_jury: CMP + rcue: + moy_rcue: 10.50 + est_compensable: True + decision_annee: RED + S1-red: + notes_modules: # on joue avec les SAE seulement car elles sont "diagonales" + "S1.1": 9.50 + "S1.2": 7.00 + attendu: # les codes jury que l'on doit vérifier + deca: + passage_de_droit: False + nb_competences: 2 + nb_rcue_annee: 2 + decisions_ues: + "UE11": + codes: [ "CMP", "..." ] + code_valide: CMP + decision_jury: CMP + moy_ue: 9.50 + "UE12": + codes: [ "AJ", "..." ] + code_valide: AJ + decision_jury: AJ + moy_ue: 7.00 + decisions_rcues: # on repère ici les RCUE par l'acronyme de leur 1ere UE (donc du S1) + "UE11": + code_valide: CMP + decision_jury: CMP + rcue: + moy_rcue: 10.75 + est_compensable: False + "UE12": + code_valide: CMP + decision_jury: CMP + rcue: + moy_rcue: 10.50 + est_compensable: False + decision_annee: ADM + \ No newline at end of file diff --git a/tests/unit/test_but_jury.py b/tests/unit/test_but_jury.py index 15a59342..f4b51b6b 100644 --- a/tests/unit/test_but_jury.py +++ b/tests/unit/test_but_jury.py @@ -54,7 +54,7 @@ def test_but_jury_GB(test_client): @pytest.mark.slow @pytest.mark.lemans def test_but_jury_GMP_lm(test_client): - """Tests sur un cursus GMP fournit par Le Mans""" + """Tests sur un cursus GMP fourni par Le Mans""" app.set_sco_dept(DEPT) # Construit la base de test GB une seule fois # puis lance les tests de jury @@ -77,6 +77,32 @@ def test_but_jury_GMP_lm(test_client): _test_but_jury(formsemestre, doc) +@pytest.mark.slow +@pytest.mark.lyon +def test_but_jury_GEII_lyon(test_client): + """Tests sur un cursus GEII fourni par Lyon""" + app.set_sco_dept(DEPT) + # Construit la base de test GB une seule fois + # puis lance les tests de jury + doc = yaml_setup.setup_from_yaml("tests/unit/cursus_but_geii_lyon.yaml") + + formsemestres = FormSemestre.query.order_by( + FormSemestre.date_debut, FormSemestre.semestre_id + ).all() + + # Vérifie les deca de tous les semestres: + for formsemestre in formsemestres: + _check_deca(formsemestre) + + # Saisie de toutes les décisions de jury qui ne le seraient pas déjà + for formsemestre in formsemestres: + formsemestre_validation_auto_but(formsemestre, only_adm=False) + + # Vérifie résultats attendus: + for formsemestre in formsemestres: + _test_but_jury(formsemestre, doc) + + def _check_deca(formsemestre: FormSemestre, etud: Identite = None): """vérifie les champs principaux de l'instance de DecisionsProposeesAnnee""" etud = etud or formsemestre.etuds.first() diff --git a/tests/unit/yaml_setup.py b/tests/unit/yaml_setup.py index 7efd0fb6..2fb61d65 100644 --- a/tests/unit/yaml_setup.py +++ b/tests/unit/yaml_setup.py @@ -157,7 +157,7 @@ def _un_semestre( date_debut: str, date_fin: str, ) -> FormSemestre: - "Création d'un formsemetre" + "Création d'un formsemestre" formsemestre = FormSemestre( formation=formation, parcours=parcours,