misc: always use timezone-aware datetimes (#20926)
This commit is contained in:
parent
6004272376
commit
b8b130e4f7
|
@ -422,7 +422,7 @@ class Desk(models.Model):
|
|||
}
|
||||
|
||||
def get_exceptions_within_two_weeks(self):
|
||||
in_two_weeks = datetime.datetime.today() + datetime.timedelta(days=14)
|
||||
in_two_weeks = make_aware(datetime.datetime.today() + datetime.timedelta(days=14))
|
||||
exceptions = self.timeperiodexception_set.filter(
|
||||
end_datetime__gte=now(), end_datetime__lte=in_two_weeks)
|
||||
if exceptions.exists():
|
||||
|
|
|
@ -156,17 +156,19 @@ class Datetimes(GenericAPIView):
|
|||
|
||||
if agenda.minimal_booking_delay:
|
||||
entries = entries.filter(
|
||||
start_datetime__gte=localtime(now() + datetime.timedelta(days=agenda.minimal_booking_delay)).date())
|
||||
start_datetime__gte=localtime(now() + datetime.timedelta(days=agenda.minimal_booking_delay)).replace(hour=0, minute=0))
|
||||
|
||||
if agenda.maximal_booking_delay:
|
||||
entries = entries.filter(
|
||||
start_datetime__lt=localtime(now() + datetime.timedelta(days=agenda.maximal_booking_delay)).date())
|
||||
start_datetime__lt=localtime(now() + datetime.timedelta(days=agenda.maximal_booking_delay)).replace(hour=0, minute=0))
|
||||
|
||||
if 'date_start' in request.GET:
|
||||
entries = entries.filter(start_datetime__gte=parse_date(request.GET['date_start']))
|
||||
entries = entries.filter(start_datetime__gte=make_aware(
|
||||
datetime.datetime.combine(parse_date(request.GET['date_start']), datetime.time(0, 0))))
|
||||
|
||||
if 'date_end' in request.GET:
|
||||
entries = entries.filter(start_datetime__lt=parse_date(request.GET['date_end']))
|
||||
entries = entries.filter(start_datetime__lt=make_aware(
|
||||
datetime.datetime.combine(parse_date(request.GET['date_end']), datetime.time(0, 0))))
|
||||
|
||||
response = {'data': [{'id': x.id,
|
||||
'text': unicode(x),
|
||||
|
|
|
@ -19,6 +19,7 @@ import datetime
|
|||
|
||||
from django import forms
|
||||
from django.forms import ValidationError
|
||||
from django.utils.timezone import make_aware
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from chrono.agendas.models import (Event, MeetingType, TimePeriod, Desk,
|
||||
|
@ -146,7 +147,7 @@ class ImportEventsForm(forms.Form):
|
|||
'%s %s' % tuple(csvline[:2]), datetime_fmt)
|
||||
except ValueError:
|
||||
continue
|
||||
event.start_datetime = event_datetime
|
||||
event.start_datetime = make_aware(event_datetime)
|
||||
break
|
||||
else:
|
||||
raise ValidationError(_('Invalid file format. (date/time format, line %d)') % (i+1))
|
||||
|
|
|
@ -722,7 +722,7 @@ def test_agenda_api_date_range(app, some_data):
|
|||
for event in day_events:
|
||||
event_dt = datetime.datetime.combine(
|
||||
day, datetime.datetime.strptime(event, '%H:%M').time())
|
||||
Event.objects.create(agenda=agenda2, start_datetime=event_dt, places=2)
|
||||
Event.objects.create(agenda=agenda2, start_datetime=make_aware(event_dt), places=2)
|
||||
|
||||
params = {'date_start': base_date.isoformat()}
|
||||
resp = app.get('/api/agenda/%s/datetimes/' % agenda2.slug, params=params)
|
||||
|
@ -935,25 +935,26 @@ def test_agenda_meeting_api_exception(app, meetings_agenda, user):
|
|||
desk = meetings_agenda.desk_set.first()
|
||||
# test exception at the lowest limit
|
||||
excp1 = TimePeriodException.objects.create(
|
||||
desk=desk, start_datetime=datetime.datetime(2017, 5, 22, 10, 00),
|
||||
end_datetime=datetime.datetime(2017, 5, 22, 12, 00))
|
||||
desk=desk, start_datetime=make_aware(datetime.datetime(2017, 5, 22, 10, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2017, 5, 22, 12, 0)))
|
||||
resp2 = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id)
|
||||
assert len(resp.json['data']) == len(resp2.json['data']) + 4
|
||||
|
||||
# test exception at the highest limit
|
||||
excp1.end_datetime = datetime.datetime(2017, 5, 22, 11, 00)
|
||||
excp1.end_datetime = make_aware(datetime.datetime(2017, 5, 22, 11, 0))
|
||||
excp1.save()
|
||||
resp2 = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id)
|
||||
assert len(resp.json['data']) == len(resp2.json['data']) + 2
|
||||
|
||||
# add an exception with an end datetime less than excp1 end datetime
|
||||
# and make sure that excp1 end datetime preveil
|
||||
excp1.end_datetime = datetime.datetime(2017, 5, 23, 11, 00)
|
||||
excp1.end_datetime = make_aware(datetime.datetime(2017, 5, 23, 11, 0))
|
||||
excp1.save()
|
||||
|
||||
TimePeriodException.objects.create(
|
||||
desk=excp1.desk, start_datetime=datetime.datetime(2017, 5, 22, 15, 00),
|
||||
end_datetime=datetime.datetime(2017, 5, 23, 9, 00))
|
||||
desk=excp1.desk,
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 15, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2017, 5, 23, 9, 0)))
|
||||
|
||||
resp2 = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id)
|
||||
assert len(resp.json['data']) == len(resp2.json['data']) + 6
|
||||
|
@ -969,8 +970,9 @@ def test_agenda_meeting_api_exception(app, meetings_agenda, user):
|
|||
|
||||
# try to booking just after an exception is set
|
||||
TimePeriodException.objects.create(
|
||||
desk=desk2, start_datetime=datetime.datetime(2017, 5, 22, 9, 00),
|
||||
end_datetime=datetime.datetime(2017, 5, 22, 12, 00))
|
||||
desk=desk2,
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 9, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2017, 5, 22, 12, 0)))
|
||||
booking_url = resp3.json['data'][0]['api']['fillslot_url']
|
||||
resp = app.post(booking_url)
|
||||
assert resp.json['err'] == 1
|
||||
|
@ -983,8 +985,9 @@ def test_agenda_meeting_api_in_between_exceptions(app, meetings_agenda, user):
|
|||
desk = meetings_agenda.desk_set.first()
|
||||
# test exception at the lowest limit
|
||||
TimePeriodException.objects.create(
|
||||
desk=desk, start_datetime=datetime.datetime(2017, 5, 22, 10, 00),
|
||||
end_datetime=datetime.datetime(2017, 5, 22, 12, 00))
|
||||
desk=desk,
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 10, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2017, 5, 22, 12, 0)))
|
||||
resp2 = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id)
|
||||
assert len(resp.json['data']) == len(resp2.json['data']) + 4
|
||||
# exclude slots on 2017-05-30 and 2017-07-10
|
||||
|
@ -995,11 +998,13 @@ def test_agenda_meeting_api_in_between_exceptions(app, meetings_agenda, user):
|
|||
count_on_2017_07_10 = len([
|
||||
datum for datum in resp.json['data'] if datetime_from_str(datum['datetime']).date() == date_2017_07_10])
|
||||
TimePeriodException.objects.create(
|
||||
desk=desk, start_datetime=datetime.datetime(2017, 5, 30, 8, 00),
|
||||
end_datetime=datetime.datetime(2017, 5, 30, 18, 00))
|
||||
desk=desk,
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 30, 8, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2017, 5, 30, 18, 0)))
|
||||
TimePeriodException.objects.create(
|
||||
desk=desk, start_datetime=datetime.datetime(2017, 7, 10, 8, 00),
|
||||
end_datetime=datetime.datetime(2017, 7, 10, 18, 00))
|
||||
desk=desk,
|
||||
start_datetime=make_aware(datetime.datetime(2017, 7, 10, 8, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2017, 7, 10, 18, 0)))
|
||||
resp3 = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id)
|
||||
assert len(resp2.json['data']) == len(resp3.json['data']) + count_on_2017_05_30 + count_on_2017_07_10
|
||||
assert len([datum for datum in resp3.json['data'] if datetime_from_str(datum['datetime']).date() == date_2017_05_30]) == 0
|
||||
|
@ -1033,7 +1038,7 @@ def test_agenda_meeting_api_desk_info(app, meetings_agenda, user):
|
|||
resp = app.post(booking_url)
|
||||
assert resp.json['desk']['label'] == desk2.label
|
||||
assert resp.json['desk']['slug'] == desk2.slug
|
||||
# booking slot 3 and make sure desk 1 info are returened
|
||||
# booking slot 3 and make sure desk 1 info are returned
|
||||
resp = app.post(booking_url2)
|
||||
assert resp.json['desk']['label'] == desk.label
|
||||
assert resp.json['desk']['slug'] == desk.slug
|
||||
|
@ -1117,8 +1122,9 @@ def test_agenda_meeting_gcd_durations_and_exceptions(app, meetings_agenda, user)
|
|||
|
||||
# exception to just leave enough place for a single 20-minutes meeting.
|
||||
TimePeriodException.objects.create(
|
||||
desk=desk, start_datetime=datetime.datetime(2017, 5, 22, 10, 20),
|
||||
end_datetime=datetime.datetime(2017, 5, 22, 12, 00))
|
||||
desk=desk,
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 10, 20)),
|
||||
end_datetime=make_aware(datetime.datetime(2017, 5, 22, 12, 0)))
|
||||
|
||||
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type_20.id)
|
||||
assert len(resp.json['data']) == 1
|
||||
|
|
|
@ -3,6 +3,7 @@ import pytest
|
|||
|
||||
from django.db import connection
|
||||
from django.db.migrations.executor import MigrationExecutor
|
||||
from django.utils.timezone import make_aware
|
||||
|
||||
from chrono.agendas.models import MeetingType
|
||||
|
||||
|
@ -56,11 +57,11 @@ def test_timeperiod_data_migrations():
|
|||
meeting_type = MeetingType.objects.create(agenda=agenda, label='foo',
|
||||
slug='foo', duration=60)
|
||||
Event.objects.create(agenda=agenda, places=1, meeting_type=meeting_type,
|
||||
start_datetime=datetime.datetime(2017, 5, 22, 9, 30))
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 9, 30)))
|
||||
Event.objects.create(agenda=agenda, places=1, meeting_type=meeting_type,
|
||||
start_datetime=datetime.datetime(2017, 5, 22, 10, 0))
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 10, 0)))
|
||||
Event.objects.create(agenda=agenda2, places=5,
|
||||
start_datetime=datetime.datetime(2017, 5, 22, 10, 0))
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 10, 0)))
|
||||
executor.loader.build_graph()
|
||||
executor.migrate(migrate_to)
|
||||
new_apps = executor.loader.project_state(migrate_to).apps
|
||||
|
|
|
@ -8,6 +8,7 @@ import tempfile
|
|||
|
||||
import pytest
|
||||
from django.core.management import call_command
|
||||
from django.utils.timezone import make_aware
|
||||
|
||||
from chrono.agendas.models import (Agenda, Event, MeetingType, TimePeriod,
|
||||
Desk, TimePeriodException)
|
||||
|
@ -28,11 +29,13 @@ def test_import_export(app, some_data, meetings_agenda):
|
|||
# add exception to meeting agenda
|
||||
desk = meetings_agenda.desk_set.first()
|
||||
TimePeriodException.objects.create(
|
||||
desk=desk, start_datetime=datetime.datetime(2017, 5, 22, 8, 0),
|
||||
end_datetime=datetime.datetime(2017, 5, 22, 12, 30))
|
||||
desk=desk,
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 8, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2017, 5, 22, 12, 30)))
|
||||
TimePeriodException.objects.create(
|
||||
desk=desk, start_datetime=datetime.datetime(2017, 5, 22, 8, 0),
|
||||
end_datetime=datetime.datetime(2017, 5, 22, 12, 30))
|
||||
desk=desk,
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 8, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2017, 5, 22, 12, 30)))
|
||||
output = get_output_of_command('export_site')
|
||||
assert len(json.loads(output)['agendas']) == 3
|
||||
import_site(data={}, clean=True)
|
||||
|
@ -58,15 +61,16 @@ def test_import_export(app, some_data, meetings_agenda):
|
|||
|
||||
agenda1 = Agenda.objects.get(label=u'Foo bar')
|
||||
agenda2 = Agenda.objects.get(label=u'Foo bar Meeting')
|
||||
event = Event(agenda=agenda1, start_datetime= datetime.datetime.now(), places=10)
|
||||
event = Event(agenda=agenda1, start_datetime=make_aware(datetime.datetime.now()), places=10)
|
||||
event.save()
|
||||
desk, _ = Desk.objects.get_or_create(agenda=agenda2, label='Desk A', slug='desk-a')
|
||||
timeperiod = TimePeriod(weekday=2, desk=desk,
|
||||
start_time=datetime.time(10, 0), end_time=datetime.time(11, 0))
|
||||
timeperiod.save()
|
||||
exception = TimePeriodException(
|
||||
desk=desk, start_datetime=datetime.datetime(2017, 5, 22, 8, 0),
|
||||
end_datetime=datetime.datetime(2017, 5, 22, 12, 30))
|
||||
desk=desk,
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 8, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2017, 5, 22, 12, 30)))
|
||||
exception.save()
|
||||
|
||||
import_site(json.loads(output), overwrite=True)
|
||||
|
@ -75,14 +79,15 @@ def test_import_export(app, some_data, meetings_agenda):
|
|||
assert TimePeriod.objects.filter(id=timeperiod.id).count() == 0
|
||||
assert TimePeriodException.objects.filter(id=exception.id).count() == 0
|
||||
|
||||
event = Event(agenda=agenda1, start_datetime= datetime.datetime.now(), places=10)
|
||||
event = Event(agenda=agenda1, start_datetime=make_aware(datetime.datetime.now()), places=10)
|
||||
event.save()
|
||||
timeperiod = TimePeriod(weekday=2, desk=desk,
|
||||
start_time=datetime.time(10, 0), end_time=datetime.time(11, 0))
|
||||
timeperiod.save()
|
||||
exception = TimePeriodException(
|
||||
desk=desk, start_datetime=datetime.datetime(2017, 5, 22, 8, 0),
|
||||
end_datetime=datetime.datetime(2017, 5, 22, 12, 30))
|
||||
desk=desk,
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 8, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2017, 5, 22, 12, 30)))
|
||||
exception.save()
|
||||
import_site(json.loads(output), overwrite=False)
|
||||
assert Event.objects.filter(id=event.id).count() == 1
|
||||
|
|
|
@ -294,8 +294,9 @@ def test_add_event_as_manager(app, manager_user):
|
|||
def test_edit_event(app, admin_user):
|
||||
agenda = Agenda(label=u'Foo bar')
|
||||
agenda.save()
|
||||
event = Event(start_datetime=datetime.datetime(2016, 2, 15, 17, 0),
|
||||
places=20, agenda=agenda)
|
||||
event = Event(
|
||||
start_datetime=make_aware(datetime.datetime(2016, 2, 15, 17, 0)),
|
||||
places=20, agenda=agenda)
|
||||
event.save()
|
||||
app = login(app)
|
||||
resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
|
||||
|
@ -317,7 +318,7 @@ def test_edit_event_as_manager(app, manager_user):
|
|||
agenda = Agenda(label=u'Foo bar')
|
||||
agenda.view_role = manager_user.groups.all()[0]
|
||||
agenda.save()
|
||||
event = Event(start_datetime=datetime.datetime(2016, 2, 15, 17, 0),
|
||||
event = Event(start_datetime=make_aware(datetime.datetime(2016, 2, 15, 17, 0)),
|
||||
places=20, agenda=agenda)
|
||||
event.save()
|
||||
app = login(app, username='manager', password='manager')
|
||||
|
@ -341,7 +342,7 @@ def test_edit_event_as_manager(app, manager_user):
|
|||
def test_booked_places(app, admin_user):
|
||||
agenda = Agenda(label=u'Foo bar')
|
||||
agenda.save()
|
||||
event = Event(start_datetime=datetime.datetime(2016, 2, 15, 17, 0),
|
||||
event = Event(start_datetime=make_aware(datetime.datetime(2016, 2, 15, 17, 0)),
|
||||
places=10, agenda=agenda)
|
||||
event.save()
|
||||
Booking(event=event).save()
|
||||
|
@ -354,7 +355,7 @@ def test_booked_places(app, admin_user):
|
|||
def test_event_classes(app, admin_user):
|
||||
agenda = Agenda(label=u'Foo bar')
|
||||
agenda.save()
|
||||
event = Event(start_datetime=datetime.datetime(2016, 2, 15, 17, 0),
|
||||
event = Event(start_datetime=make_aware(datetime.datetime(2016, 2, 15, 17, 0)),
|
||||
places=10, agenda=agenda)
|
||||
event.save()
|
||||
for i in range(2):
|
||||
|
@ -380,7 +381,7 @@ def test_event_classes(app, admin_user):
|
|||
def test_delete_event(app, admin_user):
|
||||
agenda = Agenda(label=u'Foo bar')
|
||||
agenda.save()
|
||||
event = Event(start_datetime=datetime.datetime(2016, 2, 15, 17, 0),
|
||||
event = Event(start_datetime=make_aware(datetime.datetime(2016, 2, 15, 17, 0)),
|
||||
places=10, agenda=agenda)
|
||||
event.save()
|
||||
|
||||
|
@ -429,7 +430,7 @@ def test_delete_event_as_manager(app, manager_user):
|
|||
agenda = Agenda(label=u'Foo bar')
|
||||
agenda.edit_role = manager_user.groups.all()[0]
|
||||
agenda.save()
|
||||
event = Event(start_datetime=datetime.datetime(2016, 2, 15, 17, 0),
|
||||
event = Event(start_datetime=make_aware(datetime.datetime(2016, 2, 15, 17, 0)),
|
||||
places=10, agenda=agenda)
|
||||
event.save()
|
||||
|
||||
|
@ -777,7 +778,7 @@ def test_meetings_agenda_add_time_period_exception_when_booking_exists(app, admi
|
|||
TimePeriod.objects.create(weekday=1, desk=desk,
|
||||
start_time=datetime.time(10, 0), end_time=datetime.time(12, 0))
|
||||
event = Event.objects.create(agenda=agenda, places=1,
|
||||
start_datetime=datetime.datetime(2017, 5, 22, 10, 30))
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 10, 30)))
|
||||
Booking.objects.create(event=event)
|
||||
login(app)
|
||||
resp = app.get('/manage/agendas/%d/' % agenda.pk)
|
||||
|
@ -799,9 +800,9 @@ def test_meetings_agenda_add_time_period_exception_when_cancelled_booking_exists
|
|||
TimePeriod.objects.create(weekday=1, desk=desk,
|
||||
start_time=datetime.time(10, 0), end_time=datetime.time(12, 0))
|
||||
event = Event.objects.create(agenda=agenda, places=1,
|
||||
start_datetime=datetime.datetime(2017, 5, 22, 10, 30))
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 10, 30)))
|
||||
Booking.objects.create(event=event,
|
||||
cancellation_datetime=datetime.datetime(2017, 5, 20, 10, 30))
|
||||
cancellation_datetime=make_aware(datetime.datetime(2017, 5, 20, 10, 30)))
|
||||
login(app)
|
||||
resp = app.get('/manage/agendas/%d/' % agenda.pk)
|
||||
resp = resp.click('Add a time period exception')
|
||||
|
|
Loading…
Reference in New Issue