DocScoDoc/scotests/test_bonusmalus.py

74 lines
2.3 KiB
Python
Raw Normal View History

# -*- mode: python -*-
# -*- coding: utf-8 -*-
"""Test notes bonus/malus
Création 10 étudiants, puis formation en 4 semestre.
Le premier étudiant redouble sa deuxième année.
Utiliser comme:
scotests/scointeractive.sh -r TEST00 scotests/test_bonusmalus.py
"""
2021-02-16 15:16:01 +01:00
# La variable context est définie par le script de lancement
# l'affecte ainsi pour évietr les warnins pylint:
context = context # pylint: disable=undefined-variable
import scotests.sco_fake_gen as sco_fake_gen
import sco_utils as scu
import sco_moduleimpl
G = sco_fake_gen.ScoFake(context.Notes) # pylint: disable=undefined-variable
G.verbose = False
# --- Création d'étudiants
etuds = [G.create_etud(code_nip=None) for _ in range(10)]
# --- Mise en place formation 1 semestre
f, ue_list, mod_list = G.setup_formation(nb_semestre=1)
# --- Ajoute module malus à la premiere matiere de la première UE
mod_malus = G.create_module(
titre="MALUS",
code="MAL",
coefficient=10,
ue_id=ue_list[0]["ue_id"],
matiere_id=mod_list[0]["matiere_id"],
formation_id=f["formation_id"],
semestre_id=1,
module_type=scu.MODULE_MALUS,
)
mod_list.append(mod_malus)
# --- Crée le semestre
semestre_id, date_debut, date_fin = (1, "01/09/2019", "15/01/2020")
sem, eval_list = G.setup_formsemestre(
f, mod_list, semestre_id=semestre_id, date_debut=date_debut, date_fin=date_fin
)
# --- Recupère le module de malus
2021-08-20 01:09:55 +02:00
modimpls = sco_moduleimpl.do_moduleimpl_list( # pylint: disable=undefined-variable
formsemestre_id=sem["formsemestre_id"],
)
# de façon tout à fait inefficace ;-)
moduleimpl_malus = [m for m in modimpls if m["module_id"] == mod_malus["module_id"]][0]
# et l'évaluation de malus, de la même façon:
eval_malus = [
e for e in eval_list if e["moduleimpl_id"] == moduleimpl_malus["moduleimpl_id"]
][0]
eval_normales = [
e for e in eval_list if e["moduleimpl_id"] != moduleimpl_malus["moduleimpl_id"]
]
# --- Affect des malus entre -10 et +10
n = len(etuds)
malus = [((x / (n - 1.0)) * 20) - 10 for x in range(n)]
for etud, note in zip(etuds, malus):
G.create_note(evaluation=e, etud=etud, note=note)
# --- Inscrit les étudiants et affecte des notes aléatoires aux évaluations normales
for etud in etuds:
G.inscrit_etudiant(sem, etud)
G.set_etud_notes_sem(sem, eval_normales, etuds)