api: fix date_start & meetings/datetimes (#52995)

This commit is contained in:
Lauréline Guérin 2021-04-15 09:55:11 +02:00
parent a8152457d4
commit 0af9b0b63d
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 29 additions and 6 deletions

View File

@ -996,6 +996,10 @@ class SharedTimePeriod(object):
event_datetime = make_aware(make_naive(real_min_datetime)).replace(
hour=self.start_time.hour, minute=self.start_time.minute, second=0, microsecond=0
)
# don't start before min_datetime
event_datetime = max(event_datetime, min_datetime)
# get slots
while event_datetime < max_datetime:
end_time = event_datetime + meeting_duration
next_time = event_datetime + duration
@ -1012,6 +1016,7 @@ class SharedTimePeriod(object):
event_datetime = make_aware(event_datetime)
next_time = event_datetime + duration
# don't end after max_datetime
if event_datetime > max_datetime:
break

View File

@ -5764,11 +5764,25 @@ def test_meetings_and_virtual_datetimes_date_filter(app):
resp = app.get(virtual_api_url, params=params)
assert len(resp.json['data']) == 20
params = {'date_start': (localtime(now()) + datetime.timedelta(days=2)).isoformat()}
params = {
'date_start': (localtime(now()) + datetime.timedelta(days=2))
.replace(hour=12, minute=0, second=0, microsecond=0)
.isoformat()
}
resp = app.get(foo_api_url, params=params)
assert len(resp.json['data']) == 20
assert len(resp.json['data']) == 16
resp = app.get(virtual_api_url, params=params)
assert len(resp.json['data']) == 20
assert len(resp.json['data']) == 16
params = {
'date_start': (localtime(now()) + datetime.timedelta(days=2))
.replace(hour=11, minute=0, second=0, microsecond=0)
.isoformat()
}
resp = app.get(foo_api_url, params=params)
assert len(resp.json['data']) == 18
resp = app.get(virtual_api_url, params=params)
assert len(resp.json['data']) == 18
# minimal_booking_delay (which exclude weekday1 and wekkday2 ) takes precedence
# 4 slots each day * 4 days
@ -5795,11 +5809,15 @@ def test_meetings_and_virtual_datetimes_date_filter(app):
resp = app.get(virtual_api_url, params=params)
assert len(resp.json['data']) == 20
params = {'date_end': (localtime(now()) + datetime.timedelta(days=6)).replace(hour=12).isoformat()}
params = {
'date_end': (localtime(now()) + datetime.timedelta(days=6))
.replace(hour=11, minute=0, second=0, microsecond=0)
.isoformat()
}
resp = app.get(foo_api_url, params=params)
assert len(resp.json['data']) == 24
assert len(resp.json['data']) == 22
resp = app.get(virtual_api_url, params=params)
assert len(resp.json['data']) == 24
assert len(resp.json['data']) == 22
# maximal_booking_delay (which exclude weekday5 and weekday6 ) takes precedence
# 4 slots each day * 4 days