From 8ba1421c083a6971d476805b74ef8912167170ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laur=C3=A9line=20Gu=C3=A9rin?= Date: Tue, 8 Dec 2020 17:52:17 +0100 Subject: [PATCH] backoffice: list errors related to current form/carddef only (#49266) --- tests/backoffice_pages/test_all.py | 16 ++++++++++++++-- wcs/admin/forms.py | 4 ++-- wcs/admin/logged_errors.py | 15 ++++++++------- wcs/backoffice/cards.py | 2 +- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/tests/backoffice_pages/test_all.py b/tests/backoffice_pages/test_all.py index 192eccb4d..190ddfab9 100644 --- a/tests/backoffice_pages/test_all.py +++ b/tests/backoffice_pages/test_all.py @@ -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') diff --git a/wcs/admin/forms.py b/wcs/admin/forms.py index 8ef84d0f3..bd891cd8d 100644 --- a/wcs/admin/forms.py +++ b/wcs/admin/forms.py @@ -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('
  • %s
  • ') % _('Display QR Code') r += htmltext('') - 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): diff --git a/wcs/admin/logged_errors.py b/wcs/admin/logged_errors.py index f01a387f7..ed93a7b17 100644 --- a/wcs/admin/logged_errors.py +++ b/wcs/admin/logged_errors.py @@ -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('') 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): diff --git a/wcs/backoffice/cards.py b/wcs/backoffice/cards.py index 84a0fa3d3..1e91b3a8b 100644 --- a/wcs/backoffice/cards.py +++ b/wcs/backoffice/cards.py @@ -220,7 +220,7 @@ class CardDefPage(FormDefPage): r += htmltext('
  • %s
  • ') % _('History') r += htmltext('') - 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):