505 lines
16 KiB
Python
505 lines
16 KiB
Python
import uuid
|
|
|
|
from django.db import connection
|
|
from django.db.migrations.executor import MigrationExecutor
|
|
|
|
|
|
def test_page_snapshot_with_old_card_cells_migration(transactional_db):
|
|
migrate_from = [('data', '0062_page_uuid')]
|
|
migrate_to = [('data', '0063_old_card_cells')]
|
|
|
|
executor = MigrationExecutor(connection)
|
|
old_apps = executor.loader.project_state(migrate_from).apps
|
|
executor.migrate(migrate_from)
|
|
|
|
pagesnapshot_class = old_apps.get_model('data', 'PageSnapshot')
|
|
|
|
snapshot = pagesnapshot_class.objects.create(
|
|
serialization={
|
|
'cells': [
|
|
{
|
|
'model': 'wcs.wcscardinfoscell',
|
|
'fields': {
|
|
'card_ids': '42,35',
|
|
'title_type': 'manual',
|
|
'custom_title': 'my-title',
|
|
'display_mode': 'card',
|
|
'without_user': True,
|
|
'custom_schema': {},
|
|
'only_for_user': True,
|
|
'carddef_reference': 'default:card_model_1',
|
|
'related_card_path': '',
|
|
'limit': 42,
|
|
'slug': 'my-card',
|
|
'order': 1,
|
|
'groups': [],
|
|
'public': True,
|
|
'condition': 'my-condition',
|
|
'placeholder': 'content',
|
|
'template_name': None,
|
|
'extra_css_class': '',
|
|
'last_update_timestamp': '2022-08-11T13:57:43.362Z',
|
|
'restricted_to_unlogged': False,
|
|
},
|
|
},
|
|
{
|
|
'model': 'wcs.wcscardscell',
|
|
'fields': {
|
|
'custom_title': 'my-other-title',
|
|
'without_user': False,
|
|
'only_for_user': False,
|
|
'carddef_reference': 'default:card_model_1',
|
|
'limit': 35,
|
|
'slug': 'my-other-card',
|
|
'order': 2,
|
|
'groups': [],
|
|
'public': True,
|
|
'condition': '',
|
|
'placeholder': 'content',
|
|
'template_name': None,
|
|
'extra_css_class': '',
|
|
'last_update_timestamp': '2022-08-12T07:19:18.541Z',
|
|
'restricted_to_unlogged': False,
|
|
},
|
|
},
|
|
],
|
|
}
|
|
)
|
|
|
|
executor = MigrationExecutor(connection)
|
|
executor.migrate(migrate_to)
|
|
executor.loader.build_graph()
|
|
|
|
apps = executor.loader.project_state(migrate_to).apps
|
|
pagesnapshot_class = apps.get_model('data', 'PageSnapshot')
|
|
|
|
snapshot = pagesnapshot_class.objects.get()
|
|
assert snapshot.serialization['cells'][0] == {
|
|
'model': 'wcs.wcscardcell',
|
|
'fields': {
|
|
'card_ids': '42,35',
|
|
'title_type': 'manual',
|
|
'custom_title': 'my-title',
|
|
'display_mode': 'card',
|
|
'without_user': True,
|
|
'custom_schema': {},
|
|
'only_for_user': True,
|
|
'carddef_reference': 'default:card_model_1',
|
|
'related_card_path': '',
|
|
'limit': 42,
|
|
'slug': 'my-card',
|
|
'order': 1,
|
|
'groups': [],
|
|
'public': True,
|
|
'condition': 'my-condition',
|
|
'placeholder': 'content',
|
|
'template_name': None,
|
|
'extra_css_class': '',
|
|
'last_update_timestamp': '2022-08-11T13:57:43.362Z',
|
|
'restricted_to_unlogged': False,
|
|
},
|
|
}
|
|
assert snapshot.serialization['cells'][1] == {
|
|
'model': 'wcs.wcscardcell',
|
|
'fields': {
|
|
'card_ids': '',
|
|
'title_type': 'manual',
|
|
'custom_title': 'my-other-title',
|
|
'display_mode': 'table',
|
|
'without_user': False,
|
|
'custom_schema': {},
|
|
'only_for_user': False,
|
|
'carddef_reference': 'default:card_model_1',
|
|
'related_card_path': '__all__',
|
|
'limit': 35,
|
|
'slug': 'my-other-card',
|
|
'order': 2,
|
|
'groups': [],
|
|
'public': True,
|
|
'condition': '',
|
|
'placeholder': 'content',
|
|
'template_name': None,
|
|
'extra_css_class': '',
|
|
'last_update_timestamp': '2022-08-12T07:19:18.541Z',
|
|
'restricted_to_unlogged': False,
|
|
},
|
|
}
|
|
|
|
|
|
def test_page_snapshot_uuids_migration(transactional_db):
|
|
migrate_from = [('data', '0063_old_card_cells')]
|
|
migrate_to = [('data', '0064_snapshot_uuids')]
|
|
|
|
executor = MigrationExecutor(connection)
|
|
old_apps = executor.loader.project_state(migrate_from).apps
|
|
executor.migrate(migrate_from)
|
|
|
|
page_class = old_apps.get_model('data', 'Page')
|
|
pagesnapshot_class = old_apps.get_model('data', 'PageSnapshot')
|
|
|
|
root = page_class.objects.create(order=0, slug='index')
|
|
page = page_class.objects.create(order=1, slug='slug')
|
|
old_uuid = uuid.uuid4()
|
|
link_cells = [
|
|
{
|
|
'model': 'data.linkcell',
|
|
'fields': {
|
|
'link_page': None,
|
|
},
|
|
},
|
|
{
|
|
'model': 'data.linkcell',
|
|
'fields': {
|
|
'link_page': [str(old_uuid)],
|
|
},
|
|
},
|
|
{
|
|
'model': 'data.linkcell',
|
|
'fields': {
|
|
'link_page': [str(page.uuid)], # will not change
|
|
},
|
|
},
|
|
{
|
|
'model': 'data.linkcell',
|
|
'fields': {
|
|
'link_page': ['unknown'],
|
|
},
|
|
},
|
|
{
|
|
'model': 'data.linkcell',
|
|
'fields': {
|
|
'link_page': ['slug'],
|
|
},
|
|
},
|
|
{
|
|
'model': 'data.linkcell',
|
|
'fields': {
|
|
'link_page': ['foo/bar/slug'],
|
|
},
|
|
},
|
|
]
|
|
snapshot1 = pagesnapshot_class.objects.create(
|
|
serialization={
|
|
'fields': {
|
|
'parent': None,
|
|
},
|
|
'cells': link_cells
|
|
+ [
|
|
{
|
|
'model': 'data.linklistcell',
|
|
'fields': {
|
|
'links': link_cells,
|
|
},
|
|
},
|
|
{
|
|
'model': 'search.searchcell',
|
|
'fields': {
|
|
'_search_services': {
|
|
'options': {
|
|
'foobar': {
|
|
'target_page': None,
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
{
|
|
'model': 'search.searchcell',
|
|
'fields': {
|
|
'_search_services': {
|
|
'options': {
|
|
'foobar': {
|
|
'target_page': str(old_uuid),
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
{
|
|
'model': 'search.searchcell',
|
|
'fields': {
|
|
'_search_services': {
|
|
'options': {
|
|
'foobar': {
|
|
'target_page': str(page.uuid), # will not change
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
{
|
|
'model': 'search.searchcell',
|
|
'fields': {
|
|
'_search_services': {
|
|
'options': {
|
|
'foobar': {
|
|
'target_page': 'unknown',
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
{
|
|
'model': 'search.searchcell',
|
|
'fields': {
|
|
'_search_services': {
|
|
'options': {
|
|
'foobar': {
|
|
'target_page': 'slug',
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
{
|
|
'model': 'search.searchcell',
|
|
'fields': {
|
|
'_search_services': {
|
|
'options': {
|
|
'foobar': {
|
|
'target_page': 'foo/bar/slug',
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
{
|
|
'model': 'wcs.wcscardcell',
|
|
'fields': {
|
|
'custom_schema': {
|
|
'cells': [
|
|
{
|
|
'page': None,
|
|
},
|
|
{
|
|
'page': str(old_uuid),
|
|
},
|
|
{
|
|
'page': str(page.uuid), # will not change
|
|
},
|
|
{
|
|
'page': 'unknown',
|
|
},
|
|
{
|
|
'page': 'slug',
|
|
},
|
|
{
|
|
'page': 'foo/bar/slug',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
],
|
|
}
|
|
)
|
|
snapshot2 = pagesnapshot_class.objects.create(
|
|
serialization={
|
|
'fields': {
|
|
'parent': [str(old_uuid)],
|
|
}
|
|
}
|
|
)
|
|
snapshot3 = pagesnapshot_class.objects.create(
|
|
serialization={
|
|
'fields': {
|
|
'parent': [str(page.uuid)], # will not change
|
|
}
|
|
}
|
|
)
|
|
snapshot4 = pagesnapshot_class.objects.create(
|
|
serialization={
|
|
'fields': {
|
|
'parent': ['unknown'],
|
|
}
|
|
}
|
|
)
|
|
snapshot5 = pagesnapshot_class.objects.create(
|
|
serialization={
|
|
'fields': {
|
|
'parent': ['slug'],
|
|
}
|
|
}
|
|
)
|
|
snapshot6 = pagesnapshot_class.objects.create(
|
|
serialization={
|
|
'fields': {
|
|
'parent': ['foo/bar/slug'],
|
|
}
|
|
}
|
|
)
|
|
snapshot7 = pagesnapshot_class.objects.create(
|
|
serialization={
|
|
'fields': {
|
|
'parent': [''], # index !
|
|
}
|
|
}
|
|
)
|
|
|
|
executor = MigrationExecutor(connection)
|
|
executor.migrate(migrate_to)
|
|
executor.loader.build_graph()
|
|
|
|
apps = executor.loader.project_state(migrate_to).apps
|
|
pagesnapshot_class = apps.get_model('data', 'PageSnapshot')
|
|
|
|
snapshot1 = pagesnapshot_class.objects.get(pk=snapshot1.pk)
|
|
assert snapshot1.serialization['fields']['parent'] is None
|
|
new_link_cells = [
|
|
{
|
|
'model': 'data.linkcell',
|
|
'fields': {
|
|
'link_page': None,
|
|
},
|
|
},
|
|
{
|
|
'model': 'data.linkcell',
|
|
'fields': {
|
|
'link_page': None,
|
|
},
|
|
},
|
|
{
|
|
'model': 'data.linkcell',
|
|
'fields': {
|
|
'link_page': [str(page.uuid)],
|
|
},
|
|
},
|
|
{
|
|
'model': 'data.linkcell',
|
|
'fields': {
|
|
'link_page': None,
|
|
},
|
|
},
|
|
{
|
|
'model': 'data.linkcell',
|
|
'fields': {
|
|
'link_page': [str(page.uuid)],
|
|
},
|
|
},
|
|
{
|
|
'model': 'data.linkcell',
|
|
'fields': {
|
|
'link_page': [str(page.uuid)],
|
|
},
|
|
},
|
|
]
|
|
assert snapshot1.serialization['cells'] == new_link_cells + [
|
|
{
|
|
'model': 'data.linklistcell',
|
|
'fields': {
|
|
'links': new_link_cells,
|
|
},
|
|
},
|
|
{
|
|
'model': 'search.searchcell',
|
|
'fields': {
|
|
'_search_services': {
|
|
'options': {
|
|
'foobar': {
|
|
'target_page': None,
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
{
|
|
'model': 'search.searchcell',
|
|
'fields': {
|
|
'_search_services': {
|
|
'options': {
|
|
'foobar': {
|
|
'target_page': None,
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
{
|
|
'model': 'search.searchcell',
|
|
'fields': {
|
|
'_search_services': {
|
|
'options': {
|
|
'foobar': {
|
|
'target_page': str(page.uuid),
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
{
|
|
'model': 'search.searchcell',
|
|
'fields': {
|
|
'_search_services': {
|
|
'options': {
|
|
'foobar': {
|
|
'target_page': None,
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
{
|
|
'model': 'search.searchcell',
|
|
'fields': {
|
|
'_search_services': {
|
|
'options': {
|
|
'foobar': {
|
|
'target_page': str(page.uuid),
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
{
|
|
'model': 'search.searchcell',
|
|
'fields': {
|
|
'_search_services': {
|
|
'options': {
|
|
'foobar': {
|
|
'target_page': str(page.uuid),
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
{
|
|
'model': 'wcs.wcscardcell',
|
|
'fields': {
|
|
'custom_schema': {
|
|
'cells': [
|
|
{
|
|
'page': None,
|
|
},
|
|
{
|
|
'page': None,
|
|
},
|
|
{
|
|
'page': str(page.uuid),
|
|
},
|
|
{
|
|
'page': None,
|
|
},
|
|
{
|
|
'page': str(page.uuid),
|
|
},
|
|
{
|
|
'page': str(page.uuid),
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
]
|
|
snapshot2 = pagesnapshot_class.objects.get(pk=snapshot2.pk)
|
|
assert snapshot2.serialization['fields']['parent'] is None
|
|
snapshot3 = pagesnapshot_class.objects.get(pk=snapshot3.pk)
|
|
assert snapshot3.serialization['fields']['parent'] == [str(page.uuid)]
|
|
snapshot4 = pagesnapshot_class.objects.get(pk=snapshot4.pk)
|
|
assert snapshot4.serialization['fields']['parent'] is None
|
|
snapshot5 = pagesnapshot_class.objects.get(pk=snapshot5.pk)
|
|
assert snapshot5.serialization['fields']['parent'] == [str(page.uuid)]
|
|
snapshot6 = pagesnapshot_class.objects.get(pk=snapshot6.pk)
|
|
assert snapshot6.serialization['fields']['parent'] == [str(page.uuid)]
|
|
snapshot7 = pagesnapshot_class.objects.get(pk=snapshot7.pk)
|
|
assert snapshot7.serialization['fields']['parent'] == [str(root.uuid)]
|