ScoDoc/tests/unit/test_but_cursus.py

91 lines
3.2 KiB
Python

# -*- coding: UTF-8 -*
"""Unit tests : cursus_but
Ce test suppose une base département existante.
Usage: pytest tests/unit/test_but_cursus.py
"""
import pytest
from tests.unit import yaml_setup
import app
# XXX from app.but.cursus_but import FormSemestreCursusBUT
from app.comp import res_sem
from app.comp.res_but import ResultatsSemestreBUT
from app.models import ApcParcours, ApcReferentielCompetences, FormSemestre
from config import TestConfig
DEPT = TestConfig.DEPT_TEST
@pytest.mark.skip # XXX WIP
@pytest.mark.slow
def test_cursus_but_jury_gb(test_client):
# Construit la base de test GB une seule fois
# puis lance les tests de jury
app.set_sco_dept(DEPT)
# login_user(User.query.filter_by(user_name="admin").first()) # XXX pour tests manuels
# ctx.push() # XXX
doc, formation, formsemestre_titres = yaml_setup.setup_from_yaml(
"tests/ressources/yaml/cursus_but_gb.yaml"
)
for formsemestre_titre in formsemestre_titres:
formsemestre = yaml_setup.create_formsemestre_with_etuds(
doc, formation, formsemestre_titre
)
formsemestre: FormSemestre = FormSemestre.query.filter_by(titre="S3").first()
res: ResultatsSemestreBUT = res_sem.load_formsemestre_results(formsemestre)
cursus = FormSemestreCursusBUT(res)
ref_comp: ApcReferentielCompetences = formsemestre.formation.referentiel_competence
# Vérifie niveaux du tronc commun:
niveaux_parcours_by_annee_tc = cursus.get_niveaux_parcours_by_annee(None)
assert set(niveaux_parcours_by_annee_tc.keys()) == {1, 2, 3}
# structure particulière à GB:
assert [len(niveaux_parcours_by_annee_tc[annee]) for annee in (1, 2, 3)] == [
2,
2,
1,
]
parcour: ApcParcours = ref_comp.parcours.filter_by(code="SEE").first()
assert parcour
niveaux_parcours_by_annee_see = cursus.get_niveaux_parcours_by_annee(parcour)
assert set(niveaux_parcours_by_annee_see.keys()) == {1, 2, 3}
# GB SEE: 4 niveaux en BU1, 5 en BUT2, 4 en BUT3
assert [len(niveaux_parcours_by_annee_see[annee]) for annee in (1, 2, 3)] == [
4,
5,
4,
]
# Un étudiant inscrit en SEE
inscription = formsemestre.etuds_inscriptions[1]
assert inscription.parcour.code == "SEE"
etud = inscription.etud
assert cursus.get_niveaux_parcours_etud(etud) == niveaux_parcours_by_annee_see
# @pytest.mark.skip # XXX WIP
@pytest.mark.slow
def test_refcomp_niveaux_info(test_client):
"""Test niveaux / parcours / UE pour un BUT INFO
avec parcours A et C, même compétences mais coefs différents
selon le parcours.
"""
# WIP
# pour le moment juste le chargement de la formation, du ref. comp, et des UE du S4.
app.set_sco_dept(DEPT)
doc, formation, formsemestre_titres = yaml_setup.setup_from_yaml(
"tests/ressources/yaml/cursus_but_info.yaml"
)
for formsemestre_titre in formsemestre_titres:
formsemestre = yaml_setup.create_formsemestre_with_etuds(
doc, formation, formsemestre_titre
)
formsemestre: FormSemestre = FormSemestre.query.filter_by(titre="S4").first()
assert formsemestre
res: ResultatsSemestreBUT = res_sem.load_formsemestre_results(formsemestre)