""" Test jury BUT avec parcours """ import pytest from tests.unit import yaml_setup import app from app.but.jury_but import DecisionsProposeesAnnee from app.but.jury_but_validation_auto import formsemestre_validation_auto_but from app.models import ( Formation, FormSemestre, Identite, UniteEns, ) from app.scodoc import sco_utils as scu from config import TestConfig DEPT = TestConfig.DEPT_TEST @pytest.mark.slow def test_but_jury_GB(test_client): """Tests sur un cursus GB - construction des semestres et de leurs étudianst à partir du yaml - vérification jury de S1 - vérification jury de S2 - vérification jury de S3 - vérification jury de S1 avec redoublants et capitalisations """ 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_gb.yaml") # Vérifie les deca de tous les semestres: for formsemestre in FormSemestre.query: _check_deca(formsemestre) # Saisie de toutes les décisions de jury for formsemestre in FormSemestre.query.order_by(FormSemestre.semestre_id): formsemestre_validation_auto_but(formsemestre, only_adm=False) # Vérifie résultats attendus: S1: FormSemestre = FormSemestre.query.filter_by(titre="S1_SEE").first() _test_but_jury(S1, doc) S2: FormSemestre = FormSemestre.query.filter_by(titre="S2_SEE").first() _test_but_jury(S2, doc) S3: FormSemestre = FormSemestre.query.filter_by(titre="S3").first() _test_but_jury(S3, doc) # _test_but_jury(S1_redoublant, doc) @pytest.mark.slow @pytest.mark.lemans def test_but_jury_GMP_lm(test_client): """Tests sur un cursus GMP fournit par Le Mans""" 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_gmp_iutlm.yaml") formsemestres = FormSemestre.query.order_by(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 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() assert etud # il faut au moins un étudiant dans le semestre deca = DecisionsProposeesAnnee(etud, formsemestre) assert deca.validation is None # pas encore de validation enregistrée assert False is deca.recorded assert deca.code_valide is None if formsemestre.semestre_id % 2: assert deca.formsemestre_impair == formsemestre assert formsemestre.query_ues_parcours_etud(etud.id).all() == deca.ues_impair else: assert deca.formsemestre_pair == formsemestre assert formsemestre.query_ues_parcours_etud(etud.id).all() == deca.ues_pair assert deca.inscription_etat == scu.INSCRIT assert deca.inscription_etat_impair == scu.INSCRIT assert (deca.parcour is None) or ( deca.parcour.id in {p.id for p in formsemestre.parcours} ) nb_ues = ( len(deca.formsemestre_pair.query_ues_parcours_etud(etud.id).all()) if deca.formsemestre_pair else 0 ) nb_ues += ( len(deca.formsemestre_impair.query_ues_parcours_etud(etud.id).all()) if deca.formsemestre_impair else 0 ) assert len(deca.decisions_ues) == nb_ues nb_ues_un_sem = ( len(deca.formsemestre_impair.query_ues_parcours_etud(etud.id).all()) if deca.formsemestre_impair else len(deca.formsemestre_pair.query_ues_parcours_etud(etud.id).all()) ) assert len(deca.niveaux_competences) == nb_ues_un_sem assert deca.nb_competences == nb_ues_un_sem def _test_but_jury(formsemestre: FormSemestre, doc: dict): """Test jurys Vérifie les champs de DecisionsProposeesAnnee et UEs """ for etud in formsemestre.etuds: deca = DecisionsProposeesAnnee(etud, formsemestre) doc_formsemestre = doc["Etudiants"][etud.nom]["formsemestres"][ formsemestre.titre ] assert doc_formsemestre if "attendu" in doc_formsemestre: if "deca" in doc_formsemestre["attendu"]: deca_att = doc_formsemestre["attendu"]["deca"] yaml_setup.compare_decisions_annee(deca, deca_att)