misc: change create_bundle logic in tests (#86627)

This commit is contained in:
Lauréline Guérin 2024-02-13 15:59:40 +01:00
parent 370beb3a84
commit 741efc0e35
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
1 changed files with 69 additions and 25 deletions

View File

@ -217,17 +217,9 @@ def test_page_redirect(app, john_doe):
app.get('/api/export-import/pages/%s/redirect/' % uuid.uuid4(), status=404)
def create_bundle(app, john_doe, visible=True, version_number='42.0'):
app.authorization = ('Basic', (john_doe.username, john_doe.username))
group, dummy = Group.objects.get_or_create(name='plop')
page, dummy = Page.objects.get_or_create(
slug='test', defaults={'title': 'Test Page', 'template_name': 'standard'}
)
page.groups.set([group])
page_export = app.get(f'/api/export-import/pages/{page.uuid}/').content
def create_bundle(elements, *args, **kwargs):
visible = kwargs.get('visible', True)
version_number = kwargs.get('version_number', '42.0')
tar_io = io.BytesIO()
with tarfile.open(mode='w', fileobj=tar_io) as tar:
manifest_json = {
@ -239,10 +231,7 @@ def create_bundle(app, john_doe, visible=True, version_number='42.0'):
'visible': visible,
'version_number': version_number,
'version_notes': 'foo bar blah',
'elements': [
{'type': 'pages', 'slug': f'{page.uuid}', 'name': 'Test Page', 'auto-dependency': False},
{'type': 'form', 'slug': 'xxx', 'name': 'Xxx'},
],
'elements': elements,
}
manifest_fd = io.BytesIO(json.dumps(manifest_json, indent=2).encode())
tarinfo = tarfile.TarInfo('manifest.json')
@ -256,16 +245,29 @@ def create_bundle(app, john_doe, visible=True, version_number='42.0'):
tarinfo.size = len(icon_fd.getvalue())
tar.addfile(tarinfo, fileobj=icon_fd)
tarinfo = tarfile.TarInfo(f'pages/{page.uuid}')
tarinfo.size = len(page_export)
tar.addfile(tarinfo, fileobj=io.BytesIO(page_export))
bundle = tar_io.getvalue()
return bundle
for path, obj in args:
tarinfo = tarfile.TarInfo(path)
if not hasattr(obj, 'get_serialized_page'):
continue
export_fd = io.BytesIO(json.dumps({'data': obj.get_serialized_page()}).encode())
tarinfo.size = len(export_fd.getvalue())
tar.addfile(tarinfo, fileobj=export_fd)
return tar_io.getvalue()
@pytest.fixture
def bundle(app, john_doe):
return create_bundle(app, john_doe)
page, dummy = Page.objects.get_or_create(
slug='test', defaults={'title': 'Test Page', 'template_name': 'standard'}
)
return create_bundle(
[
{'type': 'pages', 'slug': f'{page.uuid}', 'name': 'Test Page', 'auto-dependency': False},
{'type': 'form', 'slug': 'xxx', 'name': 'Xxx'},
],
(f'pages/{page.uuid}', page),
)
def test_bundle_import(app, john_doe):
@ -274,7 +276,18 @@ def test_bundle_import(app, john_doe):
bundles = []
for version_number in ['42.0', '42.1']:
bundles.append(create_bundle(app, john_doe, version_number=version_number))
page, dummy = Page.objects.get_or_create(
slug='test', defaults={'title': 'Test Page', 'template_name': 'standard'}
)
bundle = create_bundle(
[
{'type': 'pages', 'slug': f'{page.uuid}', 'name': 'Test Page', 'auto-dependency': False},
{'type': 'form', 'slug': 'xxx', 'name': 'Xxx'},
],
(f'pages/{page.uuid}', page),
version_number=version_number,
)
bundles.append(bundle)
resp = app.put('/api/export-import/bundle-import/', bundles[0])
assert Page.objects.all().count() == 1
@ -339,7 +352,17 @@ def test_bundle_import(app, john_doe):
def test_bundle_declare(app, john_doe):
app.authorization = ('Basic', (john_doe.username, john_doe.username))
bundle = create_bundle(app, john_doe, visible=False)
page, dummy = Page.objects.get_or_create(
slug='test', defaults={'title': 'Test Page', 'template_name': 'standard'}
)
bundle = create_bundle(
[
{'type': 'pages', 'slug': f'{page.uuid}', 'name': 'Test Page', 'auto-dependency': False},
{'type': 'form', 'slug': 'xxx', 'name': 'Xxx'},
],
(f'pages/{page.uuid}', page),
visible=False,
)
resp = app.put('/api/export-import/bundle-declare/', bundle)
job_url = resp.json['url']
resp = app.get(job_url)
@ -360,7 +383,17 @@ def test_bundle_declare(app, john_doe):
assert application.visible is False
assert ApplicationElement.objects.count() == 1
bundle = create_bundle(app, john_doe, visible=True)
page, dummy = Page.objects.get_or_create(
slug='test', defaults={'title': 'Test Page', 'template_name': 'standard'}
)
bundle = create_bundle(
[
{'type': 'pages', 'slug': f'{page.uuid}', 'name': 'Test Page', 'auto-dependency': False},
{'type': 'form', 'slug': 'xxx', 'name': 'Xxx'},
],
(f'pages/{page.uuid}', page),
visible=True,
)
# create link to element not present in manifest: it should be unlinked
last_page = Page.objects.latest('pk')
ApplicationElement.objects.create(
@ -438,7 +471,18 @@ def test_bundle_check(app, john_doe):
bundles = []
for version_number in ['1.0', '2.0']:
bundles.append(create_bundle(app, john_doe, version_number=version_number))
page, dummy = Page.objects.get_or_create(
slug='test', defaults={'title': 'Test Page', 'template_name': 'standard'}
)
bundle = create_bundle(
[
{'type': 'pages', 'slug': f'{page.uuid}', 'name': 'Test Page', 'auto-dependency': False},
{'type': 'form', 'slug': 'xxx', 'name': 'Xxx'},
],
(f'pages/{page.uuid}', page),
version_number=version_number,
)
bundles.append(bundle)
page_uuid = str(Page.objects.last().uuid)
Page.objects.all().delete()
PageSnapshot.objects.all().delete()