0001-admin-check-for-contents-before-removal-of-forms-car.patch
tests/test_admin_pages.py | ||
---|---|---|
1647 | 1647 |
assert CardDef.get(1).disabled is False |
1648 | 1648 | |
1649 | 1649 | |
1650 |
def test_cards_delete(pub, studio): |
|
1651 |
test_cards_new(pub, studio) |
|
1652 |
app = login(get_app(pub)) |
|
1653 | ||
1654 |
carddef = CardDef.select()[0] |
|
1655 |
carddata = carddef.data_class()() |
|
1656 |
carddata.just_created() |
|
1657 |
carddata.data = {} |
|
1658 |
carddata.store() |
|
1659 | ||
1660 |
resp = app.get('http://example.net/backoffice/cards/1/') |
|
1661 |
resp = resp.click('Delete') |
|
1662 |
if pub.is_using_postgresql(): |
|
1663 |
assert 'Deletion is not possible as there are cards.' in resp |
|
1664 |
carddef.data_class().wipe() |
|
1665 |
resp = app.get('http://example.net/backoffice/cards/1/') |
|
1666 |
resp = resp.click('Delete') |
|
1667 | ||
1668 |
resp = resp.form.submit('submit') |
|
1669 |
assert CardDef.count() == 0 |
|
1670 | ||
1671 |
carddata.remove_self() # don't keep leftovers |
|
1672 | ||
1673 | ||
1650 | 1674 |
def test_cards_duplicate(pub, studio): |
1651 | 1675 |
test_cards_new(pub, studio) |
1652 | 1676 |
app = login(get_app(pub)) |
tests/test_forms_admin_pages.py | ||
---|---|---|
851 | 851 |
assert FormDef.count() == 0 |
852 | 852 | |
853 | 853 | |
854 |
def test_form_delete_with_data(pub): |
|
855 |
create_superuser(pub) |
|
856 |
create_role() |
|
857 | ||
858 |
FormDef.wipe() |
|
859 |
formdef = FormDef() |
|
860 |
formdef.name = 'form title' |
|
861 |
formdef.fields = [] |
|
862 |
formdef.store() |
|
863 | ||
864 |
formdata = formdef.data_class()() |
|
865 |
formdata.just_created() |
|
866 |
formdata.store() |
|
867 | ||
868 |
app = login(get_app(pub)) |
|
869 | ||
870 |
resp = app.get('/backoffice/forms/%s/' % formdef.id) |
|
871 |
resp = resp.click(href='delete') |
|
872 |
if pub.is_using_postgresql(): |
|
873 |
assert 'Deletion is not possible' in resp |
|
874 | ||
875 |
formdata.status = 'draft' |
|
876 |
formdata.store() |
|
877 |
resp = app.get('/backoffice/forms/%s/' % formdef.id) |
|
878 |
resp = resp.click(href='delete') |
|
879 |
assert 'Deletion is not possible' not in resp |
|
880 | ||
881 |
formdata.status = 'wf-rejected' |
|
882 |
formdata.store() |
|
883 |
resp = app.get('/backoffice/forms/%s/' % formdef.id) |
|
884 |
resp = resp.click(href='delete') |
|
885 |
assert 'Deletion is not possible' not in resp |
|
886 | ||
887 | ||
854 | 888 |
def test_form_duplicate(pub): |
855 | 889 |
create_superuser(pub) |
856 | 890 |
create_role() |
wcs/admin/forms.py | ||
---|---|---|
32 | 32 |
from wcs.qommon import misc |
33 | 33 |
from wcs.qommon.errors import * |
34 | 34 |
from wcs.qommon.form import * |
35 |
from wcs.qommon.storage import Equal, NotEqual, Null |
|
35 | 36 |
from wcs.qommon.backoffice.menu import html_top |
36 | 37 |
from wcs.qommon import get_logger |
37 | 38 |
from wcs.qommon.misc import C_ |
... | ... | |
944 | 945 |
self.formdefui.formdef.store() |
945 | 946 |
return redirect('../%s/' % self.formdefui.formdef.id) |
946 | 947 | |
948 |
def get_check_count_before_deletion_message(self): |
|
949 |
if not get_publisher().is_using_postgresql(): |
|
950 |
return None |
|
951 |
from wcs import sql |
|
952 |
criterias = [ |
|
953 |
Equal('formdef_id', self.formdefui.formdef.id), |
|
954 |
NotEqual('status', 'draft'), |
|
955 |
Equal('is_at_endpoint', False), |
|
956 |
Null('anonymised'), |
|
957 |
] |
|
958 |
if sql.AnyFormData.count(criterias): |
|
959 |
return _('Deletion is not possible as there are open forms.') |
|
960 | ||
947 | 961 |
def delete(self): |
948 | 962 |
form = Form(enctype='multipart/form-data') |
949 |
form.widgets.append(HtmlWidget('<p>%s</p>' % _(self.delete_message))) |
|
950 |
form.add_submit('delete', _('Delete')) |
|
963 |
check_count_message = self.get_check_count_before_deletion_message() |
|
964 |
if check_count_message: |
|
965 |
form.widgets.append(HtmlWidget('<p>%s</p>' % check_count_message)) |
|
966 |
else: |
|
967 |
form.widgets.append(HtmlWidget('<p>%s</p>' % _(self.delete_message))) |
|
968 |
form.add_submit('delete', _('Delete')) |
|
951 | 969 |
form.add_submit('cancel', _('Cancel')) |
952 | 970 |
if form.get_widget('cancel').parse(): |
953 | 971 |
return redirect('..') |
wcs/backoffice/cards.py | ||
---|---|---|
24 | 24 | |
25 | 25 |
from ..qommon import _, N_, misc |
26 | 26 |
from ..qommon.misc import C_ |
27 |
from ..qommon.storage import NotEqual, Null |
|
27 | 28 | |
28 | 29 |
from wcs.carddef import CardDef |
29 | 30 |
from wcs.roles import Role |
... | ... | |
191 | 192 |
r += LoggedErrorsDirectory.errors_block(formdef_id=self.formdef.id) |
192 | 193 |
return r.getvalue() |
193 | 194 | |
195 |
def get_check_count_before_deletion_message(self): |
|
196 |
if not get_publisher().is_using_postgresql(): |
|
197 |
return None |
|
198 |
criterias = [ |
|
199 |
NotEqual('status', 'draft'), |
|
200 |
Null('anonymised'), |
|
201 |
] |
|
202 |
if self.formdef.data_class().count(criterias): |
|
203 |
return _('Deletion is not possible as there are cards.') |
|
204 | ||
194 | 205 | |
195 | 206 |
class CardsDirectory(FormsDirectory): |
196 | 207 |
_q_exports = ['', 'new', ('import', 'p_import')] |
197 |
- |