ScoDoc-Lille/tests/unit/test_formsemestre.py
2024-08-23 09:10:21 +02:00

245 lines
9.5 KiB
Python

# -*- mode: python -*-
# -*- coding: utf-8 -*-
""" Test création/accès/clonage formsemestre
"""
from flask import g, Response
import pytest
import app
from app import db
from app.models import Formation, FormSemestre, FormSemestreDescription
from app.scodoc import (
sco_archives_formsemestre,
sco_cost_formation,
sco_debouche,
sco_edit_ue,
sco_evaluations,
sco_evaluation_check_abs,
sco_evaluation_recap,
sco_formation_versions,
sco_formsemestre_edit,
sco_formsemestre_inscriptions,
sco_formsemestre_status,
sco_groups,
sco_inscr_passage,
sco_lycee,
sco_moduleimpl_inscriptions,
sco_poursuite_dut,
sco_preferences,
sco_recapcomplet,
sco_report,
sco_undo_notes,
)
from app.scodoc import sco_utils as scu
from app.views import notes, scolar
from config import TestConfig
from tests.unit import yaml_setup, call_view
DEPT = TestConfig.DEPT_TEST
def test_formsemestres_associate_new_version(test_client):
"""Test association à une nouvelle version du programme"""
app.set_sco_dept(DEPT)
# Construit la base de test GB
doc, formation, formsemestre_titres = yaml_setup.setup_from_yaml(
"tests/ressources/yaml/simple_formsemestres.yaml"
)
for formsemestre_titre in formsemestre_titres:
formsemestre = yaml_setup.create_formsemestre_with_etuds(
doc, formation, formsemestre_titre
)
assert formsemestre
formation_geii = Formation.query.filter_by(acronyme="BUT GEII", version=1).first()
assert formation_geii.id == formation.id
formsemestres = formation.formsemestres.all()
assert len(formsemestres) == len(formsemestre_titres)
# On a deux S1:
assert len(formsemestres) == 2
assert {s.semestre_id for s in formsemestres} == {1}
# Les rattache à une nouvelle version de la formation:
formsemestre_ids = [s.id for s in formsemestres]
sco_formation_versions.do_formsemestres_associate_new_version(
formation.id, formsemestre_ids
)
new_formation: Formation = Formation.query.filter_by(
acronyme="BUT GEII", version=2
).first()
assert new_formation
assert formsemestres[0].formation_id == new_formation.id
assert formsemestres[1].formation_id == new_formation.id
def test_formsemestre_misc_views(test_client):
"""Test de nombreuses vues: test juste que la page ne plante,
pas de vérif du contenu ni de soumission si c'est un formulaire.
Note: les anciennes vues renvoient souvent des str au lieu de Response.
"""
app.set_sco_dept(DEPT)
doc, formation, formsemestre_titres = yaml_setup.setup_from_yaml(
"tests/ressources/yaml/simple_formsemestres.yaml"
)
for formsemestre_titre in formsemestre_titres:
formsemestre = yaml_setup.create_formsemestre_with_etuds(
doc, formation, formsemestre_titre
)
assert formsemestre
formsemestre: FormSemestre = FormSemestre.query.first()
# ----- MENU SEMESTRE
_ = sco_formsemestre_status.formsemestre_status(formsemestre_id=formsemestre.id)
_ = sco_edit_ue.ue_table(formsemestre.formation_id)
_ = sco_formsemestre_edit.formsemestre_editwithmodules(formsemestre.id)
_ = sco_preferences.SemPreferences(formsemestre_id=formsemestre.id).edit()
_ = sco_formsemestre_edit.formsemestre_edit_options(formsemestre.id)
assert formsemestre.etat
formsemestre.flip_lock()
assert not formsemestre.etat
formsemestre.flip_lock()
assert formsemestre.etat
ans = sco_formsemestre_status.formsemestre_description(
formsemestre.id, with_evals=True
)
assert isinstance(ans, (str, Response)) # ici c'est une str
ans = sco_formsemestre_status.formsemestre_description(
formsemestre.id, with_evals=True, fmt="xls"
)
assert isinstance(ans, Response)
assert ans.status == "200 OK"
assert ans.mimetype == scu.XLSX_MIMETYPE
ans = sco_formsemestre_status.formsemestre_description(
formsemestre.id, with_evals=True, fmt="pdf"
)
assert isinstance(ans, Response)
assert ans.status == "200 OK"
assert ans.mimetype == scu.PDF_MIMETYPE
ans = sco_evaluation_check_abs.formsemestre_check_absences_html(formsemestre.id)
assert isinstance(ans, (str, Response))
# Appel direct de la vue: enlève les décorateurs:
ans = call_view(notes.formsemestre_enseignants_list, formsemestre.id)
assert isinstance(ans, (str, Response)) # ici str
# Juste la page dialogue avant opération::
ans = sco_formsemestre_edit.formsemestre_clone(formsemestre.id)
ans = sco_formation_versions.formsemestre_associate_new_version(
formsemestre.formation_id, formsemestre.id
)
ans = sco_formsemestre_edit.formsemestre_delete(formsemestre.id)
# ----- MENU INSCRIPTIONS
ans = sco_moduleimpl_inscriptions.moduleimpl_inscriptions_stats(formsemestre.id)
ans = sco_inscr_passage.formsemestre_inscr_passage(formsemestre.id)
ans = call_view(scolar.form_students_import_excel, formsemestre.id)
assert isinstance(ans, str)
ans = call_view(scolar.form_students_import_infos_admissions, formsemestre.id)
ans = sco_formsemestre_inscriptions.formsemestre_inscrits_ailleurs(formsemestre.id)
# ----- MENU GROUPES
ans = call_view(scolar.groups_lists, formsemestre.id)
ans = call_view(scolar.groups_photos, formsemestre.id)
ans = call_view(scolar.groups_feuilles, formsemestre.id)
ans = call_view(scolar.partition_editor, formsemestre.id)
ans = sco_groups.edit_partition_form(formsemestre.id)
# ----- MENU NOTES
ans = sco_recapcomplet.formsemestre_recapcomplet(formsemestre.id)
ans = sco_recapcomplet.formsemestre_recapcomplet(formsemestre.id, tabformat="evals")
ans = sco_recapcomplet.formsemestre_recapcomplet(formsemestre.id, tabformat="xlsx")
assert isinstance(ans, Response)
assert ans.status == "200 OK"
assert ans.mimetype == scu.XLSX_MIMETYPE
ans = sco_recapcomplet.formsemestre_recapcomplet(formsemestre.id, tabformat="json")
assert isinstance(ans, Response)
assert ans.status == "200 OK"
assert ans.mimetype == scu.JSON_MIMETYPE
ans = sco_evaluation_recap.evaluations_recap(formsemestre.id)
# Bulletins pdf:
ans = call_view(notes.formsemestre_bulletins_pdf_choice, formsemestre.id)
assert isinstance(ans, str) # sans version, on a le formulaire de choix, une str
ans = call_view(
notes.formsemestre_bulletins_pdf_choice, formsemestre.id, version="long"
)
assert isinstance(ans, Response)
assert ans.status == "200 OK"
assert ans.mimetype == scu.PDF_MIMETYPE
# on ne teste pas les mails :)
ans = sco_evaluations.formsemestre_evaluations_cal(formsemestre.id)
assert isinstance(ans, str)
sco_undo_notes.formsemestre_list_saisies_notes(formsemestre.id)
# ----- MENU JURY
ans = sco_recapcomplet.formsemestre_recapcomplet(formsemestre.id, mode_jury=True)
ans = sco_recapcomplet.formsemestre_recapcomplet(
formsemestre.id, mode_jury=True, tabformat="xlsx"
)
assert isinstance(ans, Response)
assert ans.status == "200 OK"
assert ans.mimetype == scu.XLSX_MIMETYPE
ans = sco_recapcomplet.formsemestre_recapcomplet(
formsemestre.id, mode_jury=True, tabformat="json"
)
assert isinstance(ans, Response)
assert ans.status == "200 OK"
assert ans.mimetype == scu.JSON_MIMETYPE
ans = sco_archives_formsemestre.formsemestre_archive(formsemestre.id)
ans = sco_archives_formsemestre.formsemestre_list_archives(formsemestre.id)
# ----- MENU STATISTIQUES
ans = sco_report.formsemestre_report_counts(formsemestre.id)
ans = sco_report.formsemestre_report_counts(formsemestre.id, fmt="xls")
assert isinstance(ans, Response)
assert ans.status == "200 OK"
assert ans.mimetype == scu.XLSX_MIMETYPE
ans = sco_report.formsemestre_suivi_cohorte(formsemestre.id)
ans = sco_report.formsemestre_suivi_cohorte(formsemestre.id, fmt="pdf")
assert isinstance(ans, Response)
assert ans.status == "200 OK"
assert ans.mimetype == scu.PDF_MIMETYPE
ans = sco_report.formsemestre_graph_cursus(formsemestre.id)
ans = sco_report.formsemestre_suivi_cursus(formsemestre.id)
ans = sco_lycee.formsemestre_etuds_lycees(formsemestre.id)
ans = sco_poursuite_dut.formsemestre_poursuite_report(formsemestre.id)
# pas de test des avis de poursuite
ans = sco_debouche.report_debouche_date(start_year=2000)
ans = sco_cost_formation.formsemestre_estim_cost(formsemestre.id)
# pas de test des indicateurs de suivi BUT
def test_formsemestre_description(test_client):
"""Test FormSemestreDescription"""
app.set_sco_dept(DEPT)
#
nb_descriptions = FormSemestreDescription.query.count()
# Création d'un semestre
formsemestre = FormSemestre(
dept_id=g.scodoc_dept_id,
titre="test description",
date_debut="2024-08-01",
date_fin="2024-08-31",
)
db.session.add(formsemestre)
db.session.commit()
assert formsemestre.description is None
# Association d'une description
formsemestre.description = FormSemestreDescription.create_from_dict(
{
"description": "Description",
"responsable": "Responsable",
"campus": "Sorbonne",
"salle": "L214",
"horaire": "23h à l'aube",
}
)
db.session.add(formsemestre)
db.session.commit()
assert formsemestre.description.formsemestre.id == formsemestre.id
assert FormSemestreDescription.query.count() == nb_descriptions + 1
# Suppression / cascade
db.session.delete(formsemestre)
db.session.commit()
assert FormSemestreDescription.query.count() == nb_descriptions