doc et tests unitaires des absences

This commit is contained in:
Emmanuel Viennet 2021-08-01 00:05:53 +03:00
parent 6a42846d2e
commit 37e7667eeb
8 changed files with 547 additions and 248 deletions

View File

@ -306,11 +306,14 @@ def list_abs_in_range(etudid, debut, fin, matin=None, moduleimpl_id=None, cursor
"""Liste des absences entre deux dates. """Liste des absences entre deux dates.
Args: Args:
etudid etudid:
debut string iso date ("2020-03-12") debut: string iso date ("2020-03-12")
end string iso date ("2020-03-12") end: string iso date ("2020-03-12")
matin None, True, False matin: None, True, False
moduleimpl_id moduleimpl_id: restreint le comptage aux absences dans ce module
Returns:
List of absences
""" """
if matin != None: if matin != None:
matin = _toboolean(matin) matin = _toboolean(matin)
@ -347,9 +350,15 @@ WHERE A.ETUDID = %(etudid)s
return res return res
def count_abs(etudid, debut, fin, matin=None, moduleimpl_id=None): def count_abs(etudid, debut, fin, matin=None, moduleimpl_id=None) -> int:
"""CountAbs """compte le nombre d'absences
matin= 1 ou 0.
Args:
etudid: l'étudiant considéré
debut: date, chaîne iso, eg "2021-06-15"
fin: date de fin, incluse
matin: True (compte les matinées), False (les après-midi), None (les deux)
moduleimpl_id: restreint le comptage aux absences dans ce module.
Returns: Returns:
An integer. An integer.
@ -359,8 +368,19 @@ def count_abs(etudid, debut, fin, matin=None, moduleimpl_id=None):
) )
def count_abs_just(etudid, debut, fin, matin=None, moduleimpl_id=None): def count_abs_just(etudid, debut, fin, matin=None, moduleimpl_id=None) -> int:
"Count just. abs" """compte le nombre d'absences justifiées
Args:
etudid: l'étudiant considéré
debut: date, chaîne iso, eg "2021-06-15"
fin: date de fin, incluse
matin: True (compte les matinées), False (les après-midi), None (les deux)
moduleimpl_id: restreint le comptage aux absences dans ce module.
Returns:
An integer.
"""
if matin != None: if matin != None:
matin = _toboolean(matin) matin = _toboolean(matin)
ismatin = " AND A.MATIN = %(matin)s " ismatin = " AND A.MATIN = %(matin)s "
@ -569,9 +589,20 @@ ORDER BY A.JOUR
def list_abs_justifs(etudid, datedebut, datefin=None, only_no_abs=False): def list_abs_justifs(etudid, datedebut, datefin=None, only_no_abs=False):
"""Liste des justificatifs (sans absence relevée) à partir d'une date, """Liste des justificatifs (avec ou sans absence relevée) à partir d'une date,
ou, si datefin spécifié, entre deux dates. ou, si datefin spécifié, entre deux dates.
Si only_no_abs: seulement les justificatifs correspondant aux jours sans absences relevées.
Args:
etudid:
datedebut: date de début, iso, eg "2002-03-15"
datefin: date de fin, incluse, eg "2002-03-15"
only_no_abs: si vrai, seulement les justificatifs correspondant
aux jours sans absences relevées.
Returns:
Liste de dict absences
{'etudid': 'EID214', 'jour': datetime.date(2021, 1, 15),
'matin': True, 'description': ''
}
""" """
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor) cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)
@ -664,9 +695,16 @@ def _add_abslist(context, abslist, REQUEST, moduleimpl_id=None):
add_absence(context, etudid, jour, matin, 0, REQUEST, "", moduleimpl_id) add_absence(context, etudid, jour, matin, 0, REQUEST, "", moduleimpl_id)
def annule_absence(context, etudid, jour, matin, moduleimpl_id=None, REQUEST=None): def annule_absence(context, etudid, jour, matin, moduleimpl_id=None):
"""Annule une absence ds base """Annule une absence dans la base. N'efface pas l'éventuel justificatif.
Si moduleimpl_id, n'annule que pour ce module Args:
etudid:
jour: date, chaîne iso, eg "1999-12-31"
matin:
moduleimpl_id: si spécifié, n'annule que pour ce module.
Returns:
None
""" """
# unpublished # unpublished
matin = _toboolean(matin) matin = _toboolean(matin)

