testdef: forbid test creation if form has deprecated fields (#73331) #77

Merged
vdeniaud merged 1 commits from wip/73331-testdef-indiquer-qu-on-ne-suppor into main 2023-01-30 15:10:32 +01:00
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
Review

Il y aurait moyen d'ajouter un attribut deprecated = True/False sur les champs, et l'utiliser ici + wcs/testdef.py plus bas + wcs/backoffice/deprecations.py, j'ai peur autrement que dans une prochaine dépréciation on oublie d'actualiser un côté.

Il y aurait moyen d'ajouter un attribut `deprecated = True/False` sur les champs, et l'utiliser ici + wcs/testdef.py plus bas + wcs/backoffice/deprecations.py, j'ai peur autrement que dans une prochaine dépréciation on oublie d'actualiser un côté.
Review

Mais ici ce qui justifie qu'on interdise de créer des tests ce n'est pas vraiment que les champs soient dépréciés, c'est qu'ils l'aient été avant l'introduction des tests.

Si demain on déprécie un nouveau type de champ on a pas envie que ça ait une incidence sur les tests existants non ? (ça irait à l'encontre du principe de la dépréciation, laisser le temps de gérer la migration en permettant de continuer une utilisation normale)

Mais ici ce qui justifie qu'on interdise de créer des tests ce n'est pas vraiment que les champs soient dépréciés, c'est qu'ils l'aient été avant l'introduction des tests. Si demain on déprécie un nouveau type de champ on a pas envie que ça ait une incidence sur les tests existants non ? (ça irait à l'encontre du principe de la dépréciation, laisser le temps de gérer la migration en permettant de continuer une utilisation normale)
Review

ok ainsi alors.

ok ainsi alors.
),
}
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):