From 204ba88ba802cd73c65baa934b2117531ad58a32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laur=C3=A9line=20Gu=C3=A9rin?= Date: Thu, 26 Jan 2023 17:24:43 +0100 Subject: [PATCH] custom-views: remove digest on deletion (#73775) --- tests/backoffice_pages/test_custom_view.py | 38 +++++++++++++++++++++- wcs/custom_views.py | 12 +++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/tests/backoffice_pages/test_custom_view.py b/tests/backoffice_pages/test_custom_view.py index d14cd0095..a840ce509 100644 --- a/tests/backoffice_pages/test_custom_view.py +++ b/tests/backoffice_pages/test_custom_view.py @@ -455,7 +455,7 @@ def test_backoffice_custom_view_status_filter(pub): def test_backoffice_custom_view_delete(pub): - create_superuser(pub) + user = create_superuser(pub) FormDef.wipe() pub.custom_view_class.wipe() @@ -481,6 +481,42 @@ def test_backoffice_custom_view_delete(pub): resp = resp.follow() assert 'custom test view' not in resp.text + CardDef.wipe() + carddef = CardDef() + carddef.name = 'foo' + carddef.fields = [ + fields.StringField(id='1', label='Test', type='string', varname='foo'), + ] + carddef.backoffice_submission_roles = user.roles + carddef.workflow_roles = {'_editor': user.roles[0]} + carddef.digest_templates = { + 'default': 'plop', + 'custom-view:custom-test-view': 'FOO {{ form_var_foo }}', + 'custom-view:another-view': '{{ form_var_foo }}', + } + carddef.store() + + custom_view = pub.custom_view_class() + custom_view.title = 'custom test view' + custom_view.formdef = carddef + custom_view.visibility = 'datasource' + custom_view.columns = {'list': [{'id': 'id'}]} + custom_view.filters = {} + custom_view.store() + + resp = app.get('/backoffice/data/foo/custom-test-view/') + resp = resp.click('Delete') + resp = resp.form.submit() + assert resp.location.endswith('/data/foo/') + resp = resp.follow() + assert 'custom test view' not in resp.text + + carddef.refresh_from_storage() + assert carddef.digest_templates == { + 'default': 'plop', + 'custom-view:another-view': '{{ form_var_foo }}', + } + def test_backoffice_custom_map_view(pub): user = create_superuser(pub) diff --git a/wcs/custom_views.py b/wcs/custom_views.py index 035051077..9e1ff87b5 100644 --- a/wcs/custom_views.py +++ b/wcs/custom_views.py @@ -65,6 +65,18 @@ class CustomView(StorableObject): self.formdef_id = str(value.id) self.formdef_type = value.xml_root_node + def remove_self(self): + try: + formdef = self.formdef + except KeyError: + pass + else: + view_digest_key = 'custom-view:%s' % self.get_url_slug() + if view_digest_key in (formdef.digest_templates or {}): + del formdef.digest_templates[view_digest_key] + formdef.store() + super().remove_self() + def match(self, user, formdef): if self.formdef_type != formdef.xml_root_node: return False