forked from ScoDoc/DocScoDoc
457 lines
17 KiB
Python
457 lines
17 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""Test Logos
|
|
|
|
Utilisation :
|
|
créer les variables d'environnement: (indiquer les valeurs
|
|
pour le serveur ScoDoc que vous voulez interroger)
|
|
|
|
export SCODOC_URL="https://scodoc.xxx.net/"
|
|
export SCODOC_USER="xxx"
|
|
export SCODOC_PASSWD="xxx"
|
|
export CHECK_CERTIFICATE=0 # ou 1 si serveur de production avec certif SSL valide
|
|
|
|
(on peut aussi placer ces valeurs dans un fichier .env du répertoire tests/api).
|
|
|
|
Lancer :
|
|
pytest tests/api/test_api_formsemestre.py
|
|
"""
|
|
|
|
import requests
|
|
from app.api.formsemestres import formsemestre
|
|
|
|
from tests.api.setup_test_api import API_URL, CHECK_CERTIFICATE, api_headers
|
|
from tests.api.tools_test_api import (
|
|
MODIMPL_FIELDS,
|
|
verify_fields,
|
|
EVAL_FIELDS,
|
|
SAISIE_NOTES_FIELDS,
|
|
FORMSEMESTRE_ETUS_FIELDS,
|
|
)
|
|
from tests.api.tools_test_api import FSEM_FIELDS, UE_FIELDS, MODULE_FIELDS
|
|
|
|
# Etudiant pour les tests
|
|
ETUDID = 1
|
|
NIP = "1"
|
|
INE = "INE1"
|
|
|
|
|
|
def test_formsemestre(api_headers):
|
|
"""
|
|
Route: /formsemestre/<id>
|
|
"""
|
|
formsemestre_id = 1
|
|
r = requests.get(
|
|
f"{API_URL}/formsemestre/{formsemestre_id}",
|
|
headers=api_headers,
|
|
verify=CHECK_CERTIFICATE,
|
|
)
|
|
assert r.status_code == 200
|
|
formsemestre = r.json()
|
|
assert verify_fields(formsemestre, FSEM_FIELDS)
|
|
assert isinstance(formsemestre["block_moyennes"], bool)
|
|
assert isinstance(formsemestre["bul_bgcolor"], str)
|
|
assert isinstance(formsemestre["bul_hide_xml"], bool)
|
|
assert isinstance(formsemestre["date_debut_iso"], str)
|
|
assert isinstance(formsemestre["date_debut"], str)
|
|
assert isinstance(formsemestre["date_fin_iso"], str)
|
|
assert isinstance(formsemestre["date_fin"], str)
|
|
assert isinstance(formsemestre["dept_id"], int)
|
|
assert formsemestre["elt_annee_apo"] is None or isinstance(
|
|
formsemestre["elt_annee_apo"], str
|
|
)
|
|
assert formsemestre["elt_sem_apo"] is None or isinstance(
|
|
formsemestre["elt_sem_apo"], str
|
|
)
|
|
assert isinstance(formsemestre["ens_can_edit_eval"], bool)
|
|
assert isinstance(formsemestre["etat"], bool)
|
|
assert isinstance(formsemestre["formation_id"], int)
|
|
assert isinstance(formsemestre["formsemestre_id"], int)
|
|
assert isinstance(formsemestre["gestion_compensation"], bool)
|
|
assert isinstance(formsemestre["gestion_semestrielle"], bool)
|
|
assert isinstance(formsemestre["id"], int)
|
|
assert isinstance(formsemestre["modalite"], str)
|
|
assert isinstance(formsemestre["resp_can_change_ens"], bool)
|
|
assert isinstance(formsemestre["resp_can_edit"], bool)
|
|
assert isinstance(formsemestre["responsables"], list)
|
|
assert formsemestre["scodoc7_id"] is None or isinstance(
|
|
formsemestre["scodoc7_id"], int
|
|
)
|
|
assert isinstance(formsemestre["semestre_id"], int)
|
|
assert isinstance(formsemestre["titre_formation"], str)
|
|
assert isinstance(formsemestre["titre_num"], str)
|
|
assert isinstance(formsemestre["titre"], str)
|
|
|
|
### ERROR ###
|
|
formsemestre_id_inexistant = 165456165165136513510351
|
|
r = requests.get(
|
|
f"{API_URL}/formsemestre/{formsemestre_id_inexistant}",
|
|
headers=api_headers,
|
|
verify=CHECK_CERTIFICATE,
|
|
)
|
|
assert r.status_code == 404
|
|
|
|
|
|
def test_formsemestre_apo(api_headers):
|
|
"""
|
|
Route: /formsemestre/apo/<string:etape_apo>
|
|
"""
|
|
etape_apo = "A1"
|
|
r = requests.get(
|
|
f"{API_URL}/formsemestre/apo/{etape_apo}",
|
|
headers=api_headers,
|
|
verify=CHECK_CERTIFICATE,
|
|
)
|
|
assert r.status_code == 200
|
|
list_formsemestre = r.json()
|
|
assert isinstance(list_formsemestre, list)
|
|
|
|
for formsemestre in list_formsemestre:
|
|
assert isinstance(formsemestre, dict)
|
|
assert verify_fields(formsemestre, FSEM_FIELDS)
|
|
assert isinstance(formsemestre["block_moyennes"], bool)
|
|
assert isinstance(formsemestre["bul_bgcolor"], str)
|
|
assert isinstance(formsemestre["bul_hide_xml"], bool)
|
|
assert isinstance(formsemestre["date_debut_iso"], str)
|
|
assert isinstance(formsemestre["date_debut"], str)
|
|
assert isinstance(formsemestre["date_fin_iso"], str)
|
|
assert isinstance(formsemestre["date_fin"], str)
|
|
assert isinstance(formsemestre["dept_id"], int)
|
|
assert formsemestre["elt_annee_apo"] is None or isinstance(
|
|
formsemestre["elt_annee_apo"], str
|
|
)
|
|
assert formsemestre["elt_sem_apo"] is None or isinstance(
|
|
formsemestre["elt_sem_apo"], str
|
|
)
|
|
assert isinstance(formsemestre["ens_can_edit_eval"], bool)
|
|
assert isinstance(formsemestre["etat"], bool)
|
|
assert isinstance(formsemestre["formation_id"], int)
|
|
assert isinstance(formsemestre["formsemestre_id"], int)
|
|
assert isinstance(formsemestre["gestion_compensation"], bool)
|
|
assert isinstance(formsemestre["gestion_semestrielle"], bool)
|
|
assert isinstance(formsemestre["id"], int)
|
|
assert isinstance(formsemestre["modalite"], str)
|
|
assert isinstance(formsemestre["resp_can_change_ens"], bool)
|
|
assert isinstance(formsemestre["resp_can_edit"], bool)
|
|
assert isinstance(formsemestre["responsables"], list)
|
|
assert formsemestre["scodoc7_id"] is None or isinstance(
|
|
formsemestre["scodoc7_id"], int
|
|
)
|
|
assert isinstance(formsemestre["semestre_id"], int)
|
|
assert isinstance(formsemestre["titre_formation"], str)
|
|
assert isinstance(formsemestre["titre_num"], str)
|
|
assert isinstance(formsemestre["titre"], str)
|
|
|
|
### ERROR ###
|
|
etape_apo_inexistante = "aoefiaozidaoẑidjnoaiznjd"
|
|
r = requests.get(
|
|
f"{API_URL}/formsemestre/apo/{etape_apo_inexistante}",
|
|
headers=api_headers,
|
|
verify=CHECK_CERTIFICATE,
|
|
)
|
|
assert r.status_code == 404
|
|
|
|
|
|
def test_bulletins(api_headers):
|
|
"""
|
|
Route: /formsemestre/<int:formsemestre_id>/bulletins
|
|
"""
|
|
r = requests.get(
|
|
API_URL + "/formsemestre/1/bulletins",
|
|
headers=api_headers,
|
|
verify=CHECK_CERTIFICATE,
|
|
)
|
|
assert r.status_code == 200
|
|
|
|
|
|
# # jury
|
|
# def test_jury():
|
|
# r = requests.get(
|
|
# API_URL + "/formsemestre/1/jury",
|
|
# headers=api_headers,
|
|
# verify=CHECK_CERTIFICATE,
|
|
# )
|
|
# assert r.status_code == 200
|
|
|
|
|
|
def test_formsemestre_etudiants(api_headers):
|
|
"""
|
|
Route: /formsemestre/<int:formsemestre_id>/etudiants,
|
|
/formsemestre/<int:formsemestre_id>/etudiants/demissionnaires,
|
|
/formsemestre/<int:formsemestre_id>/etudiants/defaillants
|
|
"""
|
|
r = requests.get(
|
|
API_URL + "/formsemestre/1/etudiants",
|
|
headers=api_headers,
|
|
verify=CHECK_CERTIFICATE,
|
|
)
|
|
assert r.status_code == 200
|
|
formsemestre_etus = r.json()
|
|
assert isinstance(formsemestre_etus, list)
|
|
assert verify_fields(formsemestre_etus, FORMSEMESTRE_ETUS_FIELDS) is True
|
|
for etu in formsemestre_etus:
|
|
assert isinstance(etu["id"], int)
|
|
assert isinstance(etu["nip"], str)
|
|
assert isinstance(etu["ine"], str)
|
|
assert isinstance(etu["nom"], str)
|
|
assert etu["nom_usuel"] is None or isinstance(etu["nom_usuel"], str)
|
|
assert isinstance(etu["prenom"], str)
|
|
assert isinstance(etu["civilite"], str)
|
|
assert isinstance(etu["groups"], list)
|
|
etu_groups = etu["groups"]
|
|
for group in etu_groups:
|
|
assert isinstance(group["partition_id"], int)
|
|
assert isinstance(group["id"], int)
|
|
assert isinstance(group["formsemestre_id"], int)
|
|
assert group["partition_name"] is None or isinstance(
|
|
group["partition_name"], str
|
|
)
|
|
assert isinstance(group["numero"], int)
|
|
assert isinstance(group["bul_show_rank"], bool)
|
|
assert isinstance(group["show_in_lists"], bool)
|
|
assert isinstance(group["group_id"], int)
|
|
assert group["group_name"] is None or isinstance(group["group_name"], int)
|
|
|
|
### demissionnaires ###
|
|
r_demissionnaires = requests.get(
|
|
API_URL + "/formsemestre/<int:formsemestre_id>/etudiants/demissionnaires",
|
|
headers=api_headers,
|
|
verify=CHECK_CERTIFICATE,
|
|
)
|
|
assert r_demissionnaires.status_code == 200
|
|
formsemestre_etus = r_demissionnaires.json()
|
|
assert isinstance(formsemestre_etus, list)
|
|
assert verify_fields(formsemestre_etus, FORMSEMESTRE_ETUS_FIELDS) is True
|
|
for etu in formsemestre_etus:
|
|
assert isinstance(etu["id"], int)
|
|
assert isinstance(etu["nip"], str)
|
|
assert isinstance(etu["ine"], str)
|
|
assert isinstance(etu["nom"], str)
|
|
assert etu["nom_usuel"] is None or isinstance(etu["nom_usuel"], str)
|
|
assert isinstance(etu["prenom"], str)
|
|
assert isinstance(etu["civilite"], str)
|
|
assert isinstance(etu["groups"], list)
|
|
etu_groups = etu["groups"]
|
|
for group in etu_groups:
|
|
assert isinstance(group["partition_id"], int)
|
|
assert isinstance(group["id"], int)
|
|
assert isinstance(group["formsemestre_id"], int)
|
|
assert group["partition_name"] is None or isinstance(
|
|
group["partition_name"], str
|
|
)
|
|
assert isinstance(group["numero"], int)
|
|
assert isinstance(group["bul_show_rank"], bool)
|
|
assert isinstance(group["show_in_lists"], bool)
|
|
assert isinstance(group["group_id"], int)
|
|
assert group["group_name"] is None or isinstance(group["group_name"], int)
|
|
|
|
### defaillants ###
|
|
r_defaillants = requests.get(
|
|
API_URL + "/formsemestre/<int:formsemestre_id>/etudiants/defaillants",
|
|
headers=api_headers,
|
|
verify=CHECK_CERTIFICATE,
|
|
)
|
|
assert r_defaillants.status_code == 200
|
|
|
|
formsemestre_etus = r_defaillants.json()
|
|
assert isinstance(formsemestre_etus, list)
|
|
assert verify_fields(formsemestre_etus, FORMSEMESTRE_ETUS_FIELDS) is True
|
|
for etu in formsemestre_etus:
|
|
assert isinstance(etu["id"], int)
|
|
assert isinstance(etu["nip"], str)
|
|
assert isinstance(etu["ine"], str)
|
|
assert isinstance(etu["nom"], str)
|
|
assert etu["nom_usuel"] is None or isinstance(etu["nom_usuel"], str)
|
|
assert isinstance(etu["prenom"], str)
|
|
assert isinstance(etu["civilite"], str)
|
|
assert isinstance(etu["groups"], list)
|
|
etu_groups = etu["groups"]
|
|
for group in etu_groups:
|
|
assert isinstance(group["partition_id"], int)
|
|
assert isinstance(group["id"], int)
|
|
assert isinstance(group["formsemestre_id"], int)
|
|
assert group["partition_name"] is None or isinstance(
|
|
group["partition_name"], str
|
|
)
|
|
assert isinstance(group["numero"], int)
|
|
assert isinstance(group["bul_show_rank"], bool)
|
|
assert isinstance(group["show_in_lists"], bool)
|
|
assert isinstance(group["group_id"], int)
|
|
assert group["group_name"] is None or isinstance(group["group_name"], int)
|
|
|
|
assert r != r_demissionnaires != r_defaillants is True
|
|
|
|
### ERROR ###
|
|
id_formsemestre_inexistant = 265165689619851621685
|
|
r_error = requests.get(
|
|
f"{API_URL}/formsemestre/{id_formsemestre_inexistant}/etudiants",
|
|
headers=api_headers,
|
|
verify=CHECK_CERTIFICATE,
|
|
)
|
|
assert r_error.status_code == 404
|
|
|
|
r_error_demissionnaires = requests.get(
|
|
f"{API_URL}/formsemestre/{id_formsemestre_inexistant}/etudiants/demissionnaires",
|
|
headers=api_headers,
|
|
verify=CHECK_CERTIFICATE,
|
|
)
|
|
assert r_error_demissionnaires.status_code == 404
|
|
|
|
r_error_defaillants = requests.get(
|
|
f"{API_URL}/formsemestre/{id_formsemestre_inexistant}/etudiants/defaillants",
|
|
headers=api_headers,
|
|
verify=CHECK_CERTIFICATE,
|
|
)
|
|
assert r_error_defaillants.status_code == 404
|
|
|
|
|
|
def test_formsemestre_programme(api_headers):
|
|
"""
|
|
Route: /formsemestre/1/programme
|
|
"""
|
|
|
|
r = requests.get(
|
|
API_URL + "/formsemestre/1/programme",
|
|
headers=api_headers,
|
|
verify=CHECK_CERTIFICATE,
|
|
)
|
|
assert r.status_code == 200
|
|
prog = r.json()
|
|
assert isinstance(prog, dict)
|
|
assert "ues" in prog
|
|
assert "modules" in prog
|
|
assert "ressources" in prog
|
|
assert "saes" in prog
|
|
assert isinstance(prog["ues"], list)
|
|
assert isinstance(prog["modules"], list)
|
|
ue = prog["ues"][0]
|
|
modules = prog["modules"]
|
|
# Il y a toujours au moins une SAE et une ressources dans notre base de test
|
|
ressource = prog["ressources"][0]
|
|
sae = prog["saes"][0]
|
|
|
|
assert verify_fields(ue, UE_FIELDS)
|
|
if len(modules) > 1:
|
|
assert verify_fields(modules[0], MODIMPL_FIELDS)
|
|
assert verify_fields(ressource, MODIMPL_FIELDS)
|
|
assert verify_fields(sae, MODIMPL_FIELDS)
|
|
|
|
|
|
def test_etat_evals(
|
|
api_headers,
|
|
):
|
|
"""
|
|
Route : /formsemestre/<int:formsemestre_id>/etat_evals
|
|
"""
|
|
r = requests.get(
|
|
API_URL + "/formsemestre/1/etat_evals",
|
|
headers=api_headers,
|
|
verify=CHECK_CERTIFICATE,
|
|
)
|
|
assert r.status_code == 200
|
|
|
|
etat_evals = r.json()
|
|
|
|
assert len(etat_evals) == 3
|
|
|
|
for ue in etat_evals.values():
|
|
for module in ue:
|
|
assert isinstance(module["id"], int)
|
|
assert isinstance(module["titre"], str)
|
|
assert isinstance(module["evaluations"], list)
|
|
|
|
for eval in module["evaluations"]:
|
|
assert verify_fields(eval, EVAL_FIELDS)
|
|
assert isinstance(eval["id"], int)
|
|
assert eval["description"] is None or isinstance(
|
|
eval["description"], str
|
|
)
|
|
assert eval["datetime_epreuve"] is None or isinstance(
|
|
eval["datetime_epreuve"], str
|
|
)
|
|
assert isinstance(eval["heure_fin"], str)
|
|
assert isinstance(eval["coefficient"], float)
|
|
assert isinstance(eval["comptee"], str)
|
|
assert isinstance(eval["inscrits"], int)
|
|
assert isinstance(eval["manquantes"], int)
|
|
assert isinstance(eval["ABS"], int)
|
|
assert isinstance(eval["ATT"], int)
|
|
assert isinstance(eval["EXC"], int)
|
|
assert isinstance(eval["saisie_notes"], dict)
|
|
|
|
list_eval_id = [e["id"] for e in module["evaluations"]]
|
|
all_unique = True
|
|
for id in list_eval_id:
|
|
if list_eval_id.count(id) > 1:
|
|
all_unique = False
|
|
assert all_unique is True
|
|
|
|
saisie_notes = eval["saisie_notes"]
|
|
assert verify_fields(saisie_notes, SAISIE_NOTES_FIELDS)
|
|
assert eval["saisie_notes"]["datetime_debut"] is None or isinstance(
|
|
eval["saisie_notes"]["datetime_debut"], str
|
|
)
|
|
assert eval["saisie_notes"]["datetime_debut"] is None or isinstance(
|
|
eval["saisie_notes"]["datetime_fin"], str
|
|
)
|
|
assert eval["saisie_notes"]["datetime_debut"] is None or isinstance(
|
|
eval["saisie_notes"]["datetime_mediane"], str
|
|
)
|
|
|
|
if (
|
|
eval["saisie_notes"]["datetime_fin"] is not None
|
|
and eval["saisie_notes"]["datetime_mediane"] is not None
|
|
and eval["saisie_notes"]["datetime_debut"] is not None
|
|
):
|
|
assert (
|
|
eval["saisie_notes"]["datetime_fin"]
|
|
> eval["saisie_notes"]["datetime_mediane"]
|
|
)
|
|
assert (
|
|
eval["saisie_notes"]["datetime_fin"]
|
|
> eval["saisie_notes"]["datetime_debut"]
|
|
)
|
|
assert (
|
|
eval["saisie_notes"]["datetime_mediane"]
|
|
> eval["saisie_notes"]["datetime_debut"]
|
|
)
|
|
|
|
list_id_ue1 = []
|
|
list_titre_ue1 = []
|
|
|
|
list_id_ue2 = []
|
|
list_titre_ue2 = []
|
|
|
|
list_id_ue3 = []
|
|
list_titre_ue3 = []
|
|
i = 0
|
|
for ue in etat_evals.values():
|
|
i += 1
|
|
for module in ue:
|
|
if i == 1:
|
|
list_id_ue1.append(module["id"])
|
|
list_titre_ue1.append(module["id"])
|
|
elif i == 2:
|
|
list_id_ue2.append(module["id"])
|
|
list_titre_ue2.append(module["id"])
|
|
elif i == 3:
|
|
list_id_ue3.append(module["id"])
|
|
list_titre_ue3.append(module["id"])
|
|
|
|
assert list_id_ue1 != list_id_ue2
|
|
assert list_id_ue1 != list_titre_ue3
|
|
assert list_id_ue2 != list_titre_ue3
|
|
|
|
assert list_titre_ue1 != list_titre_ue2
|
|
assert list_titre_ue1 != list_titre_ue3
|
|
assert list_titre_ue2 != list_titre_ue3
|
|
|
|
##### ERROR #####
|
|
fake_eval_id = 153165161656849846516511321651651
|
|
r = requests.get(
|
|
f"{API_URL}/formsemestre/{fake_eval_id}/etat_evals",
|
|
headers=api_headers,
|
|
verify=CHECK_CERTIFICATE,
|
|
)
|
|
assert r.status_code == 404
|