86 lines
3.7 KiB
Python
86 lines
3.7 KiB
Python
import datetime
|
|
import pytest
|
|
|
|
import django
|
|
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
|
|
|
|
pytestmark = pytest.mark.django_db
|
|
|
|
|
|
def test_meeting_type_slug_migration():
|
|
if connection.vendor == 'sqlite' and django.VERSION > (1, 11, 0):
|
|
pytest.skip('SQLite schema editor cannot be used while foreign key constraint checks are enabled.')
|
|
return
|
|
executor = MigrationExecutor(connection)
|
|
migrate_from = [('agendas', '0011_meetingtype_slug')]
|
|
migrate_to = [('agendas', '0013_auto_20161028_1603')]
|
|
executor.migrate(migrate_from)
|
|
executor.loader.build_graph()
|
|
|
|
old_apps = executor.loader.project_state(migrate_from).apps
|
|
OldAgenda = old_apps.get_model('agendas', 'Agenda')
|
|
OldMeetingType = old_apps.get_model('agendas', 'MeetingType')
|
|
|
|
agenda = OldAgenda(label=u'Foo bar')
|
|
agenda.save()
|
|
|
|
meeting_type = OldMeetingType(agenda=agenda, label=u'Baz')
|
|
meeting_type.save()
|
|
|
|
executor.migrate(migrate_to)
|
|
|
|
assert MeetingType.objects.get(id=meeting_type.id).slug == 'baz'
|
|
|
|
|
|
def test_timeperiod_data_migrations():
|
|
if connection.vendor == 'sqlite' and django.VERSION > (1, 11, 0):
|
|
pytest.skip('SQLite schema editor cannot be used while foreign key constraint checks are enabled.')
|
|
return
|
|
executor = MigrationExecutor(connection)
|
|
app = 'agendas'
|
|
migrate_from = [(app, '0016_desk')]
|
|
migrate_to = [(app, '0018_event_desk')]
|
|
executor.migrate(migrate_from)
|
|
old_apps = executor.loader.project_state(migrate_from).apps
|
|
Agenda = old_apps.get_model(app, 'Agenda')
|
|
MeetingType = old_apps.get_model(app, 'MeetingType')
|
|
TimePeriod = old_apps.get_model(app, 'TimePeriod')
|
|
Event = old_apps.get_model(app, 'Event')
|
|
agenda = Agenda.objects.create(label='foo', slug='foo', kind='meetings')
|
|
agenda2 = Agenda.objects.create(label='bar', slug='bar', kind='events')
|
|
TimePeriod.objects.create(agenda=agenda, weekday=1,
|
|
start_time=datetime.time(8, 0),
|
|
end_time=datetime.time(12, 0))
|
|
TimePeriod.objects.create(agenda=agenda, weekday=2,
|
|
start_time=datetime.time(8, 0),
|
|
end_time=datetime.time(10, 0))
|
|
TimePeriod.objects.create(agenda=agenda, weekday=3,
|
|
start_time=datetime.time(9, 0),
|
|
end_time=datetime.time(12, 0))
|
|
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=make_aware(datetime.datetime(2017, 5, 22, 9, 30)))
|
|
Event.objects.create(agenda=agenda, places=1, meeting_type=meeting_type,
|
|
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 10, 0)))
|
|
Event.objects.create(agenda=agenda2, places=5,
|
|
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
|
|
Agenda = new_apps.get_model(app, 'Agenda')
|
|
agenda = Agenda.objects.get(slug='foo')
|
|
TimePeriod = new_apps.get_model(app, 'TimePeriod')
|
|
for time_period in TimePeriod.objects.all():
|
|
assert time_period.desk.label == 'Guichet 1'
|
|
assert time_period.desk.slug == 'guichet-1'
|
|
|
|
Event = new_apps.get_model(app, 'Event')
|
|
for event in Event.objects.filter(agenda=agenda):
|
|
assert event.desk.label == 'Guichet 1'
|
|
assert event.desk.slug == 'guichet-1'
|