backoffice: display an error on diff of snapshots that do not load (#89801)
gitea/wcs/pipeline/head This commit looks good Details

This commit is contained in:
Frédéric Péters 2024-04-19 14:19:19 +02:00
parent 61ce06676d
commit 0dc5d3267f
2 changed files with 63 additions and 2 deletions

View File

@ -12,7 +12,7 @@ from wcs.carddef import CardDef
from wcs.categories import Category
from wcs.comment_templates import CommentTemplate
from wcs.data_sources import NamedDataSource
from wcs.fields import CommentField, ItemField, PageField, StringField
from wcs.fields import BlockField, CommentField, ItemField, PageField, StringField
from wcs.formdef import FormDef
from wcs.mail_templates import MailTemplate
from wcs.qommon.form import UploadedFile
@ -362,6 +362,61 @@ def test_form_snapshot_diff(pub):
assert 'Snapshot <a href="%s/view/">%s</a> - (Version 42.0)' % (snapshot3.id, snapshot3.id) in resp
def test_form_snapshot_diff_with_reference_error(pub):
create_superuser(pub)
create_role(pub)
BlockDef.wipe()
blockdef = BlockDef()
blockdef.name = 'testblock'
blockdef.fields = []
blockdef.store()
FormDef.wipe()
formdef = FormDef()
formdef.name = 'testform'
formdef.fields = [
BlockField(id='1', label='block1', varname='foo', block_slug=blockdef.slug),
]
formdef.store()
assert pub.snapshot_class.count() == 2
snapshot1 = pub.snapshot_class.get_latest('formdef', formdef.id)
formdef.fields.append(StringField(id=2, label='Test'))
formdef.store()
assert pub.snapshot_class.count() == 3
formdef.fields = formdef.fields[1:]
formdef.store()
assert pub.snapshot_class.count() == 4
snapshot3 = pub.snapshot_class.get_latest('formdef', formdef.id)
app = login(get_app(pub))
resp = app.get(
'/backoffice/forms/%s/history/compare?version1=%s&version2=%s'
% (formdef.id, snapshot1.id, snapshot3.id)
)
assert resp.pyquery('h2').text() == 'Compare snapshots (XML)'
resp = app.get(
'/backoffice/forms/%s/history/compare?version1=%s&version2=%s&mode=inspect'
% (formdef.id, snapshot1.id, snapshot3.id)
)
assert resp.pyquery('h2').text() == 'Compare snapshots (Inspect)'
BlockDef.wipe()
resp = app.get(
'/backoffice/forms/%s/history/compare?version1=%s&version2=%s'
% (formdef.id, snapshot1.id, snapshot3.id)
)
assert resp.pyquery('h2').text() == 'Compare snapshots (XML)'
resp = app.get(
'/backoffice/forms/%s/history/compare?version1=%s&version2=%s&mode=inspect'
% (formdef.id, snapshot1.id, snapshot3.id)
)
assert resp.pyquery('h2').text() == 'Error'
assert 'Can not display snapshot (Unknown referenced objects)' in resp.text
def test_form_snapshot_comments(pub):
create_superuser(pub)
create_role(pub)

View File

@ -136,7 +136,13 @@ class SnapshotsDirectory(Directory):
if mode == 'inspect' and not has_inspect:
raise errors.TraversalError()
context = getattr(self, 'get_compare_%s_context' % mode)(snapshot1, snapshot2)
from wcs.blocks import BlockdefImportError
try:
context = getattr(self, 'get_compare_%s_context' % mode)(snapshot1, snapshot2)
except (BlockdefImportError, FormdefImportError, WorkflowImportError) as e:
return template.error_page(_('Can not display snapshot (%s)') % e)
context.update(
{
'mode': mode,