misc: split backoffice tests
This commit is contained in:
parent
91b10ecbda
commit
34ac123c43
|
@ -824,680 +824,6 @@ def test_backoffice_card_field_columns(pub):
|
|||
} in resp_geojson.json['features'][0]['properties']['display_fields']
|
||||
|
||||
|
||||
def test_backoffice_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
assert resp.forms['listing-settings']['filter-status'].checked is True
|
||||
resp.forms['listing-settings']['filter-status'].checked = False
|
||||
resp.forms['listing-settings']['filter-2'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert '<select name="filter">' not in resp.text
|
||||
|
||||
resp.forms['listing-settings']['filter-2-value'] = 'baz'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>baz</td>') == 8
|
||||
assert resp.text.count('<td>foo</td>') == 0
|
||||
assert resp.text.count('<td>bar</td>') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-start'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert '>invalid date<' not in resp
|
||||
resp.forms['listing-settings']['filter-start-value'] = datetime.datetime(2015, 2, 1).strftime('%Y-%m-%d')
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>baz</td>') == 0
|
||||
resp.forms['listing-settings']['filter-start-value'] = datetime.datetime(2014, 2, 1).strftime('%Y-%m-%d')
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>baz</td>') == 8
|
||||
|
||||
# check there's no crash on invalid date values
|
||||
resp.forms['listing-settings']['filter-start-value'] = 'whatever'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>baz</td>') == 8
|
||||
|
||||
# check two-digit years are handled correctly
|
||||
resp.forms['listing-settings']['filter-start-value'] = datetime.datetime(2014, 2, 1).strftime('%y-%m-%d')
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>baz</td>') == 8
|
||||
|
||||
# and dates being typed in are properly ignored
|
||||
resp.forms['listing-settings']['filter-start-value'] = '0020-02-01'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>baz</td>') == 8
|
||||
|
||||
# check it's also ok for end filter
|
||||
resp.forms['listing-settings']['filter-end'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
resp.forms['listing-settings']['filter-end-value'] = datetime.datetime(2014, 2, 2).strftime('%y-%m-%d')
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>baz</td>') == 0
|
||||
|
||||
|
||||
def test_backoffice_default_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
assert 'filter-2-value' not in resp.forms['listing-settings'].fields
|
||||
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields[1].in_filters = True
|
||||
formdef.store()
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
assert 'filter-2-value' in resp.forms['listing-settings'].fields
|
||||
|
||||
# same check for items field
|
||||
formdef.fields.append(
|
||||
fields.ItemsField(id='4', label='4th field', type='items', items=['foo', 'bar', 'baz'])
|
||||
)
|
||||
formdef.store()
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
assert 'filter-4-value' not in resp.forms['listing-settings'].fields
|
||||
|
||||
formdef.fields[-1].in_filters = True
|
||||
formdef.store()
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
assert 'filter-4-value' in resp.forms['listing-settings'].fields
|
||||
|
||||
|
||||
def test_backoffice_bool_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields.append(
|
||||
fields.BoolField(
|
||||
id='4', label='4th field', type='bool', display_locations=['validation', 'summary', 'listings']
|
||||
)
|
||||
)
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
formdata.data['4'] = bool(i % 2)
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-4'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-4-value'].value == ''
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'true'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>Yes</td>') > 0
|
||||
assert resp.text.count('<td>No</td>') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'false'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>Yes</td>') == 0
|
||||
assert resp.text.count('<td>No</td>') > 0
|
||||
|
||||
|
||||
def test_backoffice_item_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields.append(
|
||||
fields.ItemField(
|
||||
id='4',
|
||||
label='4th field',
|
||||
type='item',
|
||||
items=['â', 'b', 'c', 'd'],
|
||||
display_locations=['validation', 'summary', 'listings'],
|
||||
)
|
||||
)
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
if i % 4 == 0:
|
||||
formdata.data['4'] = 'â'
|
||||
formdata.data['4_display'] = 'â'
|
||||
elif i % 4 == 1:
|
||||
formdata.data['4'] = 'b'
|
||||
formdata.data['4_display'] = 'b'
|
||||
elif i % 4 == 2:
|
||||
formdata.data['4'] = 'd'
|
||||
formdata.data['4_display'] = 'd'
|
||||
else:
|
||||
formdata.data['4'] = ''
|
||||
formdata.data['4_display'] = ''
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-4'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-4-value'].value == ''
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'â'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â</td>') > 0
|
||||
assert resp.text.count('<td>b</td>') == 0
|
||||
assert resp.text.count('<td>d</td>') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'b'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â</td>') == 0
|
||||
assert resp.text.count('<td>b</td>') > 0
|
||||
assert resp.text.count('<td>d</td>') == 0
|
||||
|
||||
if not pub.is_using_postgresql():
|
||||
# in pickle all options are always displayed
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'c'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â</td>') == 0
|
||||
assert resp.text.count('<td>b</td>') == 0
|
||||
assert resp.text.count('<td>c</td>') == 0
|
||||
|
||||
else:
|
||||
# in postgresql, option 'c' is never used so not even listed
|
||||
with pytest.raises(ValueError):
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'c'
|
||||
|
||||
# check json view used to fill select filters from javascript
|
||||
resp2 = app.get(resp.request.path + 'filter-options?filter_field_id=4&' + resp.request.query_string)
|
||||
assert [x['id'] for x in resp2.json['data']] == ['â', 'b', 'd']
|
||||
resp2 = app.get(
|
||||
resp.request.path + 'filter-options?filter_field_id=4&_search=d&' + resp.request.query_string
|
||||
)
|
||||
assert [x['id'] for x in resp2.json['data']] == ['d']
|
||||
resp2 = app.get(
|
||||
resp.request.path + 'filter-options?filter_field_id=7&' + resp.request.query_string, status=404
|
||||
)
|
||||
|
||||
for status in ('all', 'waiting', 'pending', 'done', 'accepted'):
|
||||
resp.forms['listing-settings']['filter'] = status
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
resp2 = app.get(
|
||||
resp.request.path + 'filter-options?filter_field_id=4&' + resp.request.query_string
|
||||
)
|
||||
if status == 'accepted':
|
||||
assert [x['id'] for x in resp2.json['data']] == []
|
||||
else:
|
||||
assert [x['id'] for x in resp2.json['data']] == ['â', 'b', 'd']
|
||||
|
||||
|
||||
def test_backoffice_item_double_filter(pub):
|
||||
if not pub.is_using_postgresql():
|
||||
pytest.skip('this requires SQL')
|
||||
return
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields.append(
|
||||
fields.ItemField(
|
||||
id='4',
|
||||
label='4th field',
|
||||
type='item',
|
||||
items=['a', 'b', 'c', 'd'],
|
||||
display_locations=['validation', 'summary', 'listings'],
|
||||
)
|
||||
)
|
||||
formdef.fields.append(
|
||||
fields.ItemField(
|
||||
id='5',
|
||||
label='5th field',
|
||||
type='item',
|
||||
items=['E', 'F', 'G', 'H'],
|
||||
display_locations=['validation', 'summary', 'listings'],
|
||||
)
|
||||
)
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
formdata.jump_status('new')
|
||||
if i % 4 == 0:
|
||||
formdata.data['4'] = 'a'
|
||||
formdata.data['4_display'] = 'a'
|
||||
formdata.data['5'] = 'E'
|
||||
formdata.data['5_display'] = 'E'
|
||||
elif i % 4 == 1:
|
||||
formdata.data['4'] = 'a'
|
||||
formdata.data['4_display'] = 'a'
|
||||
formdata.data['5'] = 'F'
|
||||
formdata.data['5_display'] = 'F'
|
||||
elif i % 4 == 2:
|
||||
formdata.data['4'] = 'a'
|
||||
formdata.data['4_display'] = 'a'
|
||||
formdata.data['5'] = 'G'
|
||||
formdata.data['5_display'] = 'G'
|
||||
elif i % 4 == 3:
|
||||
formdata.data['4'] = 'b'
|
||||
formdata.data['4_display'] = 'b'
|
||||
formdata.data['5'] = 'F'
|
||||
formdata.data['5_display'] = 'F'
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-4'].checked = True
|
||||
resp.forms['listing-settings']['filter-5'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-4-value'].value == ''
|
||||
assert resp.forms['listing-settings']['filter-5-value'].value == ''
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-4-value'].options] == ['', 'a', 'b']
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-5-value'].options] == ['', 'E', 'F', 'G']
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'a'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-4-value'].options] == ['', 'a', 'b']
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-5-value'].options] == ['', 'E', 'F', 'G']
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'b'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-4-value'].options] == ['', 'a', 'b']
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-5-value'].options] == ['', 'F']
|
||||
|
||||
resp.forms['listing-settings']['filter-5-value'].value = 'F'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-4-value'].options] == ['', 'a', 'b']
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-5-value'].options] == ['', 'F']
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = ''
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-4-value'].options] == ['', 'a', 'b']
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-5-value'].options] == ['', 'E', 'F', 'G']
|
||||
|
||||
|
||||
def test_backoffice_bofield_item_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
workflow = Workflow.get_default_workflow()
|
||||
workflow.id = '2'
|
||||
workflow.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(workflow)
|
||||
workflow.backoffice_fields_formdef.fields = [
|
||||
fields.ItemField(
|
||||
id='bo0-1',
|
||||
label='4th field',
|
||||
type='item',
|
||||
items=['â', 'b', 'c', 'd'],
|
||||
display_locations=['validation', 'summary', 'listings'],
|
||||
)
|
||||
]
|
||||
workflow.store()
|
||||
formdef.workflow_id = workflow.id
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
if i % 4 == 0:
|
||||
formdata.data['bo0-1'] = 'â'
|
||||
formdata.data['bo0-1_display'] = 'â'
|
||||
elif i % 4 == 1:
|
||||
formdata.data['bo0-1'] = 'b'
|
||||
formdata.data['bo0-1_display'] = 'b'
|
||||
elif i % 4 == 2:
|
||||
formdata.data['bo0-1'] = 'd'
|
||||
formdata.data['bo0-1_display'] = 'd'
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-bo0-1'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-bo0-1-value'].value == ''
|
||||
|
||||
resp.forms['listing-settings']['filter-bo0-1-value'].value = 'â'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â</td>') > 0
|
||||
assert resp.text.count('<td>b</td>') == 0
|
||||
assert resp.text.count('<td>d</td>') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-bo0-1-value'].value = 'b'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â</td>') == 0
|
||||
assert resp.text.count('<td>b</td>') > 0
|
||||
assert resp.text.count('<td>d</td>') == 0
|
||||
|
||||
if not pub.is_using_postgresql():
|
||||
# in pickle all options are always displayed
|
||||
resp.forms['listing-settings']['filter-bo0-1-value'].value = 'c'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â</td>') == 0
|
||||
assert resp.text.count('<td>b</td>') == 0
|
||||
assert resp.text.count('<td>c</td>') == 0
|
||||
|
||||
else:
|
||||
# in postgresql, option 'c' is never used so not even listed
|
||||
with pytest.raises(ValueError):
|
||||
resp.forms['listing-settings']['filter-bo0-1-value'].value = 'c'
|
||||
|
||||
# check json view used to fill select filters from javascript
|
||||
resp2 = app.get(
|
||||
resp.request.path + 'filter-options?filter_field_id=bo0-1&' + resp.request.query_string
|
||||
)
|
||||
assert [x['id'] for x in resp2.json['data']] == ['â', 'b', 'd']
|
||||
resp2 = app.get(
|
||||
resp.request.path + 'filter-options?filter_field_id=bo0-1&_search=d&' + resp.request.query_string
|
||||
)
|
||||
assert [x['id'] for x in resp2.json['data']] == ['d']
|
||||
|
||||
for status in ('all', 'waiting', 'pending', 'done', 'accepted'):
|
||||
resp.forms['listing-settings']['filter'] = status
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
resp2 = app.get(
|
||||
resp.request.path + 'filter-options?filter_field_id=bo0-1&' + resp.request.query_string
|
||||
)
|
||||
if status == 'accepted':
|
||||
assert [x['id'] for x in resp2.json['data']] == []
|
||||
else:
|
||||
assert [x['id'] for x in resp2.json['data']] == ['â', 'b', 'd']
|
||||
|
||||
|
||||
def test_backoffice_items_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields.append(
|
||||
fields.ItemsField(
|
||||
id='4',
|
||||
label='4th field',
|
||||
type='items',
|
||||
items=['â', 'b', 'c', 'd'],
|
||||
display_locations=['validation', 'summary', 'listings'],
|
||||
)
|
||||
)
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
if i % 4 == 0:
|
||||
formdata.data['4'] = ['â', 'b']
|
||||
formdata.data['4_display'] = 'â, b'
|
||||
elif i % 4 == 1:
|
||||
formdata.data['4'] = ['b', 'd']
|
||||
formdata.data['4_display'] = 'b, d'
|
||||
elif i % 4 == 2:
|
||||
formdata.data['4'] = ['â']
|
||||
formdata.data['4_display'] = 'â'
|
||||
else:
|
||||
formdata.data['4'] = []
|
||||
formdata.data['4_display'] = None
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-4'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-4-value'].value == ''
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'â'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â, b</td>') > 0
|
||||
assert resp.text.count('<td>â</td>') > 0
|
||||
assert resp.text.count('<td>b, d</td>') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'b'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â, b</td>') > 0
|
||||
assert resp.text.count('<td>â</td>') == 0
|
||||
assert resp.text.count('<td>b, d</td>') > 0
|
||||
|
||||
if pub.is_using_postgresql():
|
||||
# option 'c' is never used so not even listed
|
||||
with pytest.raises(ValueError):
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'c'
|
||||
else:
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'c'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â, b</td>') == 0
|
||||
assert resp.text.count('<td>â</td>') == 0
|
||||
assert resp.text.count('<td>b, d</td>') == 0
|
||||
assert resp.text.count('data-link') == 0 # no rows
|
||||
|
||||
|
||||
def test_backoffice_string_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields.append(
|
||||
fields.StringField(
|
||||
id='4', label='4th field', type='string', display_locations=['validation', 'summary', 'listings']
|
||||
)
|
||||
)
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
formdata.data['4'] = 'a' if bool(i % 2) else 'b'
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-4'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-4-value'].value == ''
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'a'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>a</td>') > 0
|
||||
assert resp.text.count('<td>b</td>') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'b'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>a</td>') == 0
|
||||
assert resp.text.count('<td>b</td>') > 0
|
||||
|
||||
|
||||
def test_backoffice_email_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields.append(
|
||||
fields.EmailField(
|
||||
id='4', label='4th field', type='email', display_locations=['validation', 'summary', 'listings']
|
||||
)
|
||||
)
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
formdata.data['4'] = 'a@localhost' if bool(i % 2) else 'b@localhost'
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-4'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-4-value'].value == ''
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'a@localhost'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>a@localhost</') > 0
|
||||
assert resp.text.count('>b@localhost</') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'b@localhost'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>a@localhost</') == 0
|
||||
assert resp.text.count('>b@localhost</') > 0
|
||||
|
||||
|
||||
def test_backoffice_date_filter(pub):
|
||||
if not pub.is_using_postgresql():
|
||||
pytest.skip('this requires SQL')
|
||||
return
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields.append(
|
||||
fields.DateField(
|
||||
id='4', label='4th field', type='date', display_locations=['validation', 'summary', 'listings']
|
||||
)
|
||||
)
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
formdata.data['4'] = time.strptime('2020-04-24' if bool(i % 2) else '2015-05-12', '%Y-%m-%d')
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-4'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-4-value'].value == ''
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = '2020-04-24'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>2020-04-24</td>') > 0
|
||||
assert resp.text.count('<td>2015-05-12</td>') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = '2015-05-12'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>2020-04-24</td>') == 0
|
||||
assert resp.text.count('<td>2015-05-12</td>') > 0
|
||||
|
||||
# date in a different format
|
||||
resp.forms['listing-settings']['filter-4-value'].value = '12/05/2015'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>2020-04-24</td>') == 0
|
||||
assert resp.text.count('<td>2015-05-12</td>') > 0
|
||||
|
||||
|
||||
def test_backoffice_user_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.store()
|
||||
|
||||
user1 = pub.user_class(name='userA')
|
||||
user1.store()
|
||||
user2 = pub.user_class(name='userB')
|
||||
user2.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
formdata.user_id = user1.id if bool(i % 2) else user2.id
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
|
||||
resp = app.get('/backoffice/management/form-title/?filter-user=on&filter-user-value=%s' % user1.id)
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
assert '<option value="%s" selected="selected">userA</option>' % user1.id in resp
|
||||
# check it persits on filter changes
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
|
||||
resp = app.get('/backoffice/management/form-title/?filter-user=on&filter-user-value=%s' % user2.id)
|
||||
assert resp.text.count('>userA<') == 0
|
||||
assert resp.text.count('>userB<') > 0
|
||||
|
||||
# filter on uuid
|
||||
user1.name_identifiers = ['0123456789']
|
||||
user1.store()
|
||||
resp = app.get('/backoffice/management/form-title/?filter-user-uuid=0123456789')
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
assert '<option value="%s" selected="selected">userA</option>' % user1.id in resp
|
||||
# check it persists on filter changes
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
|
||||
# check with unknown uuid
|
||||
resp = app.get('/backoffice/management/form-title/?filter-user-uuid=XXX')
|
||||
assert resp.text.count('>userA<') == 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
|
||||
|
||||
def test_backoffice_submission_agent_filter(pub):
|
||||
pub.user_class.wipe()
|
||||
user = create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.backoffice_submission_roles = user.roles
|
||||
formdef.store()
|
||||
|
||||
user1 = pub.user_class(name='userA')
|
||||
user1.store()
|
||||
user2 = pub.user_class(name='userB')
|
||||
user2.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
formdata.submission_agent_id = str(user1.id if i < 10 else user2.id)
|
||||
formdata.status = 'wf-new'
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/?limit=100')
|
||||
# enable submission-agent column
|
||||
resp.forms['listing-settings']['submission_agent'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') > 0
|
||||
# check the filter is hidden
|
||||
assert resp.pyquery.find('li[hidden] input[name=filter-submission-agent]')
|
||||
|
||||
base_url = resp.request.url
|
||||
resp = app.get(base_url + '&filter-submission-agent=on&filter-submission-agent-value=%s' % user1.id)
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
assert resp.text.count('<tr') == 11
|
||||
assert resp.pyquery.find('input[value=userA]') # displayed in sidebar
|
||||
# check it persits on filter changes
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
assert resp.text.count('<tr') == 11
|
||||
|
||||
resp = app.get(base_url + '&filter-submission-agent=on&filter-submission-agent-value=%s' % user2.id)
|
||||
assert resp.text.count('>userA<') == 0
|
||||
assert resp.text.count('>userB<') > 0
|
||||
assert resp.text.count('<tr') == 42
|
||||
|
||||
resp = app.get(
|
||||
'/backoffice/management/form-title/?limit=100&filter-submission-agent=on&filter-submission-agent-value=%s'
|
||||
% user2.id
|
||||
)
|
||||
assert resp.text.count('<tr') == 42
|
||||
|
||||
# filter on uuid
|
||||
user1.name_identifiers = ['0123456789']
|
||||
user1.store()
|
||||
resp = app.get(base_url + '&filter-submission-agent-uuid=0123456789')
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
assert resp.pyquery.find('input[value=userA]') # displayed in sidebar
|
||||
# check it persists on filter changes
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
|
||||
# check with unknown uuid
|
||||
resp = app.get(base_url + '&filter-submission-agent-uuid=XXX')
|
||||
assert resp.text.count('>userA<') == 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
|
||||
|
||||
def test_backoffice_statistics(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp = resp.click('Statistics')
|
||||
assert 'Total number of records: 50' in resp.text
|
||||
assert 'New: 17' in resp.text
|
||||
assert 'Finished: 33' in resp.text
|
||||
assert re.findall('foo.*26.*bar.*26.*bar.*48', resp.text) # percentages
|
||||
assert 'Resolution time' in resp.text
|
||||
assert 'To Status "New"' in resp.text
|
||||
assert 'To Status "Finished"' in resp.text
|
||||
assert '<h2>Filters</h2>' not in resp.text
|
||||
|
||||
resp.forms['listing-settings']['filter-end-value'] = '2013-01-01'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 0' in resp.text
|
||||
assert '<h2>Filters</h2>' in resp.text
|
||||
assert 'End: 2013-01-01' in resp.text
|
||||
|
||||
|
||||
def test_backoffice_form_category_permissions(pub):
|
||||
user = create_user(pub)
|
||||
create_environment(pub)
|
||||
|
@ -1814,111 +1140,6 @@ def test_backoffice_multi_actions_using_session_user(pub):
|
|||
assert 'session_user=admin' in content
|
||||
|
||||
|
||||
def test_backoffice_statistics_with_no_formdefs(pub):
|
||||
create_user(pub)
|
||||
create_environment(pub)
|
||||
FormDef.wipe()
|
||||
if pub.is_using_postgresql():
|
||||
from wcs.sql import drop_global_views, get_connection_and_cursor
|
||||
|
||||
conn, cur = get_connection_and_cursor()
|
||||
drop_global_views(conn, cur)
|
||||
conn.commit()
|
||||
cur.close()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/statistics')
|
||||
assert 'This site is currently empty.' in resp
|
||||
|
||||
|
||||
def test_backoffice_statistics_status_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp = resp.click('Statistics')
|
||||
assert 'filter' not in resp.forms['listing-settings'].fields # status is not displayed by default
|
||||
assert '<h2>Filters</h2>' not in resp.text
|
||||
|
||||
# add 'status' as a filter
|
||||
resp.forms['listing-settings']['filter-status'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'filter' in resp.forms['listing-settings'].fields
|
||||
assert '<h2>Filters</h2>' not in resp.text
|
||||
|
||||
assert resp.forms['listing-settings']['filter'].value == 'all'
|
||||
resp.forms['listing-settings']['filter'].value = 'pending'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 17' in resp.text
|
||||
assert '<h2>Filters</h2>' in resp.text
|
||||
assert 'Status: Pending' in resp.text
|
||||
|
||||
resp.forms['listing-settings']['filter'].value = 'done'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 33' in resp.text
|
||||
assert '<h2>Filters</h2>' in resp.text
|
||||
assert 'Status: Done' in resp.text
|
||||
|
||||
resp.forms['listing-settings']['filter'].value = 'rejected'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 0' in resp.text
|
||||
assert '<h2>Filters</h2>' in resp.text
|
||||
assert 'Status: Rejected' in resp.text
|
||||
|
||||
resp.forms['listing-settings']['filter'].value = 'all'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 50' in resp.text
|
||||
|
||||
|
||||
def test_backoffice_statistics_status_select(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp = resp.click('Statistics')
|
||||
assert 'filter-2-value' not in resp.form.fields
|
||||
|
||||
resp.forms['listing-settings']['filter-2'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
resp.forms['listing-settings']['filter-2-value'].value = 'bar'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 13' in resp.text
|
||||
|
||||
resp.forms['listing-settings']['filter-2-value'].value = 'baz'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 24' in resp.text
|
||||
|
||||
resp.forms['listing-settings']['filter-2-value'].value = 'foo'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 13' in resp.text
|
||||
assert '<h2>Filters</h2>' in resp.text
|
||||
assert '2nd field: foo' in resp.text
|
||||
|
||||
# check it's also possible to get back to the complete list
|
||||
resp.forms['listing-settings']['filter-2-value'].value = ''
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 50' in resp.text
|
||||
|
||||
# check it also works with item fields with a data source
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp = resp.click('Statistics')
|
||||
resp.forms['listing-settings']['filter-3'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
resp.forms['listing-settings']['filter-3-value'].value = 'A'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 13' in resp.text
|
||||
assert '<h2>Filters</h2>' in resp.text
|
||||
assert '3rd field: aa' in resp.text
|
||||
|
||||
# set field to be displayed by default in filters
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields[1].in_filters = True
|
||||
formdef.store()
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp = resp.click('Statistics')
|
||||
assert 'filter-2-value' in resp.form.fields
|
||||
|
||||
|
||||
def test_backoffice_map(pub):
|
||||
create_user(pub)
|
||||
create_environment(pub)
|
||||
|
@ -2400,20 +1621,6 @@ def test_backoffice_handling_post_dispatch(pub):
|
|||
assert 'HELLO WORLD' in resp.text
|
||||
|
||||
|
||||
def test_global_statisticspub(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/')
|
||||
resp = resp.click('Global statistics')
|
||||
assert 'Total count: 70' in resp.text
|
||||
|
||||
resp.forms[0]['start'] = '2014-01-01'
|
||||
resp.forms[0]['end'] = '2014-12-31'
|
||||
resp = resp.forms[0].submit()
|
||||
assert 'Total count: 20' in resp.text
|
||||
|
||||
|
||||
def test_backoffice_wscall_failure_display(http_requests, pub):
|
||||
user = create_user(pub)
|
||||
create_environment(pub)
|
||||
|
@ -5654,22 +4861,6 @@ def test_backoffice_after_submit_location(pub):
|
|||
assert resp.location == 'http://example.net/backoffice/management/form-title/%s/#' % formdata.id
|
||||
|
||||
|
||||
def test_backoffice_table_varname_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/?filter-foo=A')
|
||||
# check filter is applied
|
||||
assert resp.text.count('<tr') == 6
|
||||
# and kept in parameters
|
||||
assert resp.forms['listing-settings']['filter-3'].checked
|
||||
assert resp.forms['listing-settings']['filter-3-value'].value == 'A'
|
||||
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<tr') == 6
|
||||
|
||||
|
||||
def test_backoffice_http_basic_auth(pub):
|
||||
access = ApiAccess()
|
||||
access.name = 'test'
|
||||
|
|
|
@ -0,0 +1,710 @@
|
|||
import datetime
|
||||
import os
|
||||
import time
|
||||
|
||||
import pytest
|
||||
|
||||
from wcs import fields
|
||||
from wcs.formdef import FormDef
|
||||
from wcs.qommon.http_request import HTTPRequest
|
||||
from wcs.workflows import Workflow, WorkflowBackofficeFieldsFormDef
|
||||
|
||||
from ..utilities import clean_temporary_pub, create_temporary_pub, get_app, login
|
||||
from .test_all import create_environment, create_superuser
|
||||
|
||||
|
||||
def pytest_generate_tests(metafunc):
|
||||
if 'pub' in metafunc.fixturenames:
|
||||
metafunc.parametrize('pub', ['pickle', 'sql'], indirect=True)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def pub(request, emails):
|
||||
pub = create_temporary_pub(sql_mode=bool('sql' in request.param))
|
||||
|
||||
req = HTTPRequest(None, {'SCRIPT_NAME': '/', 'SERVER_NAME': 'example.net'})
|
||||
pub.set_app_dir(req)
|
||||
pub.cfg['identification'] = {'methods': ['password']}
|
||||
pub.cfg['language'] = {'language': 'en'}
|
||||
pub.write_cfg()
|
||||
with open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w') as fd:
|
||||
fd.write(
|
||||
'''
|
||||
[api-secrets]
|
||||
coucou = 1234
|
||||
'''
|
||||
)
|
||||
|
||||
return pub
|
||||
|
||||
|
||||
def teardown_module(module):
|
||||
clean_temporary_pub()
|
||||
|
||||
|
||||
def test_backoffice_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
assert resp.forms['listing-settings']['filter-status'].checked is True
|
||||
resp.forms['listing-settings']['filter-status'].checked = False
|
||||
resp.forms['listing-settings']['filter-2'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert '<select name="filter">' not in resp.text
|
||||
|
||||
resp.forms['listing-settings']['filter-2-value'] = 'baz'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>baz</td>') == 8
|
||||
assert resp.text.count('<td>foo</td>') == 0
|
||||
assert resp.text.count('<td>bar</td>') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-start'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert '>invalid date<' not in resp
|
||||
resp.forms['listing-settings']['filter-start-value'] = datetime.datetime(2015, 2, 1).strftime('%Y-%m-%d')
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>baz</td>') == 0
|
||||
resp.forms['listing-settings']['filter-start-value'] = datetime.datetime(2014, 2, 1).strftime('%Y-%m-%d')
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>baz</td>') == 8
|
||||
|
||||
# check there's no crash on invalid date values
|
||||
resp.forms['listing-settings']['filter-start-value'] = 'whatever'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>baz</td>') == 8
|
||||
|
||||
# check two-digit years are handled correctly
|
||||
resp.forms['listing-settings']['filter-start-value'] = datetime.datetime(2014, 2, 1).strftime('%y-%m-%d')
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>baz</td>') == 8
|
||||
|
||||
# and dates being typed in are properly ignored
|
||||
resp.forms['listing-settings']['filter-start-value'] = '0020-02-01'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>baz</td>') == 8
|
||||
|
||||
# check it's also ok for end filter
|
||||
resp.forms['listing-settings']['filter-end'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
resp.forms['listing-settings']['filter-end-value'] = datetime.datetime(2014, 2, 2).strftime('%y-%m-%d')
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>baz</td>') == 0
|
||||
|
||||
|
||||
def test_backoffice_default_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
assert 'filter-2-value' not in resp.forms['listing-settings'].fields
|
||||
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields[1].in_filters = True
|
||||
formdef.store()
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
assert 'filter-2-value' in resp.forms['listing-settings'].fields
|
||||
|
||||
# same check for items field
|
||||
formdef.fields.append(
|
||||
fields.ItemsField(id='4', label='4th field', type='items', items=['foo', 'bar', 'baz'])
|
||||
)
|
||||
formdef.store()
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
assert 'filter-4-value' not in resp.forms['listing-settings'].fields
|
||||
|
||||
formdef.fields[-1].in_filters = True
|
||||
formdef.store()
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
assert 'filter-4-value' in resp.forms['listing-settings'].fields
|
||||
|
||||
|
||||
def test_backoffice_bool_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields.append(
|
||||
fields.BoolField(
|
||||
id='4', label='4th field', type='bool', display_locations=['validation', 'summary', 'listings']
|
||||
)
|
||||
)
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
formdata.data['4'] = bool(i % 2)
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-4'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-4-value'].value == ''
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'true'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>Yes</td>') > 0
|
||||
assert resp.text.count('<td>No</td>') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'false'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>Yes</td>') == 0
|
||||
assert resp.text.count('<td>No</td>') > 0
|
||||
|
||||
|
||||
def test_backoffice_item_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields.append(
|
||||
fields.ItemField(
|
||||
id='4',
|
||||
label='4th field',
|
||||
type='item',
|
||||
items=['â', 'b', 'c', 'd'],
|
||||
display_locations=['validation', 'summary', 'listings'],
|
||||
)
|
||||
)
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
if i % 4 == 0:
|
||||
formdata.data['4'] = 'â'
|
||||
formdata.data['4_display'] = 'â'
|
||||
elif i % 4 == 1:
|
||||
formdata.data['4'] = 'b'
|
||||
formdata.data['4_display'] = 'b'
|
||||
elif i % 4 == 2:
|
||||
formdata.data['4'] = 'd'
|
||||
formdata.data['4_display'] = 'd'
|
||||
else:
|
||||
formdata.data['4'] = ''
|
||||
formdata.data['4_display'] = ''
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-4'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-4-value'].value == ''
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'â'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â</td>') > 0
|
||||
assert resp.text.count('<td>b</td>') == 0
|
||||
assert resp.text.count('<td>d</td>') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'b'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â</td>') == 0
|
||||
assert resp.text.count('<td>b</td>') > 0
|
||||
assert resp.text.count('<td>d</td>') == 0
|
||||
|
||||
if not pub.is_using_postgresql():
|
||||
# in pickle all options are always displayed
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'c'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â</td>') == 0
|
||||
assert resp.text.count('<td>b</td>') == 0
|
||||
assert resp.text.count('<td>c</td>') == 0
|
||||
|
||||
else:
|
||||
# in postgresql, option 'c' is never used so not even listed
|
||||
with pytest.raises(ValueError):
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'c'
|
||||
|
||||
# check json view used to fill select filters from javascript
|
||||
resp2 = app.get(resp.request.path + 'filter-options?filter_field_id=4&' + resp.request.query_string)
|
||||
assert [x['id'] for x in resp2.json['data']] == ['â', 'b', 'd']
|
||||
resp2 = app.get(
|
||||
resp.request.path + 'filter-options?filter_field_id=4&_search=d&' + resp.request.query_string
|
||||
)
|
||||
assert [x['id'] for x in resp2.json['data']] == ['d']
|
||||
resp2 = app.get(
|
||||
resp.request.path + 'filter-options?filter_field_id=7&' + resp.request.query_string, status=404
|
||||
)
|
||||
|
||||
for status in ('all', 'waiting', 'pending', 'done', 'accepted'):
|
||||
resp.forms['listing-settings']['filter'] = status
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
resp2 = app.get(
|
||||
resp.request.path + 'filter-options?filter_field_id=4&' + resp.request.query_string
|
||||
)
|
||||
if status == 'accepted':
|
||||
assert [x['id'] for x in resp2.json['data']] == []
|
||||
else:
|
||||
assert [x['id'] for x in resp2.json['data']] == ['â', 'b', 'd']
|
||||
|
||||
|
||||
def test_backoffice_item_double_filter(pub):
|
||||
if not pub.is_using_postgresql():
|
||||
pytest.skip('this requires SQL')
|
||||
return
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields.append(
|
||||
fields.ItemField(
|
||||
id='4',
|
||||
label='4th field',
|
||||
type='item',
|
||||
items=['a', 'b', 'c', 'd'],
|
||||
display_locations=['validation', 'summary', 'listings'],
|
||||
)
|
||||
)
|
||||
formdef.fields.append(
|
||||
fields.ItemField(
|
||||
id='5',
|
||||
label='5th field',
|
||||
type='item',
|
||||
items=['E', 'F', 'G', 'H'],
|
||||
display_locations=['validation', 'summary', 'listings'],
|
||||
)
|
||||
)
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
formdata.jump_status('new')
|
||||
if i % 4 == 0:
|
||||
formdata.data['4'] = 'a'
|
||||
formdata.data['4_display'] = 'a'
|
||||
formdata.data['5'] = 'E'
|
||||
formdata.data['5_display'] = 'E'
|
||||
elif i % 4 == 1:
|
||||
formdata.data['4'] = 'a'
|
||||
formdata.data['4_display'] = 'a'
|
||||
formdata.data['5'] = 'F'
|
||||
formdata.data['5_display'] = 'F'
|
||||
elif i % 4 == 2:
|
||||
formdata.data['4'] = 'a'
|
||||
formdata.data['4_display'] = 'a'
|
||||
formdata.data['5'] = 'G'
|
||||
formdata.data['5_display'] = 'G'
|
||||
elif i % 4 == 3:
|
||||
formdata.data['4'] = 'b'
|
||||
formdata.data['4_display'] = 'b'
|
||||
formdata.data['5'] = 'F'
|
||||
formdata.data['5_display'] = 'F'
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-4'].checked = True
|
||||
resp.forms['listing-settings']['filter-5'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-4-value'].value == ''
|
||||
assert resp.forms['listing-settings']['filter-5-value'].value == ''
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-4-value'].options] == ['', 'a', 'b']
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-5-value'].options] == ['', 'E', 'F', 'G']
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'a'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-4-value'].options] == ['', 'a', 'b']
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-5-value'].options] == ['', 'E', 'F', 'G']
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'b'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-4-value'].options] == ['', 'a', 'b']
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-5-value'].options] == ['', 'F']
|
||||
|
||||
resp.forms['listing-settings']['filter-5-value'].value = 'F'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-4-value'].options] == ['', 'a', 'b']
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-5-value'].options] == ['', 'F']
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = ''
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-4-value'].options] == ['', 'a', 'b']
|
||||
assert [x[0] for x in resp.forms['listing-settings']['filter-5-value'].options] == ['', 'E', 'F', 'G']
|
||||
|
||||
|
||||
def test_backoffice_bofield_item_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
workflow = Workflow.get_default_workflow()
|
||||
workflow.id = '2'
|
||||
workflow.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(workflow)
|
||||
workflow.backoffice_fields_formdef.fields = [
|
||||
fields.ItemField(
|
||||
id='bo0-1',
|
||||
label='4th field',
|
||||
type='item',
|
||||
items=['â', 'b', 'c', 'd'],
|
||||
display_locations=['validation', 'summary', 'listings'],
|
||||
)
|
||||
]
|
||||
workflow.store()
|
||||
formdef.workflow_id = workflow.id
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
if i % 4 == 0:
|
||||
formdata.data['bo0-1'] = 'â'
|
||||
formdata.data['bo0-1_display'] = 'â'
|
||||
elif i % 4 == 1:
|
||||
formdata.data['bo0-1'] = 'b'
|
||||
formdata.data['bo0-1_display'] = 'b'
|
||||
elif i % 4 == 2:
|
||||
formdata.data['bo0-1'] = 'd'
|
||||
formdata.data['bo0-1_display'] = 'd'
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-bo0-1'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-bo0-1-value'].value == ''
|
||||
|
||||
resp.forms['listing-settings']['filter-bo0-1-value'].value = 'â'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â</td>') > 0
|
||||
assert resp.text.count('<td>b</td>') == 0
|
||||
assert resp.text.count('<td>d</td>') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-bo0-1-value'].value = 'b'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â</td>') == 0
|
||||
assert resp.text.count('<td>b</td>') > 0
|
||||
assert resp.text.count('<td>d</td>') == 0
|
||||
|
||||
if not pub.is_using_postgresql():
|
||||
# in pickle all options are always displayed
|
||||
resp.forms['listing-settings']['filter-bo0-1-value'].value = 'c'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â</td>') == 0
|
||||
assert resp.text.count('<td>b</td>') == 0
|
||||
assert resp.text.count('<td>c</td>') == 0
|
||||
|
||||
else:
|
||||
# in postgresql, option 'c' is never used so not even listed
|
||||
with pytest.raises(ValueError):
|
||||
resp.forms['listing-settings']['filter-bo0-1-value'].value = 'c'
|
||||
|
||||
# check json view used to fill select filters from javascript
|
||||
resp2 = app.get(
|
||||
resp.request.path + 'filter-options?filter_field_id=bo0-1&' + resp.request.query_string
|
||||
)
|
||||
assert [x['id'] for x in resp2.json['data']] == ['â', 'b', 'd']
|
||||
resp2 = app.get(
|
||||
resp.request.path + 'filter-options?filter_field_id=bo0-1&_search=d&' + resp.request.query_string
|
||||
)
|
||||
assert [x['id'] for x in resp2.json['data']] == ['d']
|
||||
|
||||
for status in ('all', 'waiting', 'pending', 'done', 'accepted'):
|
||||
resp.forms['listing-settings']['filter'] = status
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
resp2 = app.get(
|
||||
resp.request.path + 'filter-options?filter_field_id=bo0-1&' + resp.request.query_string
|
||||
)
|
||||
if status == 'accepted':
|
||||
assert [x['id'] for x in resp2.json['data']] == []
|
||||
else:
|
||||
assert [x['id'] for x in resp2.json['data']] == ['â', 'b', 'd']
|
||||
|
||||
|
||||
def test_backoffice_items_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields.append(
|
||||
fields.ItemsField(
|
||||
id='4',
|
||||
label='4th field',
|
||||
type='items',
|
||||
items=['â', 'b', 'c', 'd'],
|
||||
display_locations=['validation', 'summary', 'listings'],
|
||||
)
|
||||
)
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
if i % 4 == 0:
|
||||
formdata.data['4'] = ['â', 'b']
|
||||
formdata.data['4_display'] = 'â, b'
|
||||
elif i % 4 == 1:
|
||||
formdata.data['4'] = ['b', 'd']
|
||||
formdata.data['4_display'] = 'b, d'
|
||||
elif i % 4 == 2:
|
||||
formdata.data['4'] = ['â']
|
||||
formdata.data['4_display'] = 'â'
|
||||
else:
|
||||
formdata.data['4'] = []
|
||||
formdata.data['4_display'] = None
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-4'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-4-value'].value == ''
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'â'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â, b</td>') > 0
|
||||
assert resp.text.count('<td>â</td>') > 0
|
||||
assert resp.text.count('<td>b, d</td>') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'b'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â, b</td>') > 0
|
||||
assert resp.text.count('<td>â</td>') == 0
|
||||
assert resp.text.count('<td>b, d</td>') > 0
|
||||
|
||||
if pub.is_using_postgresql():
|
||||
# option 'c' is never used so not even listed
|
||||
with pytest.raises(ValueError):
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'c'
|
||||
else:
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'c'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>â, b</td>') == 0
|
||||
assert resp.text.count('<td>â</td>') == 0
|
||||
assert resp.text.count('<td>b, d</td>') == 0
|
||||
assert resp.text.count('data-link') == 0 # no rows
|
||||
|
||||
|
||||
def test_backoffice_string_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields.append(
|
||||
fields.StringField(
|
||||
id='4', label='4th field', type='string', display_locations=['validation', 'summary', 'listings']
|
||||
)
|
||||
)
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
formdata.data['4'] = 'a' if bool(i % 2) else 'b'
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-4'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-4-value'].value == ''
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'a'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>a</td>') > 0
|
||||
assert resp.text.count('<td>b</td>') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'b'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>a</td>') == 0
|
||||
assert resp.text.count('<td>b</td>') > 0
|
||||
|
||||
|
||||
def test_backoffice_email_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields.append(
|
||||
fields.EmailField(
|
||||
id='4', label='4th field', type='email', display_locations=['validation', 'summary', 'listings']
|
||||
)
|
||||
)
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
formdata.data['4'] = 'a@localhost' if bool(i % 2) else 'b@localhost'
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-4'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-4-value'].value == ''
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'a@localhost'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>a@localhost</') > 0
|
||||
assert resp.text.count('>b@localhost</') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = 'b@localhost'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>a@localhost</') == 0
|
||||
assert resp.text.count('>b@localhost</') > 0
|
||||
|
||||
|
||||
def test_backoffice_date_filter(pub):
|
||||
if not pub.is_using_postgresql():
|
||||
pytest.skip('this requires SQL')
|
||||
return
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields.append(
|
||||
fields.DateField(
|
||||
id='4', label='4th field', type='date', display_locations=['validation', 'summary', 'listings']
|
||||
)
|
||||
)
|
||||
formdef.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
formdata.data['4'] = time.strptime('2020-04-24' if bool(i % 2) else '2015-05-12', '%Y-%m-%d')
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp.forms['listing-settings']['filter-4'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
|
||||
assert resp.forms['listing-settings']['filter-4-value'].value == ''
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = '2020-04-24'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>2020-04-24</td>') > 0
|
||||
assert resp.text.count('<td>2015-05-12</td>') == 0
|
||||
|
||||
resp.forms['listing-settings']['filter-4-value'].value = '2015-05-12'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>2020-04-24</td>') == 0
|
||||
assert resp.text.count('<td>2015-05-12</td>') > 0
|
||||
|
||||
# date in a different format
|
||||
resp.forms['listing-settings']['filter-4-value'].value = '12/05/2015'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<td>2020-04-24</td>') == 0
|
||||
assert resp.text.count('<td>2015-05-12</td>') > 0
|
||||
|
||||
|
||||
def test_backoffice_user_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.store()
|
||||
|
||||
user1 = pub.user_class(name='userA')
|
||||
user1.store()
|
||||
user2 = pub.user_class(name='userB')
|
||||
user2.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
formdata.user_id = user1.id if bool(i % 2) else user2.id
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
|
||||
resp = app.get('/backoffice/management/form-title/?filter-user=on&filter-user-value=%s' % user1.id)
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
assert '<option value="%s" selected="selected">userA</option>' % user1.id in resp
|
||||
# check it persits on filter changes
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
|
||||
resp = app.get('/backoffice/management/form-title/?filter-user=on&filter-user-value=%s' % user2.id)
|
||||
assert resp.text.count('>userA<') == 0
|
||||
assert resp.text.count('>userB<') > 0
|
||||
|
||||
# filter on uuid
|
||||
user1.name_identifiers = ['0123456789']
|
||||
user1.store()
|
||||
resp = app.get('/backoffice/management/form-title/?filter-user-uuid=0123456789')
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
assert '<option value="%s" selected="selected">userA</option>' % user1.id in resp
|
||||
# check it persists on filter changes
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
|
||||
# check with unknown uuid
|
||||
resp = app.get('/backoffice/management/form-title/?filter-user-uuid=XXX')
|
||||
assert resp.text.count('>userA<') == 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
|
||||
|
||||
def test_backoffice_submission_agent_filter(pub):
|
||||
pub.user_class.wipe()
|
||||
user = create_superuser(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.backoffice_submission_roles = user.roles
|
||||
formdef.store()
|
||||
|
||||
user1 = pub.user_class(name='userA')
|
||||
user1.store()
|
||||
user2 = pub.user_class(name='userB')
|
||||
user2.store()
|
||||
|
||||
for i, formdata in enumerate(formdef.data_class().select()):
|
||||
formdata.submission_agent_id = str(user1.id if i < 10 else user2.id)
|
||||
formdata.status = 'wf-new'
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/?limit=100')
|
||||
# enable submission-agent column
|
||||
resp.forms['listing-settings']['submission_agent'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') > 0
|
||||
# check the filter is hidden
|
||||
assert resp.pyquery.find('li[hidden] input[name=filter-submission-agent]')
|
||||
|
||||
base_url = resp.request.url
|
||||
resp = app.get(base_url + '&filter-submission-agent=on&filter-submission-agent-value=%s' % user1.id)
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
assert resp.text.count('<tr') == 11
|
||||
assert resp.pyquery.find('input[value=userA]') # displayed in sidebar
|
||||
# check it persits on filter changes
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
assert resp.text.count('<tr') == 11
|
||||
|
||||
resp = app.get(base_url + '&filter-submission-agent=on&filter-submission-agent-value=%s' % user2.id)
|
||||
assert resp.text.count('>userA<') == 0
|
||||
assert resp.text.count('>userB<') > 0
|
||||
assert resp.text.count('<tr') == 42
|
||||
|
||||
resp = app.get(
|
||||
'/backoffice/management/form-title/?limit=100&filter-submission-agent=on&filter-submission-agent-value=%s'
|
||||
% user2.id
|
||||
)
|
||||
assert resp.text.count('<tr') == 42
|
||||
|
||||
# filter on uuid
|
||||
user1.name_identifiers = ['0123456789']
|
||||
user1.store()
|
||||
resp = app.get(base_url + '&filter-submission-agent-uuid=0123456789')
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
assert resp.pyquery.find('input[value=userA]') # displayed in sidebar
|
||||
# check it persists on filter changes
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
|
||||
# check with unknown uuid
|
||||
resp = app.get(base_url + '&filter-submission-agent-uuid=XXX')
|
||||
assert resp.text.count('>userA<') == 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
|
||||
|
||||
def test_backoffice_table_varname_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/?filter-foo=A')
|
||||
# check filter is applied
|
||||
assert resp.text.count('<tr') == 6
|
||||
# and kept in parameters
|
||||
assert resp.forms['listing-settings']['filter-3'].checked
|
||||
assert resp.forms['listing-settings']['filter-3-value'].value == 'A'
|
||||
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('<tr') == 6
|
|
@ -0,0 +1,180 @@
|
|||
import os
|
||||
import re
|
||||
|
||||
import pytest
|
||||
|
||||
from wcs.formdef import FormDef
|
||||
from wcs.qommon.http_request import HTTPRequest
|
||||
|
||||
from ..utilities import clean_temporary_pub, create_temporary_pub, get_app, login
|
||||
from .test_all import create_environment, create_superuser, create_user
|
||||
|
||||
|
||||
def pytest_generate_tests(metafunc):
|
||||
if 'pub' in metafunc.fixturenames:
|
||||
metafunc.parametrize('pub', ['pickle', 'sql'], indirect=True)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def pub(request, emails):
|
||||
pub = create_temporary_pub(sql_mode=bool('sql' in request.param))
|
||||
|
||||
req = HTTPRequest(None, {'SCRIPT_NAME': '/', 'SERVER_NAME': 'example.net'})
|
||||
pub.set_app_dir(req)
|
||||
pub.cfg['identification'] = {'methods': ['password']}
|
||||
pub.cfg['language'] = {'language': 'en'}
|
||||
pub.write_cfg()
|
||||
with open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w') as fd:
|
||||
fd.write(
|
||||
'''
|
||||
[api-secrets]
|
||||
coucou = 1234
|
||||
'''
|
||||
)
|
||||
|
||||
return pub
|
||||
|
||||
|
||||
def teardown_module(module):
|
||||
clean_temporary_pub()
|
||||
|
||||
|
||||
def test_backoffice_statistics_with_no_formdefs(pub):
|
||||
create_user(pub)
|
||||
create_environment(pub)
|
||||
FormDef.wipe()
|
||||
if pub.is_using_postgresql():
|
||||
from wcs.sql import drop_global_views, get_connection_and_cursor
|
||||
|
||||
conn, cur = get_connection_and_cursor()
|
||||
drop_global_views(conn, cur)
|
||||
conn.commit()
|
||||
cur.close()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/statistics')
|
||||
assert 'This site is currently empty.' in resp
|
||||
|
||||
|
||||
def test_backoffice_statistics_status_filter(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp = resp.click('Statistics')
|
||||
assert 'filter' not in resp.forms['listing-settings'].fields # status is not displayed by default
|
||||
assert '<h2>Filters</h2>' not in resp.text
|
||||
|
||||
# add 'status' as a filter
|
||||
resp.forms['listing-settings']['filter-status'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'filter' in resp.forms['listing-settings'].fields
|
||||
assert '<h2>Filters</h2>' not in resp.text
|
||||
|
||||
assert resp.forms['listing-settings']['filter'].value == 'all'
|
||||
resp.forms['listing-settings']['filter'].value = 'pending'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 17' in resp.text
|
||||
assert '<h2>Filters</h2>' in resp.text
|
||||
assert 'Status: Pending' in resp.text
|
||||
|
||||
resp.forms['listing-settings']['filter'].value = 'done'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 33' in resp.text
|
||||
assert '<h2>Filters</h2>' in resp.text
|
||||
assert 'Status: Done' in resp.text
|
||||
|
||||
resp.forms['listing-settings']['filter'].value = 'rejected'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 0' in resp.text
|
||||
assert '<h2>Filters</h2>' in resp.text
|
||||
assert 'Status: Rejected' in resp.text
|
||||
|
||||
resp.forms['listing-settings']['filter'].value = 'all'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 50' in resp.text
|
||||
|
||||
|
||||
def test_backoffice_statistics_status_select(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp = resp.click('Statistics')
|
||||
assert 'filter-2-value' not in resp.form.fields
|
||||
|
||||
resp.forms['listing-settings']['filter-2'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
resp.forms['listing-settings']['filter-2-value'].value = 'bar'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 13' in resp.text
|
||||
|
||||
resp.forms['listing-settings']['filter-2-value'].value = 'baz'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 24' in resp.text
|
||||
|
||||
resp.forms['listing-settings']['filter-2-value'].value = 'foo'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 13' in resp.text
|
||||
assert '<h2>Filters</h2>' in resp.text
|
||||
assert '2nd field: foo' in resp.text
|
||||
|
||||
# check it's also possible to get back to the complete list
|
||||
resp.forms['listing-settings']['filter-2-value'].value = ''
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 50' in resp.text
|
||||
|
||||
# check it also works with item fields with a data source
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp = resp.click('Statistics')
|
||||
resp.forms['listing-settings']['filter-3'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
resp.forms['listing-settings']['filter-3-value'].value = 'A'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 13' in resp.text
|
||||
assert '<h2>Filters</h2>' in resp.text
|
||||
assert '3rd field: aa' in resp.text
|
||||
|
||||
# set field to be displayed by default in filters
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields[1].in_filters = True
|
||||
formdef.store()
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp = resp.click('Statistics')
|
||||
assert 'filter-2-value' in resp.form.fields
|
||||
|
||||
|
||||
def test_global_statisticspub(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/')
|
||||
resp = resp.click('Global statistics')
|
||||
assert 'Total count: 70' in resp.text
|
||||
|
||||
resp.forms[0]['start'] = '2014-01-01'
|
||||
resp.forms[0]['end'] = '2014-12-31'
|
||||
resp = resp.forms[0].submit()
|
||||
assert 'Total count: 20' in resp.text
|
||||
|
||||
|
||||
def test_backoffice_statistics(pub):
|
||||
create_superuser(pub)
|
||||
create_environment(pub)
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp = resp.click('Statistics')
|
||||
assert 'Total number of records: 50' in resp.text
|
||||
assert 'New: 17' in resp.text
|
||||
assert 'Finished: 33' in resp.text
|
||||
assert re.findall('foo.*26.*bar.*26.*bar.*48', resp.text) # percentages
|
||||
assert 'Resolution time' in resp.text
|
||||
assert 'To Status "New"' in resp.text
|
||||
assert 'To Status "Finished"' in resp.text
|
||||
assert '<h2>Filters</h2>' not in resp.text
|
||||
|
||||
resp.forms['listing-settings']['filter-end-value'] = '2013-01-01'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert 'Total number of records: 0' in resp.text
|
||||
assert '<h2>Filters</h2>' in resp.text
|
||||
assert 'End: 2013-01-01' in resp.text
|
Loading…
Reference in New Issue