testdef: forbid test creation if form has deprecated fields (#73331)
gitea-wip/wcs/pipeline/pr-main This commit looks good Details

This commit is contained in:
Valentin Deniaud 2023-01-10 11:09:31 +01:00
parent 90f85518f8
commit 1d64138735
4 changed files with 38 additions and 2 deletions

View File

@ -159,6 +159,23 @@ def test_tests_page_formdefs_isolation(pub):
assert resp.form['formdata_id'].options[0][2] == '2-1 - Unknown User'
def test_tests_page_deprecated_fields(pub):
formdef = FormDef()
formdef.name = 'test title'
formdef.fields = [
fields.TableField(id='1', label='Table', type='table'),
]
formdef.store()
create_superuser(pub)
app = login(get_app(pub))
resp = app.get(formdef.get_admin_url())
resp = resp.click('Tests')
assert 'Run' not in resp.text
assert 'deprecated fields' in resp.text
def test_tests_import_export(pub):
user = create_superuser(pub)

View File

@ -117,6 +117,10 @@ class TestsDirectory(Directory):
[Equal('object_type', self.objectdef.get_table_name()), Equal('object_id', self.objectdef.id)]
),
'formdata': self.objectdef.data_class().select([StrictNotEqual('status', 'draft')]),
'has_deprecated_fields': any(
x.type in ('table', 'table-select', 'tablerows', 'ranked-items')
for x in self.objectdef.fields
),
}
return template.QommonTemplateResponse(templates=['wcs/backoffice/tests.html'], context=context)

View File

@ -7,7 +7,7 @@
{% if testdefs %}
<a href="run">{% trans "Run tests" %}</a>
{% endif %}
{% if formdata %}
{% if formdata and not has_deprecated_fields %}
<a href="new" rel="popup">{% trans "New" %}</a>
{% endif %}
{% endblock %}
@ -16,6 +16,12 @@
<div class="section">
<h3>{% trans "Test form data" %}</h3>
{% if has_deprecated_fields %}
<div class="warningnotice">
<p>{% trans "Tests cannot be created because this form has deprecated fields." %}</p>
</div>
{% endif %}
{% if not formdata %}
<div class="infonotice">
<p>{% trans "Tests cannot be created because there are no completed forms." %}</p>

View File

@ -162,7 +162,16 @@ class TestDef(sql.TestDef):
def fill_page_fields(self, fields, page, formdata, objectdef):
self.handle_computed_fields(fields, formdata)
for field in fields:
if field.key in ('subtitle', 'title', 'comment', 'computed'):
if field.key in (
'subtitle',
'title',
'comment',
'computed',
'table',
'table-select',
'tablerows',
'ranked-items',
):
continue
if not field.is_visible(formdata.data, objectdef):