From dea24d02575a99fa3e299506fcf159f73344731e Mon Sep 17 00:00:00 2001 From: viennet Date: Mon, 28 Dec 2020 21:49:53 +0100 Subject: [PATCH] TESTS: scenario standard capitalisation --- scotests/sco_fake_gen.py | 111 +++++++++++++++++++++++++++++++++++++++ scotests/test_basic.py | 6 +-- 2 files changed, 114 insertions(+), 3 deletions(-) diff --git a/scotests/sco_fake_gen.py b/scotests/sco_fake_gen.py index 1504ed3acc..6c5b40e73d 100644 --- a/scotests/sco_fake_gen.py +++ b/scotests/sco_fake_gen.py @@ -3,12 +3,16 @@ """Creation environnement pour test. A utiliser avec debug.py (côté serveur). + +La classe ScoFake offre un ensemble de raccourcis permettant d'écrire +facilement des tests ou de reproduire des bugs. """ from __future__ import print_function from functools import wraps import sys import string +import collections import pprint import random @@ -22,6 +26,7 @@ from sco_exceptions import ScoValueError import scolars import sco_formsemestre import sco_formsemestre_inscriptions +import sco_formsemestre_validation import sco_synchro_etuds import sco_edit_formation import sco_edit_ue @@ -286,3 +291,109 @@ class ScoFake: [(etud["etudid"], note)], comment=comment, ) + + def setup_formation(self, nb_semestre=1, nb_ue_per_semestre=2, nb_module_per_ue=2): + """Création d'une formation, avec UE, modules et évaluations. + + Formation avec `nb_semestre` comportant chacun `nb_ue_per_semestre` UE + et dans chaque UE `nb_module_per_ue` modules (on a une seule matière par UE). + + Returns: + formation (dict), liste d'ue (dicts), liste de modules. + """ + f = self.create_formation(acronyme="") + ue_list = [] + mod_list = [] + for semestre_id in range(1, nb_semestre + 1): + for n in range(1, nb_ue_per_semestre + 1): + ue = self.create_ue( + formation_id=f["formation_id"], + acronyme="TSU%s%s" % (semestre_id, n), + titre="ue test %s%s" % (semestre_id, n), + ) + ue_list.append(ue) + mat = self.create_matiere(ue_id=ue["ue_id"], titre="matière test") + for _ in range(nb_module_per_ue): + mod = self.create_module( + matiere_id=mat["matiere_id"], + semestre_id=semestre_id, + code="TSM%s" % len(mod_list), + coefficient=1.0, + titre="module test", + ue_id=ue["ue_id"], # faiblesse de l'API + formation_id=f["formation_id"], # faiblesse de l'API + ) + mod_list.append(mod) + return f, ue_list, mod_list + + def setup_formsemestre( + self, + f, + mod_list, + semestre_id=1, + date_debut="01/01/2020", + date_fin="30/06/2020", + nb_evaluations_per_module=1, + ): + """Création semestre, avec modules et évaluations.""" + sem = self.create_formsemestre( + formation_id=f["formation_id"], + semestre_id=semestre_id, + date_debut=date_debut, + date_fin=date_fin, + ) + eval_list = [] + for mod in mod_list: + if mod["semestre_id"] == semestre_id: + mi = self.create_moduleimpl( + module_id=mod["module_id"], + formsemestre_id=sem["formsemestre_id"], + responsable_id="bach", + ) + for e_idx in range(1, nb_evaluations_per_module + 1): + e = self.create_evaluation( + moduleimpl_id=mi["moduleimpl_id"], + jour=date_debut, + description="evaluation test %s" % e_idx, + coefficient=1.0, + ) + eval_list.append(e) + return sem, eval_list + + def set_etud_notes_sem( + self, sem, eval_list, etuds, notes=None, random_min=0, random_max=20 + ): + """Met des notes aux étudiants indiqués des evals indiquées. + + Args: + sem: dict + eval_list: list of dicts + etuds: list of dicts + notes: liste des notes (float). + Si non spécifié, tire au hasard dans `[random_min, random_max]` + """ + set_random = notes is None + for e in eval_list: + if set_random: + notes = [float(random.randint(random_min, random_max)) for _ in etuds] + for etud, note in zip(etuds, notes): + self.create_note(evaluation=e, etud=etud, note=note) + + def set_code_jury( + self, + sem, + etud, + code_etat=sco_codes_parcours.ADM, + devenir=sco_codes_parcours.NEXT, + assidu=True, + ): + """Affecte décision de jury""" + sco_formsemestre_validation.formsemestre_validation_etud_manu( + self.context, + formsemestre_id=sem["formsemestre_id"], + etudid=etud["etudid"], + code_etat=code_etat, + devenir=devenir, + assidu=assidu, + REQUEST=REQUEST, + ) diff --git a/scotests/test_basic.py b/scotests/test_basic.py index 5a515f2ba4..fe1a9ad1f5 100644 --- a/scotests/test_basic.py +++ b/scotests/test_basic.py @@ -1,9 +1,9 @@ # -*- mode: python -*- # -*- coding: utf-8 -*- -"""test de base de ScoDoc +"""Test de base de ScoDoc -Creation etudiant, formation, semestre, inscription etudiant, creation evaluation, saisie note +Création 10 étudiants, formation, semestre, inscription etudiant, creation 1 evaluation, saisie 10 notes. Utiliser comme: scotests/scointeractive.sh -r TEST00 scotests/test_basic.py @@ -11,7 +11,7 @@ Utiliser comme: """ import random -import scotests.sco_fake_gen as sco_fake_gen +import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error import sco_utils G = sco_fake_gen.ScoFake(context.Notes) # pylint: disable=undefined-variable