agendas: really check publication date for recurring events (#54430)

This commit is contained in:
Valentin Deniaud 2021-05-31 14:22:41 +02:00
parent e30d44cfa2
commit 4e89a1d568
3 changed files with 11 additions and 7 deletions

View File

@ -685,7 +685,10 @@ class Agenda(models.Model):
recurring_events = self.prefetched_recurring_events
exceptions = self.prefetched_exceptions
else:
recurring_events = self.event_set.filter(recurrence_rule__isnull=False)
recurring_events = self.event_set.filter(
Q(publication_date__isnull=True) | Q(publication_date__lte=localtime(now()).date()),
recurrence_rule__isnull=False,
)
exceptions = self.get_recurrence_exceptions(min_start, max_start)
for event in recurring_events:
@ -1520,8 +1523,6 @@ class Event(models.Model):
url=self.url,
)
if self.publication_date and self.publication_date > min_datetime.date():
min_datetime = make_aware(datetime.datetime.combine(self.publication_date, datetime.time(0, 0)))
if self.recurrence_end_date:
self.recurrence_rule['until'] = datetime.datetime.combine(
self.recurrence_end_date, datetime.time(0, 0)

View File

@ -587,7 +587,10 @@ class Agendas(APIView):
cancelled=False,
start_datetime__gte=localtime(now()),
).order_by()
recurring_event_queryset = Event.objects.filter(recurrence_rule__isnull=False)
recurring_event_queryset = Event.objects.filter(
Q(publication_date__isnull=True) | Q(publication_date__lte=localtime(now()).date()),
recurrence_rule__isnull=False,
)
exceptions_desk = Desk.objects.filter(slug='_exceptions_holder').prefetch_related(
'unavailability_calendars'
)

View File

@ -6364,14 +6364,14 @@ def test_recurring_events_api(app, user, freezer):
base_event.publication_date = now().replace(day=27)
base_event.save()
resp = app.get('/api/agenda/%s/datetimes/' % agenda.slug)
assert len(resp.json['data']) == 2
assert resp.json['data'][0]['id'] == 'abc:2021-02-02-1305'
assert len(resp.json['data']) == 0
# events follow agenda display template
Event.objects.all().update(publication_date=None)
agenda.event_display_template = '{{ event.label }} - {{ event.start_datetime }}'
agenda.save()
resp = app.get('/api/agenda/%s/datetimes/' % agenda.slug)
assert resp.json['data'][0]['text'] == 'Test - Feb. 2, 2021, 1:05 p.m.'
assert resp.json['data'][0]['text'] == 'Test - Jan. 19, 2021, 1:05 p.m.'
def test_recurring_events_api_various_times(app, user, mock_now):