admin: create test from scratch instead of using existing formdata (#75170)
gitea/wcs/pipeline/head Build started...
Details
gitea/wcs/pipeline/head Build started...
Details
This commit is contained in:
parent
34e1a30499
commit
e1a6dbdb52
|
@ -61,7 +61,7 @@ def test_tests_link_on_formdef_page(pub):
|
|||
|
||||
|
||||
def test_tests_page(pub):
|
||||
user = create_superuser(pub)
|
||||
create_superuser(pub)
|
||||
|
||||
formdef = FormDef()
|
||||
formdef.name = 'test title'
|
||||
|
@ -71,77 +71,42 @@ def test_tests_page(pub):
|
|||
formdef.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
|
||||
resp = app.get(formdef.get_admin_url())
|
||||
resp = resp.click('Tests')
|
||||
assert 'There are no tests yet.' in resp.text
|
||||
assert 'Tests cannot be created because there are no completed forms.' in resp.text
|
||||
assert 'New' not in resp.text
|
||||
|
||||
formdata = formdef.data_class()()
|
||||
formdata.just_created()
|
||||
formdata.receipt_time = datetime.datetime(2021, 1, 1, 0, 0).timetuple()
|
||||
formdata.data['1'] = 'a'
|
||||
formdata.user_id = user.id
|
||||
formdata.store()
|
||||
|
||||
resp = app.get(formdef.get_admin_url())
|
||||
resp = resp.click('Tests')
|
||||
assert 'There are no tests yet.' in resp.text
|
||||
assert 'New tests cannot be created' not in resp.text
|
||||
|
||||
resp = resp.click('New')
|
||||
resp.form['name'] = 'First test'
|
||||
resp.form['formdata_id'].select(text='1-1 - admin')
|
||||
assert len(resp.form['formdata_id'].options) == 1
|
||||
|
||||
resp = resp.form.submit().follow()
|
||||
assert 'Edit test data' in resp.text
|
||||
|
||||
resp.form['f1'] = 'abcdefg'
|
||||
resp = resp.form.submit('submit')
|
||||
assert resp.location == 'http://example.net/backoffice/forms/1/tests/1/'
|
||||
|
||||
resp = resp.follow()
|
||||
assert 'First test' in resp.text
|
||||
assert 'abcdefg' in resp.text
|
||||
assert 'This test is empty' not in resp.text
|
||||
|
||||
resp = app.get('/backoffice/forms/1/tests/')
|
||||
assert 'First test' in resp.text
|
||||
assert 'no tests yet' not in resp.text
|
||||
|
||||
formdata = formdef.data_class()()
|
||||
formdata.just_created()
|
||||
formdata.receipt_time = datetime.datetime(2021, 1, 1, 0, 0).timetuple()
|
||||
formdata.data['1'] = 'b'
|
||||
formdata.store()
|
||||
|
||||
resp = app.get('/backoffice/forms/1/tests/new')
|
||||
resp = resp.click('New')
|
||||
resp.form['name'] = 'Second test'
|
||||
resp.form['formdata_id'].select(text='1-2 - Unknown User')
|
||||
assert len(resp.form['formdata_id'].options) == 2
|
||||
# submit but skip redirection to edit page
|
||||
resp.form.submit()
|
||||
|
||||
resp = resp.form.submit().follow()
|
||||
resp = app.get('/backoffice/forms/1/tests/')
|
||||
assert 'First test' in resp.text
|
||||
assert 'Second test' in resp.text
|
||||
|
||||
resp = resp.click('Second test')
|
||||
assert 'This test is empty' in resp.text
|
||||
|
||||
def test_tests_page_formdefs_isolation(pub):
|
||||
formdef = FormDef()
|
||||
formdef.name = 'dummy'
|
||||
formdef.store()
|
||||
|
||||
formdata = formdef.data_class()()
|
||||
formdata.just_created()
|
||||
formdata.store()
|
||||
|
||||
other_formdef = FormDef()
|
||||
other_formdef.name = 'dummy2'
|
||||
other_formdef.store()
|
||||
|
||||
formdata2 = other_formdef.data_class()()
|
||||
formdata2.just_created()
|
||||
formdata2.store()
|
||||
|
||||
create_superuser(pub)
|
||||
app = login(get_app(pub))
|
||||
|
||||
resp = app.get('/backoffice/forms/1/tests/new')
|
||||
assert len(resp.form['formdata_id'].options) == 1
|
||||
assert resp.form['formdata_id'].options[0][2] == '1-1 - Unknown User'
|
||||
|
||||
resp = app.get('/backoffice/forms/2/tests/new')
|
||||
assert len(resp.form['formdata_id'].options) == 1
|
||||
assert resp.form['formdata_id'].options[0][2] == '2-1 - Unknown User'
|
||||
# test run with empty test is allowed
|
||||
app.get('/backoffice/forms/1/tests/results/run').follow()
|
||||
|
||||
|
||||
def test_tests_page_deprecated_fields(pub):
|
||||
|
@ -294,11 +259,13 @@ def test_tests_edit(pub):
|
|||
|
||||
formdef = FormDef()
|
||||
formdef.name = 'test title'
|
||||
formdef.fields = [fields.StringField(id='1', label='Text', varname='text')]
|
||||
formdef.store()
|
||||
|
||||
formdata = formdef.data_class()()
|
||||
formdata.receipt_time = datetime.datetime(2021, 1, 1, 0, 0).timetuple()
|
||||
formdata.user_id = user.id
|
||||
formdata.data = {'1': 'xxx'}
|
||||
formdata.store()
|
||||
|
||||
testdef = TestDef.create_from_formdata(formdef, formdata)
|
||||
|
@ -481,7 +448,8 @@ def test_tests_manual_run(pub):
|
|||
assert 'No test results yet.' in resp.text
|
||||
|
||||
resp = resp.click('Run tests')
|
||||
assert resp.location == 'http://example.net/backoffice/forms/1/tests/results/1/'
|
||||
result = TestResult.select()[-1]
|
||||
assert resp.location == 'http://example.net/backoffice/forms/1/tests/results/%s/' % result.id
|
||||
|
||||
resp = resp.follow()
|
||||
assert 'Started by: Manual run.' in resp.text
|
||||
|
@ -502,14 +470,15 @@ def test_tests_manual_run(pub):
|
|||
formdef.store()
|
||||
|
||||
resp = resp.click('Run tests')
|
||||
assert resp.location == 'http://example.net/backoffice/forms/1/tests/results/2/'
|
||||
result = TestResult.select()[-1]
|
||||
assert resp.location == 'http://example.net/backoffice/forms/1/tests/results/%s/' % result.id
|
||||
|
||||
resp = app.get('/backoffice/forms/1/tests/results/')
|
||||
assert len(resp.pyquery('tr')) == 2
|
||||
assert len(resp.pyquery('span.test-success')) == 1
|
||||
assert len(resp.pyquery('span.test-failure')) == 1
|
||||
|
||||
resp = resp.click('#2')
|
||||
resp = resp.click('#%s' % result.id)
|
||||
assert 'Started by: Manual run.' in resp.text
|
||||
assert 'Success!' not in resp.text
|
||||
assert 'Empty value for field' in resp.text
|
||||
|
|
|
@ -30,7 +30,7 @@ from wcs.qommon.backoffice.listing import pagination_links
|
|||
from wcs.qommon.backoffice.menu import html_top
|
||||
from wcs.qommon.errors import TraversalError
|
||||
from wcs.qommon.form import FileWidget, Form, SingleSelectWidget, StringWidget
|
||||
from wcs.qommon.storage import Equal, StrictNotEqual
|
||||
from wcs.qommon.storage import Equal
|
||||
from wcs.testdef import TestDef, TestError, TestResult
|
||||
|
||||
|
||||
|
@ -147,7 +147,10 @@ class TestPage(FormBackOfficeStatusPage):
|
|||
r += htmltext('<div class="infonotice"><p>%s</p></div>') % _(
|
||||
'This test is expected to fail on error "%s".' % self.testdef.data['expected_error']
|
||||
)
|
||||
r += self.receipt(always_include_user=True, mine=False)
|
||||
if self.testdef.data['fields']:
|
||||
r += self.receipt(always_include_user=True, mine=False)
|
||||
else:
|
||||
r += htmltext('<div class="infonotice"><p>%s</p></div>') % _('This test is empty.')
|
||||
return r.getvalue()
|
||||
|
||||
def delete(self):
|
||||
|
@ -266,7 +269,6 @@ class TestsDirectory(Directory):
|
|||
def _q_index(self):
|
||||
context = {
|
||||
'testdefs': TestDef.select_for_objectdef(self.objectdef),
|
||||
'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
|
||||
|
@ -281,13 +283,6 @@ class TestsDirectory(Directory):
|
|||
def new(self):
|
||||
form = Form(enctype='multipart/form-data')
|
||||
form.add(StringWidget, 'name', title=_('Name'), required=True, size=50)
|
||||
formadata_options = [
|
||||
(x.id, '%s - %s' % (x.id_display, x.user or _('Unknown User')))
|
||||
for x in self.objectdef.data_class().select(
|
||||
[StrictNotEqual('status', 'draft')], order_by='-receipt_time'
|
||||
)
|
||||
]
|
||||
form.add(SingleSelectWidget, 'formdata_id', title=_('Form'), required=True, options=formadata_options)
|
||||
form.add_submit('submit', _('Submit'))
|
||||
form.add_submit('cancel', _('Cancel'))
|
||||
|
||||
|
@ -300,15 +295,13 @@ class TestsDirectory(Directory):
|
|||
r += htmltext('<h2>%s</h2>') % _('New test')
|
||||
r += form.render()
|
||||
return r.getvalue()
|
||||
else:
|
||||
formdata_id = form.get_widget('formdata_id').parse()
|
||||
formdata = self.objectdef.data_class().get(formdata_id)
|
||||
|
||||
testdef = TestDef.create_from_formdata(self.objectdef, formdata)
|
||||
testdef.name = form.get_widget('name').parse()
|
||||
testdef.store()
|
||||
# create empty test
|
||||
testdef = TestDef.create_from_formdata(self.objectdef, self.objectdef.data_class()())
|
||||
testdef.name = form.get_widget('name').parse()
|
||||
testdef.store()
|
||||
|
||||
return redirect('.')
|
||||
return redirect(testdef.get_admin_url() + 'edit-data/')
|
||||
|
||||
def p_import(self):
|
||||
form = Form(enctype='multipart/form-data')
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
{% block sidebar-content %}
|
||||
<h3>{% trans "Actions" %}</h3>
|
||||
{% if formdata and not has_deprecated_fields %}
|
||||
{% if not has_deprecated_fields %}
|
||||
<a class="button button-paragraph" href="new" rel="popup">{% trans "New" %}</a>
|
||||
{% endif %}
|
||||
<a class="button button-paragraph" href="import" rel="popup">{% trans "Import" %}</a>
|
||||
|
@ -23,12 +23,6 @@
|
|||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if not formdata %}
|
||||
<div class="infonotice">
|
||||
<p>{% trans "Tests cannot be created because there are no completed forms." %}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if testdefs %}
|
||||
<ul class="objects-list single-links">
|
||||
{% for test in testdefs %}
|
||||
|
|
Loading…
Reference in New Issue