Projet

Général

Profil

0001-api-order-desks-by-identifier-48065.patch

Emmanuel Cazenave, 27 octobre 2020 16:06

Télécharger (5,5 ko)

Voir les différences:

Subject: [PATCH] api: order desks by identifier (#48065)

 chrono/api/views.py |  2 +-
 tests/test_api.py   | 94 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 95 insertions(+), 1 deletion(-)
chrono/api/views.py
136 136
        )
137 137
        for time_period_desk, time_period_exceptions in itertools.groupby(
138 138
            TimePeriodException.objects.filter(desk__agenda__in=agendas).order_by(
139
                'desk', 'start_datetime', 'end_datetime'
139
                'desk_id', 'start_datetime', 'end_datetime'
140 140
            ),
141 141
            key=lambda time_period: time_period.desk,
142 142
        )
tests/test_api.py
3586 3586
    assert len(resp.json['data']) == 3
3587 3587

  
3588 3588

  
3589
def test_virtual_agendas_meetings_datetimes_api_with_similar_desk(app):
3590
    agenda_foo = Agenda.objects.create(
3591
        label=u'Agenda Foo', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=3
3592
    )
3593
    meeting_type_foo = MeetingType.objects.create(agenda=agenda_foo, label='Meeting Type', duration=30)
3594
    test_1st_weekday = (now()).weekday() + 1 % 7
3595
    test_2nd_weekday = localtime(now()).weekday() + 2 % 7
3596
    test_3rd_weekday = (now()).weekday() + 3 % 7
3597

  
3598
    desk_foo = Desk.objects.create(agenda=agenda_foo, label='Desk 1')
3599
    TimePeriod.objects.create(
3600
        weekday=test_1st_weekday,
3601
        start_time=datetime.time(10, 0),
3602
        end_time=datetime.time(12, 0),
3603
        desk=desk_foo,
3604
    )
3605
    TimePeriod.objects.create(
3606
        weekday=test_2nd_weekday,
3607
        start_time=datetime.time(10, 0),
3608
        end_time=datetime.time(12, 0),
3609
        desk=desk_foo,
3610
    )
3611
    TimePeriod.objects.create(
3612
        weekday=test_3rd_weekday,
3613
        start_time=datetime.time(10, 0),
3614
        end_time=datetime.time(12, 0),
3615
        desk=desk_foo,
3616
    )
3617

  
3618
    agenda_bar = Agenda.objects.create(
3619
        label=u'Agenda Bar', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=3
3620
    )
3621
    meeting_type_bar = MeetingType.objects.create(agenda=agenda_bar, label='Meeting Type', duration=30)
3622
    desk_bar = Desk.objects.create(agenda=agenda_bar, label='Desk 1')
3623
    TimePeriod.objects.create(
3624
        weekday=test_1st_weekday,
3625
        start_time=datetime.time(10, 0),
3626
        end_time=datetime.time(12, 0),
3627
        desk=desk_bar,
3628
    )
3629
    TimePeriod.objects.create(
3630
        weekday=test_2nd_weekday,
3631
        start_time=datetime.time(10, 0),
3632
        end_time=datetime.time(12, 0),
3633
        desk=desk_bar,
3634
    )
3635
    TimePeriod.objects.create(
3636
        weekday=test_3rd_weekday,
3637
        start_time=datetime.time(10, 0),
3638
        end_time=datetime.time(12, 0),
3639
        desk=desk_bar,
3640
    )
3641

  
3642
    virtual_agenda = Agenda.objects.create(
3643
        label=u'Agenda Virtual', kind='virtual', minimal_booking_delay=1, maximal_booking_delay=3
3644
    )
3645
    VirtualMember.objects.create(virtual_agenda=virtual_agenda, real_agenda=agenda_foo)
3646
    VirtualMember.objects.create(virtual_agenda=virtual_agenda, real_agenda=agenda_bar)
3647

  
3648
    # 4 slots each day * 3 days
3649
    foo_api_url = '/api/agenda/%s/meetings/%s/datetimes/' % (agenda_foo.slug, meeting_type_bar.slug)
3650
    resp = app.get(foo_api_url)
3651
    assert len(resp.json['data']) == 12
3652
    # same thing bar agenda
3653
    bar_api_url = '/api/agenda/%s/meetings/%s/datetimes/' % (agenda_foo.slug, meeting_type_bar.slug)
3654
    resp = app.get(bar_api_url)
3655
    assert len(resp.json['data']) == 12
3656
    # same thing on the virtual agenda
3657
    virtual_api_url = '/api/agenda/%s/meetings/%s/datetimes/' % (virtual_agenda.slug, meeting_type_bar.slug)
3658
    resp = app.get(virtual_api_url)
3659
    assert len(resp.json['data']) == 12
3660

  
3661
    # exclude first day
3662
    start = (now() + datetime.timedelta(days=1)).replace(hour=0, minute=0, second=0, microsecond=0)
3663
    end = (now() + datetime.timedelta(days=1)).replace(hour=23, minute=59, second=59, microsecond=0)
3664
    TimePeriodException.objects.create(start_datetime=start, end_datetime=end, desk=desk_foo)
3665
    TimePeriodException.objects.create(start_datetime=start, end_datetime=end, desk=desk_bar)
3666
    # exclude second day
3667
    start = (now() + datetime.timedelta(days=2)).replace(hour=0, minute=0, second=0, microsecond=0)
3668
    end = (now() + datetime.timedelta(days=2)).replace(hour=23, minute=59, second=59, microsecond=0)
3669
    TimePeriodException.objects.create(start_datetime=start, end_datetime=end, desk=desk_foo)
3670
    TimePeriodException.objects.create(start_datetime=start, end_datetime=end, desk=desk_bar)
3671

  
3672
    # 4 slots each day * 1 day
3673
    resp = app.get(foo_api_url)
3674
    assert len(resp.json['data']) == 4
3675
    # same thing bar agenda
3676
    resp = app.get(bar_api_url)
3677
    assert len(resp.json['data']) == 4
3678
    # same thing on the virtual agenda
3679
    resp = app.get(virtual_api_url)
3680
    assert len(resp.json['data']) == 4
3681

  
3682

  
3589 3683
def test_virtual_agendas_meetings_datetimes_delays_api(app, mock_now):
3590 3684
    foo_agenda = Agenda.objects.create(label='Foo Meeting', kind='meetings', maximal_booking_delay=7)
3591 3685
    MeetingType.objects.create(agenda=foo_agenda, label='Meeting Type', duration=30)
3592
-