forked from ScoDoc/DocScoDoc
108 lines
3.9 KiB
Python
108 lines
3.9 KiB
Python
""" Test jury BUT avec parcours
|
|
"""
|
|
|
|
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
|
|
|
|
|
|
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)
|
|
|
|
|
|
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(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)
|