""" Test jury BUT avec parcours """ from tests.unit import yaml_setup import app from app.but.jury_but import DecisionsProposeesAnnee from app.models import ( Formation, FormSemestre, Identite, UniteEns, ) from app.scodoc import sco_utils as scu from config import TestConfig DEPT = TestConfig.DEPT_TEST 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) S1: FormSemestre = FormSemestre.query.filter_by(titre="S1_SEE").first() _test_but_jury_S1(S1) _test_but_jury_S2() _test_but_jury_S3() _test_but_jury_S1_redoublant() 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 if formsemestre.semestre_id == 1: assert deca.formsemestre_pair is None # jury de S1, pas de S2 assert deca.rcues_annee == [] # S1, pas de RCUEs assert deca.inscription_etat == scu.INSCRIT assert deca.inscription_etat_impair == scu.INSCRIT assert deca.parcour == formsemestre.parcours[0] # un seul parcours dans ce sem. 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_S1(formsemestre: FormSemestre): """Test jurys BUT1 avec un seul parcours. Vérifie aussi les champs de DecisionsProposeesAnnee """ etud: Identite = formsemestre.etuds.first() # XXX à compléter avec le jury quand on aura décidé des notes def _test_but_jury_S2(): pass def _test_but_jury_S3(): """Test jurys BUT2/S3 avec 2 parcours dans le sem.""" formsemestre: FormSemestre = FormSemestre.query.filter_by(titre="S3").first() etud: Identite = formsemestre.etuds.filter_by( prenom="Étudiant_SEE" ).first() # du parcours SEE assert etud deca = DecisionsProposeesAnnee(etud, formsemestre) assert len(deca.niveaux_competences) == 5 # 5 compétences dans ce parcours def _test_but_jury_S1_redoublant(): pass