api: ignore guardian_external_id when child has no custody agenda (#66828)

This commit is contained in:
Valentin Deniaud 2022-06-30 11:24:25 +02:00
parent f45fd14676
commit 7ba7ace9de
3 changed files with 17 additions and 7 deletions

View File

@ -824,7 +824,12 @@ class Agenda(models.Model):
@staticmethod
def filter_for_guardian(qs, guardian_external_id, child_external_id):
agendas = SharedCustodyAgenda.objects.filter(children__user_external_id=child_external_id)
agendas = SharedCustodyAgenda.objects.filter(children__user_external_id=child_external_id).order_by(
'-date_start'
)
if not agendas:
return qs
qs = (
qs.annotate(week=ExtractWeek('start_datetime'))
.annotate(week_number=Cast('week', models.IntegerField()))
@ -833,7 +838,7 @@ class Agenda(models.Model):
previous_date_start = None
filtered_qs = Event.objects.none()
for agenda in agendas.order_by('-date_start'):
for agenda in agendas:
filtered_qs |= Agenda.filter_for_custody_agenda(
qs, agenda, guardian_external_id, date_end=previous_date_start
)

View File

@ -720,6 +720,13 @@ def test_datetimes_multiple_agendas_shared_custody(app):
)
assert len(resp.json['data']) == 2
# guardian_external_id parameter is ignored if there is no custody agenda for child
resp = app.get(
'/api/agendas/datetimes/?guardian_external_id=xxx',
params={'subscribed': 'all', 'user_external_id': 'child_id'},
)
assert len(resp.json['data']) == 2
# add shared custody agenda
father = Person.objects.create(user_external_id='father_id', first_name='John', last_name='Doe')
mother = Person.objects.create(user_external_id='mother_id', first_name='Jane', last_name='Doe')

View File

@ -641,15 +641,13 @@ def test_api_events_fillslots_multiple_agendas_shared_custody(app, user):
assert resp.json['err'] == 1
assert resp.json['err_desc'] == 'Some events are outside guardian custody: first-agenda@event-thursday'
# unknown child
child.delete()
# guardian_external_id parameter is ignored if there is no custody agenda for child
agenda.delete()
resp = app.post_json(
'/api/agendas/events/fillslots/?subscribed=all&guardian_external_id=mother_id',
params=params,
status=400,
)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == 'Some events are outside guardian custody: first-agenda@event-thursday'
assert resp.json['booking_count'] == 1
@pytest.mark.freeze_time('2022-03-07 14:00') # Monday of 10th week