Projet

Général

Profil

0001-agendas-read_only-property-for-exception-source-5067.patch

Lauréline Guérin, 02 février 2021 10:59

Télécharger (3,72 ko)

Voir les différences:

Subject: [PATCH] agendas: read_only property for exception & source (#50672)

 chrono/agendas/models.py |  8 ++++++--
 chrono/manager/views.py  |  2 +-
 tests/test_agendas.py    | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 41 insertions(+), 3 deletions(-)
chrono/agendas/models.py
550 550
        ).values('pk')
551 551
        all_desks_exceptions = TimePeriodException.objects.filter(
552 552
            Q(desk__in=self.prefetched_desks) | Q(unavailability_calendar__in=unavailability_calendar_ids)
553
        ).select_related('source')
553
        )
554 554
        for desk in self.prefetched_desks:
555 555
            uc_ids = [uc.pk for uc in desk.unavailability_calendars.all()]
556 556
            desk.prefetched_exceptions = [
......
1687 1687

  
1688 1688
    @property
1689 1689
    def read_only(self):
1690
        return self.source and self.source.settings_slug or self.unavailability_calendar_id
1690
        if self.source_id:
1691
            return True
1692
        if self.unavailability_calendar_id:
1693
            return True
1694
        return False
1691 1695

  
1692 1696
    class Meta:
1693 1697
        ordering = ['start_datetime']
chrono/manager/views.py
2063 2063
    def get_queryset(self):
2064 2064
        return self.model.objects.filter(
2065 2065
            Q(desk=self.desk) | Q(unavailability_calendar__desks=self.desk), end_datetime__gte=now()
2066
        ).select_related('source')
2066
        )
2067 2067

  
2068 2068
    def get_context_data(self, **kwargs):
2069 2069
        context = super(TimePeriodExceptionListView, self).get_context_data(**kwargs)
tests/test_agendas.py
872 872
    assert common_timeperiod.end_time == datetime.time(18, 0)
873 873

  
874 874

  
875
def test_exception_read_only():
876
    agenda = Agenda.objects.create(label='Agenda', kind='meetings')
877
    desk = Desk.objects.create(agenda=agenda, label='Desk')
878
    unavailability_calendar = UnavailabilityCalendar.objects.create(label='Calendar')
879

  
880
    source1 = TimePeriodExceptionSource.objects.create(desk=desk, ics_url='http://example.com/sample.ics')
881
    source2 = TimePeriodExceptionSource.objects.create(
882
        desk=desk,
883
        ics_filename='sample.ics',
884
        ics_file=ContentFile(ICS_SAMPLE_WITH_DURATION, name='sample.ics'),
885
    )
886
    source3 = TimePeriodExceptionSource.objects.create(
887
        desk=desk, settings_slug='slug', settings_label='Foo Bar', enabled=True
888
    )
889

  
890
    exception = TimePeriodException.objects.create(
891
        desk=desk,
892
        start_datetime=now() - datetime.timedelta(days=2),
893
        end_datetime=now() - datetime.timedelta(days=1),
894
    )
895
    assert exception.read_only is False
896

  
897
    for source in [source1, source2, source3]:
898
        exception.source = source
899
        exception.save()
900
        assert exception.read_only is True
901

  
902
    exception.source = None
903
    exception.desk = None
904
    exception.unavailability_calendar = unavailability_calendar
905
    exception.save()
906
    assert exception.read_only is True
907

  
908

  
875 909
def test_desk_exceptions_within_two_weeks():
876 910
    def set_prefetched_exceptions(desk):
877 911
        desk.prefetched_exceptions = TimePeriodException.objects.filter(
878
-