5897 |
5897 |
assert formdef.data_class().select()[0].data['0_display'] == 'Xattr%sY' % baz_id
|
5898 |
5898 |
|
5899 |
5899 |
|
|
5900 |
def test_item_field_from_custom_view_on_cards_filter_status(pub):
|
|
5901 |
pub.role_class.wipe()
|
|
5902 |
pub.custom_view_class.wipe()
|
|
5903 |
|
|
5904 |
user = create_user(pub)
|
|
5905 |
role = pub.role_class(name='xxx')
|
|
5906 |
role.store()
|
|
5907 |
user.roles = [role.id]
|
|
5908 |
user.is_admin = True
|
|
5909 |
user.store()
|
|
5910 |
|
|
5911 |
formdef = create_formdef()
|
|
5912 |
formdef.data_class().wipe()
|
|
5913 |
|
|
5914 |
card_workflow = CardDef.get_default_workflow()
|
|
5915 |
st1 = card_workflow.add_status('Status1', 'st1')
|
|
5916 |
card_workflow.id = None
|
|
5917 |
card_workflow.store()
|
|
5918 |
|
|
5919 |
CardDef.wipe()
|
|
5920 |
carddef = CardDef()
|
|
5921 |
carddef.workflow_id = card_workflow.id
|
|
5922 |
carddef.name = 'items'
|
|
5923 |
carddef.digest_templates = {'default': '{{form_var_attr}}'}
|
|
5924 |
carddef.workflow_roles = {'_editor': user.roles[0]}
|
|
5925 |
carddef.fields = [
|
|
5926 |
fields.ItemField(id='0', type='item', label='item', varname='item', items=['foo', 'bar', 'baz']),
|
|
5927 |
fields.StringField(id='1', type='string', label='string', varname='attr'),
|
|
5928 |
]
|
|
5929 |
carddef.store()
|
|
5930 |
carddef.data_class().wipe()
|
|
5931 |
for i, value in enumerate(['foo', 'bar', 'baz']):
|
|
5932 |
carddata = carddef.data_class()()
|
|
5933 |
carddata.data = {
|
|
5934 |
'0': value,
|
|
5935 |
'0_display': value,
|
|
5936 |
'1': 'attr%s' % (i + 1),
|
|
5937 |
}
|
|
5938 |
carddata.just_created()
|
|
5939 |
carddata.store()
|
|
5940 |
|
|
5941 |
carddata.jump_status(st1.id)
|
|
5942 |
carddata.store()
|
|
5943 |
|
|
5944 |
# create custom view
|
|
5945 |
app = login(get_app(pub), username='foo', password='foo')
|
|
5946 |
|
|
5947 |
resp = app.get('/backoffice/data/items/')
|
|
5948 |
resp.forms['listing-settings']['filter-status'].checked = True
|
|
5949 |
resp = resp.forms['listing-settings'].submit()
|
|
5950 |
resp.forms['listing-settings']['filter-operator'].value = 'ne'
|
|
5951 |
resp.forms['listing-settings']['filter'].value = 'st1'
|
|
5952 |
resp = resp.forms['listing-settings'].submit()
|
|
5953 |
assert resp.pyquery('tbody tr').length == 2
|
|
5954 |
|
|
5955 |
resp.forms['save-custom-view']['title'] = 'as data source'
|
|
5956 |
resp.forms['save-custom-view']['visibility'] = 'datasource'
|
|
5957 |
resp = resp.forms['save-custom-view'].submit()
|
|
5958 |
|
|
5959 |
custom_view = pub.custom_view_class.select()[0]
|
|
5960 |
assert custom_view.filters == {'filter-operator': 'ne', 'filter': 'st1', 'filter-status': 'on'}
|
|
5961 |
|
|
5962 |
# use custom view as source
|
|
5963 |
ds = {'type': 'carddef:%s:%s' % (carddef.url_name, custom_view.slug)}
|
|
5964 |
formdef.fields = [
|
|
5965 |
fields.ItemField(id='0', label='string', type='item', data_source=ds, display_disabled_items=True)
|
|
5966 |
]
|
|
5967 |
formdef.store()
|
|
5968 |
|
|
5969 |
resp = get_app(pub).get('/test/')
|
|
5970 |
assert len(resp.form['f0'].options) == 2
|
|
5971 |
assert {x[2] for x in resp.form['f0'].options} == {'attr1', 'attr2'}
|
|
5972 |
|
|
5973 |
custom_view.filters['filter-operator'] = 'eq'
|
|
5974 |
custom_view.store()
|
|
5975 |
resp = get_app(pub).get('/test/')
|
|
5976 |
assert [x[2] for x in resp.form['f0'].options] == ['attr3']
|
|
5977 |
|
|
5978 |
custom_view.filters['filter'] = 'all'
|
|
5979 |
custom_view.store()
|
|
5980 |
resp = get_app(pub).get('/test/')
|
|
5981 |
assert len(resp.form['f0'].options) == 3
|
|
5982 |
|
|
5983 |
custom_view.filters['filter'] = 'all'
|
|
5984 |
custom_view.filters['filter-operator'] = 'ne'
|
|
5985 |
custom_view.store()
|
|
5986 |
resp = get_app(pub).get('/test/')
|
|
5987 |
assert len(resp.form['f0'].options) == 1
|
|
5988 |
assert [x[2] for x in resp.form['f0'].options] == ['---']
|
|
5989 |
|
|
5990 |
|
5900 |
5991 |
@pytest.mark.parametrize('filter_value', ['{{ "foo" }}', 'foo'])
|
5901 |
5992 |
def test_items_field_from_custom_view_on_cards(pub, filter_value):
|
5902 |
5993 |
pub.role_class.wipe()
|