View File

@ -433,11 +433,11 @@ def doAnnuleAbsence(
demijournee = int(demijournee) demijournee = int(demijournee)
for jour in dates: for jour in dates:
if demijournee == 2: if demijournee == 2:
sco_abs.annule_absence(context, etudid, jour, False, REQUEST=REQUEST) sco_abs.annule_absence(context, etudid, jour, False)
sco_abs.annule_absence(context, etudid, jour, True, REQUEST=REQUEST) sco_abs.annule_absence(context, etudid, jour, True)
nbadded += 2 nbadded += 2
else: else:
sco_abs.annule_absence(context, etudid, jour, demijournee, REQUEST=REQUEST) sco_abs.annule_absence(context, etudid, jour, demijournee)
nbadded += 1 nbadded += 1
# #
H = [ H = [
@ -608,9 +608,16 @@ autre absence pour <b>%(nomprenom)s</b></a></li>
return "\n".join(H) return "\n".join(H)
def AnnuleAbsencesDatesNoJust(context, etudid, dates, moduleimpl_id=None, REQUEST=None): def AnnuleAbsencesDatesNoJust(context, etudid, dates, moduleimpl_id=None):
"""Supprime les absences aux dates indiquées """Supprime les absences non justifiées aux dates indiquées
mais ne supprime pas les justificatifs. Ne supprime pas les justificatifs éventuels.
Args:
etudid: l'étudiant
dates: liste de dates iso, eg [ "2000-01-15", "2000-01-16" ]
moduleimpl_id: si spécifié, n'affecte que les absences de ce module
Returns:
None
""" """
# log('AnnuleAbsencesDatesNoJust: moduleimpl_id=%s' % moduleimpl_id) # log('AnnuleAbsencesDatesNoJust: moduleimpl_id=%s' % moduleimpl_id)
if not dates: if not dates:
@ -626,7 +633,7 @@ def AnnuleAbsencesDatesNoJust(context, etudid, dates, moduleimpl_id=None, REQUES
matin = 0 matin = 0
else: else:
raise ValueError("invalid ampm !") raise ValueError("invalid ampm !")
sco_abs.annule_absence(context, etudid, jour, matin, moduleimpl_id, REQUEST) sco_abs.annule_absence(context, etudid, jour, matin, moduleimpl_id)
return return
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor) cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)

View File

@ -295,7 +295,7 @@ def doSignaleAbsenceGrSemestre(
if dates: if dates:
for etudid in etudids: for etudid in etudids:
sco_abs_views.AnnuleAbsencesDatesNoJust( sco_abs_views.AnnuleAbsencesDatesNoJust(
context, etudid, dates, moduleimpl_id, REQUEST context, etudid, dates, moduleimpl_id
) )
return "Absences effacées" return "Absences effacées"

View File

@ -45,13 +45,20 @@ mi = G.create_moduleimpl(
# --- Création d'un étudiant # --- Création d'un étudiant
etud = G.create_etud(code_nip=None) etud = G.create_etud(code_nip=None)
G.inscrit_etudiant(sem, etud) G.inscrit_etudiant(sem, etud)
etudid=etud["etudid"] etudid = etud["etudid"]
# --- Création d'une absence # --- Création d'une absence
sco_abs_views.doSignaleAbsence(context.Absences, datedebut="22/01/2021", datefin="22/01/2021", demijournee=2, etudid=etudid, REQUEST=REQUEST) sco_abs_views.doSignaleAbsence(
context.Absences,
datedebut="22/01/2021",
datefin="22/01/2021",
demijournee=2,
etudid=etudid,
REQUEST=REQUEST,
)
# --- Annulation d'absence # --- Annulation d'absence
context.Absences.AnnuleAbsencesDatesNoJust(etudid, dates="22/01/2021", REQUEST=REQUEST) context.Absences.AnnuleAbsencesDatesNoJust(etudid, dates="22/01/2021")
""" Erreur : File "/opt/scodoc/Products/ScoDoc/ZAbsences.py", line 323, in AnnuleAbsencesDatesNoJust """ Erreur : File "/opt/scodoc/Products/ScoDoc/ZAbsences.py", line 323, in AnnuleAbsencesDatesNoJust
vars(), vars(),

View File

@ -236,7 +236,7 @@ assert len(li_range) == 5
# --- Annulation d'absence # --- Annulation d'absence
# context.Absences.AnnuleAbsencesDatesNoJust(etudid, dates="22/01/2021", REQUEST=REQUEST) # context.Absences.AnnuleAbsencesDatesNoJust(etudid, dates="22/01/2021")
# --- Fonction renvoyant du code HTML # --- Fonction renvoyant du code HTML

View File

@ -1,126 +1,130 @@
import random # -*- mode: python -*-
# -*- coding: utf-8 -*-
# La variable context est définie par le script de lancement """
# l'affecte ainsi pour évietr les warnins pylint: Comptage des absences
context = context # pylint: disable=undefined-variable """
REQUEST = REQUEST # pylint: disable=undefined-variable # test écrit par Fares Amer, mai 2021 et porté sur ScoDoc 8 en juillet 2021
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
import sco_abs
import sco_abs_views
import sco_abs_notification
import ZAbsences
G = sco_fake_gen.ScoFake(context.Notes) import json
G.verbose = False
# --- Création d'étudiants from tests.unit import sco_fake_gen
etud = G.create_etud(code_nip=None)
# --- Création d'une formation from app.scodoc import sco_abs
f = G.create_formation(acronyme="") from app.scodoc import sco_abs_views
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test") from app.scodoc import sco_groups
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test") from app.views import absences
mod = G.create_module(
context = None # #context
def test_abs_counts(test_client):
"""Comptage des absences"""
G = sco_fake_gen.ScoFake(verbose=False)
# --- Création d'étudiants
etud = G.create_etud(code_nip=None)
# --- Création d'une formation
f = G.create_formation(acronyme="")
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test")
mod = G.create_module(
matiere_id=mat["matiere_id"], matiere_id=mat["matiere_id"],
code="TSM1", code="TSM1",
coefficient=1.0, coefficient=1.0,
titre="module test", titre="module test",
ue_id=ue["ue_id"], # faiblesse de l'API ue_id=ue["ue_id"], # faiblesse de l'API
formation_id=f["formation_id"], # faiblesse de l'API formation_id=f["formation_id"], # faiblesse de l'API
) )
# --- Mise place d'un semestre # --- Mise place d'un semestre
sem = G.create_formsemestre( sem = G.create_formsemestre(
formation_id=f["formation_id"], formation_id=f["formation_id"],
semestre_id=1, semestre_id=1,
date_debut="01/01/2021", date_debut="01/01/2021",
date_fin="30/06/2021", date_fin="30/06/2021",
) )
mi = G.create_moduleimpl( mi = G.create_moduleimpl(
module_id=mod["module_id"], module_id=mod["module_id"],
formsemestre_id=sem["formsemestre_id"], formsemestre_id=sem["formsemestre_id"],
responsable_id="bach", responsable_id="bach",
) )
# --- Inscription des étudiants # --- Inscription des étudiants
G.inscrit_etudiant(sem, etud) G.inscrit_etudiant(sem, etud)
# --- Saisie absences # --- Saisie absences
etudid = etud["etudid"] etudid = etud["etudid"]
for debut, fin, demijournee in [ for debut, fin, demijournee in [
("01/01/2020", "31/01/2020", 2), # hors semestre
("15/01/2021", "15/01/2021", 1), ("15/01/2021", "15/01/2021", 1),
("18/01/2021", "18/01/2021", 0), ("18/01/2021", "18/01/2021", 0),
("19/01/2021", "19/01/2021", 2), ("19/01/2021", "19/01/2021", 2),
("22/01/2021", "22/01/2021", 1), ("22/01/2021", "22/01/2021", 1),
]: ("30/06/2021", "30/06/2021", 2), # dernier jour
]:
sco_abs_views.doSignaleAbsence( sco_abs_views.doSignaleAbsence(
context.Absences, context,
datedebut=debut, datedebut=debut,
datefin=fin, datefin=fin,
demijournee=demijournee, demijournee=demijournee,
etudid=etudid, etudid=etudid,
REQUEST=REQUEST,
) )
# --- Justification de certaines absences
# --- Justification de certaines absences for debut, fin, demijournee in [
for debut, fin, demijournee in [
("15/01/2021", "15/01/2021", 1), ("15/01/2021", "15/01/2021", 1),
("18/01/2021", "18/01/2021", 0), ("18/01/2021", "18/01/2021", 0),
("19/01/2021", "19/01/2021", 2), ("19/01/2021", "19/01/2021", 2),
]: ]:
sco_abs_views.doJustifAbsence( sco_abs_views.doJustifAbsence(
context.Absences, context,
datedebut=debut, datedebut=debut,
datefin=fin, datefin=fin,
demijournee=demijournee, demijournee=demijournee,
etudid=etudid, etudid=etudid,
REQUEST=REQUEST,
) )
# --- Utilisation de get_abs_count() de sco_abs
# --- Utilisation de get_abs_count() de sco_abs nbabs, nbabsjust = sco_abs.get_abs_count(etudid, sem)
nbabs, nbabsjust = sco_abs.get_abs_count(etudid, sem) # --- Utilisation de sco_abs.count_abs()
nb_abs2 = sco_abs.count_abs(etudid=etudid, debut="2021-01-01", fin="2021-06-30")
nb_absj2 = sco_abs.count_abs_just(
etudid=etudid, debut="2021-01-01", fin="2021-06-30"
)
# --- Utilisation de CountAbs() de ZAbsences assert nbabs == nb_abs2 == 7
assert nbabsjust == nb_absj2 == 4
nb_abs2 = context.Absences.CountAbs(etudid=etudid, debut="01/01/2021", fin="06/30/2021") # --- Nombre de justificatifs:
nb_absj2 = context.Absences.CountAbsJust( justifs = sco_abs.list_abs_justifs(etudid, "2021-01-01", datefin="2021-06-30")
etudid=etudid, debut="01/01/2021", fin="06/30/2021" assert len(justifs) == 4
)
assert nbabs == nb_abs2 == 5 # --- Suppression d'absence
assert nbabsjust == nb_absj2 == 4 _ = sco_abs_views.doAnnuleAbsence(
context, "19/01/2021", "19/01/2021", 2, etudid=etudid
)
# --- Suppression d'absence # --- Vérification
justifs_2 = sco_abs.list_abs_justifs(etudid, "2021-01-01", datefin="2021-06-30")
assert len(justifs_2) == len(justifs)
new_nbabs, _ = sco_abs.get_abs_count(etudid, sem) # version cachée
new_nbabs2 = sco_abs.count_abs(etudid=etudid, debut="2021-01-01", fin="2021-06-30")
_ = sco_abs_views.doAnnuleAbsence( assert new_nbabs == new_nbabs2
context.Absences, "19/01/2021", "19/01/2021", 2, etudid=etudid, REQUEST=REQUEST assert new_nbabs == (nbabs - 2) # on a supprimé deux absences
)
# --- Vérification # --- annulation absence sans supprimer le justificatif
sco_abs_views.AnnuleAbsencesDatesNoJust(context, etudid, ["2021-01-15"])
new_nbabs, _ = sco_abs.get_abs_count(etudid, sem) nbabs_3, nbjust_3 = sco_abs.get_abs_count(etudid, sem)
new_nbabs2 = context.Absences.CountAbs( assert nbabs_3 == new_nbabs
etudid=etudid, debut="01/01/2021", fin="06/30/2021" justifs_3 = sco_abs.list_abs_justifs(etudid, "2021-01-01", datefin="2021-06-30")
) assert len(justifs_3) == len(justifs_2)
# XXX à continuer
print(new_nbabs)
print(new_nbabs2)
assert new_nbabs == new_nbabs2
"""
Commentaire :
CountAbs de ZAbsence ----> OK
CountAbs de sco_abs_view ----> bug
Peut être du au fait que la fonction getAbsSemEtud ne se met pas à jour par rapport aux absences supprimés.
"""

View File

@ -1,119 +1,360 @@
""" Parametre demijournee ne fonctionne pas lorsque demijournee = 2 # -*- mode: python -*-
# -*- coding: utf-8 -*-
"""
Créer et justifier des absences en utilisant le parametre demijournee Créer et justifier des absences en utilisant le parametre demijournee
""" """
import random # test écrit par Fares Amer, mai 2021 et porté sur ScoDoc 8 en juillet 2021
# La variable context est définie par le script de lancement import json
# l'affecte ainsi pour évietr les warnins pylint:
context = context # pylint: disable=undefined-variable
REQUEST = REQUEST # pylint: disable=undefined-variable
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
import sco_abs
import sco_abs_views
import sco_abs_notification
G = sco_fake_gen.ScoFake(context.Notes) from tests.unit import sco_fake_gen
G.verbose = False
# --- Création d'étudiants from app.scodoc import sco_abs
etud = G.create_etud(code_nip=None) from app.scodoc import sco_abs_views
from app.scodoc import sco_groups
from app.views import absences
# --- Création d'une formation context = None # #context
f = G.create_formation(acronyme="")
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test") def test_abs_demijournee(test_client):
mod = G.create_module( """Opération élémentaires sur les absences, tests demi-journées
Travaille dans base TEST00 (defaut)
"""
G = sco_fake_gen.ScoFake(verbose=False)
# --- Création d'étudiants
etud = G.create_etud(code_nip=None)
# --- Création d'une formation
f = G.create_formation(acronyme="")
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test")
mod = G.create_module(
matiere_id=mat["matiere_id"], matiere_id=mat["matiere_id"],
code="TSM1", code="TSM1",
coefficient=1.0, coefficient=1.0,
titre="module test", titre="module test",
ue_id=ue["ue_id"], # faiblesse de l'API ue_id=ue["ue_id"], # faiblesse de l'API
formation_id=f["formation_id"], # faiblesse de l'API formation_id=f["formation_id"], # faiblesse de l'API
) )
# --- Mise place d'un semestre # --- Mise place d'un semestre
sem = G.create_formsemestre( sem = G.create_formsemestre(
formation_id=f["formation_id"], formation_id=f["formation_id"],
semestre_id=1, semestre_id=1,
date_debut="01/01/2021", date_debut="01/01/2021",
date_fin="30/06/2021", date_fin="30/06/2021",
) )
mi = G.create_moduleimpl( mi = G.create_moduleimpl(
module_id=mod["module_id"], module_id=mod["module_id"],
formsemestre_id=sem["formsemestre_id"], formsemestre_id=sem["formsemestre_id"],
responsable_id="bach", responsable_id="bach",
) )
# --- Inscription des étudiants # --- Inscription des étudiants
G.inscrit_etudiant(sem, etud) G.inscrit_etudiant(sem, etud)
# --- Saisie absences
etudid = etud["etudid"]
# --- Saisie absences _ = sco_abs_views.doSignaleAbsence(
etudid = etud["etudid"] context,
_ = sco_abs_views.doSignaleAbsence(
context.Absences,
"15/01/2021", "15/01/2021",
"15/01/2021", "15/01/2021",
demijournee=2, demijournee=2,
etudid=etudid, etudid=etudid,
REQUEST=REQUEST, )
)
_ = sco_abs_views.doSignaleAbsence(
_ = sco_abs_views.doSignaleAbsence( context,
context.Absences,
"18/01/2021", "18/01/2021",
"18/01/2021", "18/01/2021",
demijournee=1, demijournee=1,
etudid=etudid, etudid=etudid,
REQUEST=REQUEST, )
)
_ = sco_abs_views.doSignaleAbsence( _ = sco_abs_views.doSignaleAbsence(
context.Absences, context,
"19/01/2021", "19/01/2021",
"19/01/2021", "19/01/2021",
demijournee=0, demijournee=0,
etudid=etudid, etudid=etudid,
REQUEST=REQUEST, )
)
# --- Justification de certaines absences # --- Justification de certaines absences
_ = sco_abs_views.doJustifAbsence( _ = sco_abs_views.doJustifAbsence(
context.Absences, context,
"18/01/2021", "18/01/2021",
"18/01/2021", "18/01/2021",
demijournee=1, demijournee=1,
etudid=etudid, etudid=etudid,
REQUEST=REQUEST, )
)
_ = sco_abs_views.doJustifAbsence( _ = sco_abs_views.doJustifAbsence(
context.Absences, context,
"19/01/2021", "19/01/2021",
"19/01/2021", "19/01/2021",
demijournee=2, demijournee=2,
etudid=etudid, etudid=etudid,
REQUEST=REQUEST, )
)
# NE JUSTIFIE QUE LE MATIN MALGRES LE PARAMETRE demijournee = 2 # NE JUSTIFIE QUE LE MATIN MALGRES LE PARAMETRE demijournee = 2
# --- Test # --- Test
nbabs, nbabs_just = sco_abs.get_abs_count(etudid, sem) nbabs, nbabs_just = sco_abs.get_abs_count(etudid, sem)
assert ( assert (
nbabs == 4 nbabs == 4
) # l'étudiant a été absent le 15 journée compléte (2 abs : 1 matin, 1 apres midi) et le 18 (1 matin), et le 19 (1 apres midi). ) # l'étudiant a été absent le 15 journée compléte (2 abs : 1 matin, 1 apres midi) et le 18 (1 matin), et le 19 (1 apres midi).
assert nbabs_just == 2 # Justifie abs du matin + abs après midi assert nbabs_just == 2 # Justifie abs du matin + abs après midi
"""
Commentaire :
Pb : le 2 ne peut pas être pris en tant que int car string dans la fonction def test_abs_basic(test_client):
-----> Pb reglé """creation de 10 étudiants, formation, semestre, ue, module, absences le matin, l'apres midi, la journée compléte
et justification d'absences, supression d'absences, création d'une liste etat absences, creation d'un groupe afin
de tester la fonction EtatAbsencesGroupes
""" Fonctions de l'API utilisé :
- doSignaleAbsence
- doAnnuleAbsence
- doJustifAbsence
- get_partition_groups
- get_partitions_list
- sco_abs.get_abs_count(etudid, sem)
- ListeAbsEtud
- partition_create
- createGroup
- set_group
- EtatAbsenceGr
- AddBilletAbsence
- listeBilletsEtud
"""
G = sco_fake_gen.ScoFake(verbose=False)
# --- Création d'étudiants
etuds = [G.create_etud(code_nip=None) for _ in range(10)]
# --- Création d'une formation
f = G.create_formation(acronyme="")
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test")
mod = G.create_module(
matiere_id=mat["matiere_id"],
code="TSM1",
coefficient=1.0,
titre="module test",
ue_id=ue["ue_id"], # faiblesse de l'API
formation_id=f["formation_id"], # faiblesse de l'API
)
# --- Mise place d'un semestre
sem = G.create_formsemestre(
formation_id=f["formation_id"],
semestre_id=1,
date_debut="01/01/2021",
date_fin="30/06/2021",
)
mi = G.create_moduleimpl(
module_id=mod["module_id"],
formsemestre_id=sem["formsemestre_id"],
responsable_id="bach",
)
# --- Inscription des étudiants
for etud in etuds:
G.inscrit_etudiant(sem, etud)
# --- Création d'une évaluation
e = G.create_evaluation(
moduleimpl_id=mi["moduleimpl_id"],
jour="22/01/2021",
description="evaluation test",
coefficient=1.0,
)
# --- Saisie absences
etudid = etuds[0]["etudid"]
_ = sco_abs_views.doSignaleAbsence(
context,
"15/01/2021",
"15/01/2021",
demijournee=1,
etudid=etudid,
)
_ = sco_abs_views.doSignaleAbsence(
context,
"18/01/2021",
"18/01/2021",
demijournee=0,
etudid=etudid,
)
_ = sco_abs_views.doSignaleAbsence(
context,
"19/01/2021",
"19/01/2021",
demijournee=2,
etudid=etudid,
)
_ = sco_abs_views.doSignaleAbsence(
context,
"22/01/2021",
"22/01/2021",
demijournee=1,
etudid=etudid,
)
# --- Justification de certaines absences
_ = sco_abs_views.doJustifAbsence(
context,
"15/01/2021",
"15/01/2021",
demijournee=1,
etudid=etudid,
)
_ = sco_abs_views.doJustifAbsence(
context,
"18/01/2021",
"18/01/2021",
demijournee=0,
etudid=etudid,
)
_ = sco_abs_views.doJustifAbsence(
context,
"19/01/2021",
"19/01/2021",
demijournee=2,
etudid=etudid,
)
# --- Test
b = sco_abs.is_work_saturday(context)
assert b == 0 # samedi ne sont pas compris
nbabs, nbabsjust = sco_abs.get_abs_count(etudid, sem)
assert (
nbabs == 5
) # l'étudiant a été absent le 15 (apres midi) , (16 et 17 we), 18 (matin) et 19 janvier (matin et apres midi), et 22 (matin)
assert nbabsjust == 4 # l'étudiant justifie ses abs du 15, 18 et 19
# + vérification à l'aide de ScoDoc WEB : ok!
# --- Supression d'une absence et d'une justification
_ = sco_abs_views.doAnnuleAbsence(
context, "19/01/2021", "19/01/2021", 2, etudid=etudid
)
nbabs, nbabsjust = sco_abs.get_abs_count(etudid, sem)
print(nbabs) # lors du print cela affiche 5 or cela devrait afficher 3
# assert nbabs == 3
# + vérification à l'aide de ScoDoc WEB : il y a bien plus que 3 abs, 2 justifiés et 1 non justifié.
# --- supression d'une justification pas encore disponible à l'aide de python.
# --- Création d'une liste d'abs
liste_abs = sco_abs_views.ListeAbsEtud(
context, etudid, format="json", absjust_only=1
)
liste_abs2 = sco_abs_views.ListeAbsEtud(context, etudid, format="json")
load_liste_abs = json.loads(liste_abs)
load_liste_abs2 = json.loads(liste_abs2)
assert len(load_liste_abs2) == 1
assert len(load_liste_abs) == 2
assert load_liste_abs2[0]["ampm"] == "1"
assert load_liste_abs2[0]["datedmy"] == "22/01/2021"
assert load_liste_abs2[0]["exams"] == mod["code"]
# absjust_only -> seulement les abs justifiés
# --- Création d'un groupe
_ = sco_groups.partition_create(
context,
formsemestre_id=sem["formsemestre_id"],
partition_name="Eleve",
)
li1 = sco_groups.get_partitions_list(context, sem["formsemestre_id"])
_ = sco_groups.createGroup(context, li1[0]["partition_id"], "Groupe 1")
# --- Affectation des élèves dans des groupes
li_grp1 = sco_groups.get_partition_groups(context, li1[0])
for etud in etuds:
sco_groups.set_group(context, etud["etudid"], li_grp1[0]["group_id"])
# --- Test de EtatAbsencesGroupes
grp1_abs = absences.EtatAbsencesGr(
context,
group_ids=[li_grp1[0]["group_id"]],
debut="01/01/2021",
fin="30/06/2021",
format="json",
)
# grp1_abs est une Response car on a appelé une vue (1er appel)
load_grp1_abs = json.loads(grp1_abs.get_data().decode("utf-8"))
assert len(load_grp1_abs) == 10
tab_id = [] # tab des id present dans load_grp1_abs
for un_etud in load_grp1_abs:
tab_id.append(un_etud["etudid"])
for (
etud
) in (
etuds
): # verification si tous les etudiants sont present dans la liste du groupe d'absence
assert etud["etudid"] in tab_id
for un_etud in load_grp1_abs:
if un_etud["etudid"] == etudid:
assert un_etud["nbabs"] == "3"
assert un_etud["nbjustifs_noabs"] == "2"
assert un_etud["nbabsjust"] == "2"
assert un_etud["nbabsnonjust"] == "1"
assert un_etud["nomprenom"] == etuds[0]["nomprenom"]
# --- Création de billets
b1 = absences.AddBilletAbsence(
context,
begin="2021-01-22 00:00",
end="2021-01-22 23:59",
etudid=etudid,
description="abs du 22",
justified=False,
code_nip=etuds[0]["code_nip"],
code_ine=etuds[0]["code_ine"],
)
b2 = absences.AddBilletAbsence(
context,
begin="2021-01-15 00:00",
end="2021-01-15 23:59",
etudid=etudid,
description="abs du 15",
code_nip=etuds[0]["code_nip"],
code_ine=etuds[0]["code_ine"],
)
li_bi = absences.listeBilletsEtud(context, etudid=etudid, format="json")
assert isinstance(li_bi, str)
load_li_bi = json.loads(li_bi)
assert len(load_li_bi) == 2
assert load_li_bi[1]["description"] == "abs du 22"

View File

@ -22,7 +22,9 @@ context = None # #context
def test_notes_table(test_client): def test_notes_table(test_client):
"""Test construction et cache de NotesTable""" """Test construction et cache de NotesTable.
Attention: utilise une base (departement) existante.
"""
ndb.set_sco_dept(DEPT) ndb.set_sco_dept(DEPT)
assert g.scodoc_dept == DEPT assert g.scodoc_dept == DEPT
sems = sco_formsemestre.do_formsemestre_list(context) sems = sco_formsemestre.do_formsemestre_list(context)