# -*- 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_absences.py """ import requests from app.scodoc import sco_utils as scu from tests.api.setup_test_api import API_URL, CHECK_CERTIFICATE, api_headers # Etudiant pour les tests from tests.api.tools_test_api import ( verify_fields, ABSENCES_FIELDS, ABSENCES_GROUP_ETAT_FIELDS, ) ETUDID = 1 # absences def test_absences(api_headers): """ Test 'absences' Route : - /absences/etudid/<int:etudid> """ r = requests.get( f"{API_URL}/absences/etudid/{ETUDID}", headers=api_headers, verify=CHECK_CERTIFICATE, timeout=scu.SCO_TEST_API_TIMEOUT, ) assert r.status_code == 200 absences = r.json() assert isinstance(absences, list) for abs in absences: assert verify_fields(abs, ABSENCES_FIELDS) is True assert isinstance(abs["jour"], str) assert isinstance(abs["matin"], bool) assert isinstance(abs["estabs"], bool) assert isinstance(abs["estjust"], bool) assert isinstance(abs["description"], str) assert isinstance(abs["begin"], str) assert isinstance(abs["end"], str) assert abs["begin"] < abs["end"] # absences_justify def test_absences_justify(api_headers): """ Test 'absences_just' Route : - /absences/etudid/<int:etudid>/just """ r = requests.get( f"{API_URL}/absences/etudid/{ETUDID}/just", headers=api_headers, verify=CHECK_CERTIFICATE, timeout=scu.SCO_TEST_API_TIMEOUT, ) assert r.status_code == 200 absences = r.json() assert isinstance(absences, list) for abs in absences: assert verify_fields(abs, ABSENCES_FIELDS) is True assert isinstance(abs["jour"], str) assert isinstance(abs["matin"], bool) assert isinstance(abs["estabs"], bool) assert isinstance(abs["estjust"], bool) assert isinstance(abs["description"], str) assert isinstance(abs["begin"], str) assert isinstance(abs["end"], str) assert abs["begin"] < abs["end"] def test_abs_groupe_etat(api_headers): """ Test 'abs_groupe_etat' Routes : - /absences/abs_group_etat/<int:group_id> - /absences/abs_group_etat/group_id/<int:group_id>/date_debut/<string:date_debut>/date_fin/<string:date_fin> """ group_id = 1 r = requests.get( f"{API_URL}/absences/abs_group_etat/{group_id}", headers=api_headers, verify=CHECK_CERTIFICATE, timeout=scu.SCO_TEST_API_TIMEOUT, ) assert r.status_code == 200 list_absences = r.json() assert isinstance(list_absences, list) list_id_etu = [] for etu in list_absences: list_id_etu.append(etu["etudid"]) assert verify_fields(etu, ABSENCES_GROUP_ETAT_FIELDS) is True assert isinstance(etu["etudid"], int) assert isinstance(etu["list_abs"], list) list_abs = etu["list_abs"] for abs in list_abs: assert verify_fields(abs, ABSENCES_FIELDS) is True assert isinstance(abs["jour"], str) assert isinstance(abs["matin"], bool) assert isinstance(abs["estabs"], bool) assert isinstance(abs["estjust"], bool) assert isinstance(abs["description"], str) assert isinstance(abs["begin"], str) assert isinstance(abs["end"], str) assert abs["begin"] < abs["end"] # vérifie que chaque étudiant n'apparait qu'une seule fois assert len(set(list_id_etu)) == len(list_id_etu) date_debut = "Fri, 15 Apr 2021 00:00:00 GMT" date_fin = "Fri, 18 Apr 2022 00:00:00 GMT" r1 = requests.get( f"{API_URL}/absences/abs_group_etat/group_id/{group_id}/date_debut/{date_debut}/date_fin/{date_fin}", headers=api_headers, verify=CHECK_CERTIFICATE, timeout=scu.SCO_TEST_API_TIMEOUT, ) assert r1.status_code == 200 list_absences1 = r.json() assert isinstance(list_absences1, list) list_id_etu1 = [] for etu in list_absences1: list_id_etu1.append(etu["etudid"]) assert verify_fields(etu, ABSENCES_GROUP_ETAT_FIELDS) is True assert isinstance(etu["etudid"], int) assert isinstance(etu["list_abs"], list) list_abs1 = etu["list_abs"] for abs in list_abs1: assert verify_fields(abs, ABSENCES_FIELDS) is True assert isinstance(abs["jour"], str) assert isinstance(abs["matin"], bool) assert isinstance(abs["estabs"], bool) assert isinstance(abs["estjust"], bool) assert isinstance(abs["description"], str) assert isinstance(abs["begin"], str) assert isinstance(abs["end"], str) assert abs["begin"] < abs["end"] all_unique1 = True for id in list_id_etu1: if list_id_etu1.count(id) > 1: all_unique1 = False assert all_unique1 is True # XXX TODO # def reset_etud_abs(api_headers): # """ # Test 'reset_etud_abs' # # Routes : # - /absences/etudid/<int:etudid>/list_abs/<string:list_abs>/reset_etud_abs # - /absences/etudid/<int:etudid>/list_abs/<string:list_abs>/reset_etud_abs/only_not_just # - /absences/etudid/<int:etudid>/list_abs/<string:list_abs>/reset_etud_abs/only_just # """ # list_abs = [] # r = requests.get( # f"{API_URL}/absences/etudid/{ETUDID}/list_abs/{list_abs}/reset_etud_abs", # headers=api_headers, # verify=CHECK_CERTIFICATE, # timeout=scu.SCO_TEST_API_TIMEOUT, # ) # assert r.status_code == 200 # # r_only_not_just = requests.get( # f"{API_URL}/absences/etudid/{ETUDID}/list_abs/{list_abs}/reset_etud_abs/only_not_just", # headers=api_headers, # verify=CHECK_CERTIFICATE, # timeout=scu.SCO_TEST_API_TIMEOUT, # ) # assert r.status_code == 200 # # # r_only_just = requests.get( # f"{API_URL}/absences/etudid/{ETUDID}/list_abs/{list_abs}/reset_etud_abs/only_just", # headers=api_headers, # verify=CHECK_CERTIFICATE, # timeout=scu.SCO_TEST_API_TIMEOUT, # ) # assert r.status_code == 200