Projet

Général

Profil

0001-manager-fix-exception-queryset-on-settings-page-5071.patch

Lauréline Guérin, 01 février 2021 09:17

Télécharger (2,92 ko)

Voir les différences:

Subject: [PATCH] manager: fix exception queryset on settings page (#50714)

 chrono/agendas/models.py |  5 ++++-
 tests/test_manager.py    | 22 ++++++++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)
chrono/agendas/models.py
545 545
            raise ValueError('does not work with kind %r' % self.kind)
546 546

  
547 547
        self.prefetched_desks = desks.prefetch_related('timeperiod_set', 'unavailability_calendars')
548
        unavailability_calendar_ids = UnavailabilityCalendar.objects.filter(
549
            desks__in=self.prefetched_desks
550
        ).values('pk')
548 551
        all_desks_exceptions = TimePeriodException.objects.filter(
549
            Q(desk__in=self.prefetched_desks) | Q(unavailability_calendar__desks__in=self.prefetched_desks)
552
            Q(desk__in=self.prefetched_desks) | Q(unavailability_calendar__in=unavailability_calendar_ids)
550 553
        ).select_related('source')
551 554
        for desk in self.prefetched_desks:
552 555
            uc_ids = [uc.pk for uc in desk.unavailability_calendars.all()]
tests/test_manager.py
5158 5158
    assert 'One or several bookings overlap with exceptions.' in resp.text
5159 5159

  
5160 5160

  
5161
def test_unavailability_calendar_exception_in_desk(app, admin_user):
5162
    unavailability_calendar = UnavailabilityCalendar.objects.create(label='Calendar')
5163
    start_datetime = localtime(now()) + datetime.timedelta(days=1)
5164
    TimePeriodException.objects.create(
5165
        unavailability_calendar=unavailability_calendar,
5166
        start_datetime=start_datetime,
5167
        end_datetime=localtime(now()) + datetime.timedelta(days=2),
5168
        label='exception foo bar',
5169
    )
5170
    agenda = Agenda.objects.create(label='Agenda', kind='meetings')
5171
    desk1 = Desk.objects.create(agenda=agenda, label='desk 1')
5172
    desk2 = Desk.objects.create(agenda=agenda, label='desk 2')
5173
    desk3 = Desk.objects.create(agenda=agenda, label='desk 3')
5174
    desk1.unavailability_calendars.add(unavailability_calendar)
5175
    desk2.unavailability_calendars.add(unavailability_calendar)
5176
    desk3.unavailability_calendars.add(unavailability_calendar)
5177

  
5178
    app = login(app)
5179
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
5180
    assert resp.text.count('exception foo bar') == 3  # displayed just once per desk
5181

  
5182

  
5161 5183
def test_deactivate_unavailability_calendar_in_desk(app, admin_user):
5162 5184
    app = login(app)
5163 5185
    unavailability_calendar = UnavailabilityCalendar.objects.create(label='Calendar')
5164
-