backoffice: list errors related to current form/carddef only (#49266)

This commit is contained in:
Lauréline Guérin 2020-12-08 17:52:17 +01:00 committed by Frédéric Péters
parent b58c13e6c3
commit 8ba1421c08
4 changed files with 25 additions and 12 deletions

View File

@ -4730,14 +4730,24 @@ def test_backoffice_logged_errors(pub):
formdef.fields = []
formdef.store()
# create a carddef with the same id
CardDef.wipe()
carddef = CardDef()
carddef.id = '34'
carddef.name = 'test'
carddef.fields = []
carddef.store()
LoggedError.wipe()
create_superuser(pub)
app = login(get_app(pub))
resp = app.get('/backoffice/forms/%s/' % formdef.id)
assert not 'ZeroDivisionError' in resp.text
assert 'ZeroDivisionError' not in resp.text
resp = app.get('/backoffice/cards/%s/' % carddef.id)
assert 'ZeroDivisionError' not in resp.text
resp = app.get('/backoffice/workflows/%s/' % workflow.id)
assert not 'ZeroDivisionError' in resp.text
assert 'ZeroDivisionError' not in resp.text
app = get_app(pub)
resp = app.get('/test/')
@ -4750,6 +4760,8 @@ def test_backoffice_logged_errors(pub):
assert 'Failed to evaluate condition' in resp.text
assert 'ZeroDivisionError' in resp.text
resp = resp.click('1 error')
resp = app.get('/backoffice/cards/%s/' % carddef.id)
assert 'ZeroDivisionError' not in resp.text
resp = app.get('/backoffice/workflows/%s/' % workflow.id)
resp2 = resp.click('1 error')

View File

@ -457,7 +457,7 @@ class FormDefPage(Directory):
self.role = WorkflowRoleDirectory(self.formdef)
self.role.html_top = self.html_top
self.options = self.options_directory_class(self.formdef)
self.logged_errors_dir = LoggedErrorsDirectory(parent_dir=self, formdef_id=self.formdef.id)
self.logged_errors_dir = LoggedErrorsDirectory(parent_dir=self, formdef_class=self.formdef_class, formdef_id=self.formdef.id)
self.snapshots_dir = SnapshotsDirectory(self.formdef)
def html_top(self, title):
@ -702,7 +702,7 @@ class FormDefPage(Directory):
if qrcode is not None:
r += htmltext('<li><a href="qrcode" rel="popup">%s</a></li>') % _('Display QR Code')
r += htmltext('</ul>')
r += LoggedErrorsDirectory.errors_block(formdef_id=self.formdef.id)
r += LoggedErrorsDirectory.errors_block(formdef_class=self.formdef_class, formdef_id=self.formdef.id)
return r.getvalue()
def public_url(self):

View File

@ -115,17 +115,17 @@ class LoggedErrorsDirectory(Directory):
_q_exports = ['']
@classmethod
def get_errors(cls, formdef_id=None, workflow_id=None):
def get_errors(cls, formdef_class=None, formdef_id=None, workflow_id=None):
errors = []
if formdef_id:
errors = LoggedError.get_with_indexed_value('formdef_id', formdef_id)
if formdef_id and formdef_class:
errors = [e for e in LoggedError.get_with_indexed_value('formdef_id', formdef_id) if e.formdef_class == formdef_class.__name__]
elif workflow_id:
errors = LoggedError.get_with_indexed_value('workflow_id', workflow_id)
return list(errors)
@classmethod
def errors_block(cls, formdef_id=None, workflow_id=None):
errors = cls.get_errors(formdef_id=formdef_id, workflow_id=workflow_id)
def errors_block(cls, formdef_class=None, formdef_id=None, workflow_id=None):
errors = cls.get_errors(formdef_class=formdef_class, formdef_id=formdef_id, workflow_id=workflow_id)
if not errors:
return ''
errors.sort(key=lambda x: x.id, reverse=True)
@ -151,8 +151,9 @@ class LoggedErrorsDirectory(Directory):
r += htmltext('</div>')
return r.getvalue()
def __init__(self, parent_dir, formdef_id=None, workflow_id=None):
def __init__(self, parent_dir, formdef_class=None, formdef_id=None, workflow_id=None):
self.parent_dir = parent_dir
self.formdef_class = formdef_class
self.formdef_id = formdef_id
self.workflow_id = workflow_id
@ -162,7 +163,7 @@ class LoggedErrorsDirectory(Directory):
return template.QommonTemplateResponse(
templates=['wcs/backoffice/logged-errors.html'],
context={
'errors': self.get_errors(formdef_id=self.formdef_id, workflow_id=self.workflow_id),
'errors': self.get_errors(formdef_class=self.formdef_class, formdef_id=self.formdef_id, workflow_id=self.workflow_id),
})
def _q_lookup(self, component):

View File

@ -220,7 +220,7 @@ class CardDefPage(FormDefPage):
r += htmltext('<li><a href="history/">%s</a></li>') % _('History')
r += htmltext('</ul>')
r += LoggedErrorsDirectory.errors_block(formdef_id=self.formdef.id)
r += LoggedErrorsDirectory.errors_block(formdef_class=self.formdef_class, formdef_id=self.formdef.id)
return r.getvalue()
def get_check_count_before_deletion_message(self):