ScoDoc/tests/unit/test_but_jury.py

161 lines
5.5 KiB
Python

""" 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 fourni 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.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)
@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()
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)