Fix API: /group/<int:group_id>/etudiants/query

This commit is contained in:
Emmanuel Viennet 2022-08-10 07:24:54 +02:00
parent 8fa64476b6
commit ae2a56cad3
2 changed files with 19 additions and 15 deletions

View File

@ -136,20 +136,22 @@ def etud_in_group(group_id: int):
def etud_in_group_query(group_id: int): def etud_in_group_query(group_id: int):
"""Etudiants du groupe, filtrés par état""" """Etudiants du groupe, filtrés par état"""
etat = request.args.get("etat") etat = request.args.get("etat")
if etat not in {scu.INSCRIT, scu.DEMISSION, scu.DEF}: if etat not in {None, scu.INSCRIT, scu.DEMISSION, scu.DEF}:
return json_error(404, "etat: valeur invalide") return json_error(404, "etat: valeur invalide")
query = GroupDescr.query.filter_by(id=group_id) query = GroupDescr.query.filter_by(id=group_id)
if g.scodoc_dept: if g.scodoc_dept:
query = ( query = (
query.join(Partition).join(FormSemestre).filter_by(dept_id=g.scodoc_dept_id) query.join(Partition).join(FormSemestre).filter_by(dept_id=g.scodoc_dept_id)
) )
group = query.first_or_404() # just tro ckeck that group exists in accessible dept group = query.first_or_404() # just to ckeck that group exists in accessible dept
query = (
Identite.query.join(FormSemestreInscription) query = Identite.query.join(FormSemestreInscription).filter_by(
.filter_by(formsemestre_id=group.partition.formsemestre_id, etat=etat) formsemestre_id=group.partition.formsemestre_id
.join(group_membership)
.filter_by(group_id=group_id)
) )
if etat is not None:
query = query.filter_by(etat=etat)
query = query.join(group_membership).filter_by(group_id=group_id)
return jsonify([etud.to_dict_short() for etud in query]) return jsonify([etud.to_dict_short() for etud in query])

View File

@ -134,10 +134,10 @@ def test_etud_in_group(api_headers):
- /group/<int:group_id>/etudiants/query?etat=<string:etat> - /group/<int:group_id>/etudiants/query?etat=<string:etat>
""" """
group_id = 1 group_id = 1
etudiants = GET(f"/group/{group_id}/etudiants", headers=api_headers) etuds = GET(f"/group/{group_id}/etudiants", headers=api_headers)
assert isinstance(etudiants, list) assert isinstance(etuds, list)
for etud in etudiants: for etud in etuds:
assert verify_fields(etud, PARTITION_GROUPS_ETUD_FIELDS) assert verify_fields(etud, PARTITION_GROUPS_ETUD_FIELDS)
assert isinstance(etud["id"], int) assert isinstance(etud["id"], int)
assert isinstance(etud["dept_id"], int) assert isinstance(etud["dept_id"], int)
@ -148,12 +148,14 @@ def test_etud_in_group(api_headers):
assert isinstance(etud["code_nip"], str) assert isinstance(etud["code_nip"], str)
assert isinstance(etud["code_ine"], str) assert isinstance(etud["code_ine"], str)
# query sans filtre:
etuds_query = GET(f"/group/{group_id}/etudiants/query", headers=api_headers)
assert etuds_query == etuds
etat = "I" etat = "I"
etudiants = GET( etuds = GET(f"/group/{group_id}/etudiants/query?etat={etat}", headers=api_headers)
f"/group/{group_id}/etudiants/query?etat={etat}", headers=api_headers assert isinstance(etuds, list)
) for etud in etuds:
assert isinstance(etudiants, list)
for etud in etudiants:
assert verify_fields(etud, PARTITION_GROUPS_ETUD_FIELDS) assert verify_fields(etud, PARTITION_GROUPS_ETUD_FIELDS)
assert isinstance(etud["id"], int) assert isinstance(etud["id"], int)
assert isinstance(etud["dept_id"], int) assert isinstance(etud["dept_id"], int)