Projet

Général

Profil

0001-api-ignore-guardian_external_id-when-child-has-no-cu.patch

Valentin Deniaud, 06 juillet 2022 15:05

Télécharger (3,56 ko)

Voir les différences:

Subject: [PATCH] api: ignore guardian_external_id when child has no custody
 agenda (#66828)

 chrono/agendas/models.py                            | 9 +++++++--
 tests/api/datetimes/test_events_multiple_agendas.py | 7 +++++++
 tests/api/fillslot/test_events_multiple_agendas.py  | 8 +++-----
 3 files changed, 17 insertions(+), 7 deletions(-)
chrono/agendas/models.py
824 824

  
825 825
    @staticmethod
826 826
    def filter_for_guardian(qs, guardian_external_id, child_external_id):
827
        agendas = SharedCustodyAgenda.objects.filter(children__user_external_id=child_external_id)
827
        agendas = SharedCustodyAgenda.objects.filter(children__user_external_id=child_external_id).order_by(
828
            '-date_start'
829
        )
830
        if not agendas:
831
            return qs
832

  
828 833
        qs = (
829 834
            qs.annotate(week=ExtractWeek('start_datetime'))
830 835
            .annotate(week_number=Cast('week', models.IntegerField()))
......
833 838

  
834 839
        previous_date_start = None
835 840
        filtered_qs = Event.objects.none()
836
        for agenda in agendas.order_by('-date_start'):
841
        for agenda in agendas:
837 842
            filtered_qs |= Agenda.filter_for_custody_agenda(
838 843
                qs, agenda, guardian_external_id, date_end=previous_date_start
839 844
            )
tests/api/datetimes/test_events_multiple_agendas.py
720 720
    )
721 721
    assert len(resp.json['data']) == 2
722 722

  
723
    # guardian_external_id parameter is ignored if there is no custody agenda for child
724
    resp = app.get(
725
        '/api/agendas/datetimes/?guardian_external_id=xxx',
726
        params={'subscribed': 'all', 'user_external_id': 'child_id'},
727
    )
728
    assert len(resp.json['data']) == 2
729

  
723 730
    # add shared custody agenda
724 731
    father = Person.objects.create(user_external_id='father_id', first_name='John', last_name='Doe')
725 732
    mother = Person.objects.create(user_external_id='mother_id', first_name='Jane', last_name='Doe')
tests/api/fillslot/test_events_multiple_agendas.py
641 641
    assert resp.json['err'] == 1
642 642
    assert resp.json['err_desc'] == 'Some events are outside guardian custody: first-agenda@event-thursday'
643 643

  
644
    # unknown child
645
    child.delete()
644
    # guardian_external_id parameter is ignored if there is no custody agenda for child
645
    agenda.delete()
646 646
    resp = app.post_json(
647 647
        '/api/agendas/events/fillslots/?subscribed=all&guardian_external_id=mother_id',
648 648
        params=params,
649
        status=400,
650 649
    )
651
    assert resp.json['err'] == 1
652
    assert resp.json['err_desc'] == 'Some events are outside guardian custody: first-agenda@event-thursday'
650
    assert resp.json['booking_count'] == 1
653 651

  
654 652

  
655 653
@pytest.mark.freeze_time('2022-03-07 14:00')  # Monday of 10th week
656
-