1 |
1 |
import hashlib
|
2 |
2 |
import io
|
|
3 |
import itertools
|
3 |
4 |
import json
|
4 |
5 |
import os
|
5 |
6 |
import re
|
... | ... | |
5512 |
5513 |
assert formdef.data_class().select()[0].data['0_structured']['item'] == 'baz'
|
5513 |
5514 |
|
5514 |
5515 |
|
|
5516 |
@pytest.mark.parametrize('filter_value', ['{{ "foo,bar" }}', 'foo,bar', '{{ "foo,bar"|split:","|list }}'])
|
|
5517 |
def test_items_field_from_custom_view_on_cards(pub, filter_value):
|
|
5518 |
pub.role_class.wipe()
|
|
5519 |
pub.custom_view_class.wipe()
|
|
5520 |
|
|
5521 |
user = create_user(pub)
|
|
5522 |
role = pub.role_class(name='xxx')
|
|
5523 |
role.store()
|
|
5524 |
user.roles = [role.id]
|
|
5525 |
user.is_admin = True
|
|
5526 |
user.store()
|
|
5527 |
|
|
5528 |
formdef = create_formdef()
|
|
5529 |
formdef.data_class().wipe()
|
|
5530 |
|
|
5531 |
items = ['foo', 'bar', 'baz', 'buz']
|
|
5532 |
CardDef.wipe()
|
|
5533 |
carddef = CardDef()
|
|
5534 |
carddef.name = 'items'
|
|
5535 |
carddef.digest_templates = {'default': '{{form_var_attr}} - {{form_var_item}}'}
|
|
5536 |
carddef.workflow_roles = {'_editor': user.roles[0]}
|
|
5537 |
carddef.fields = [
|
|
5538 |
fields.ItemsField(id='0', type='items', label='item', varname='item', items=items),
|
|
5539 |
fields.StringField(id='1', type='string', label='string', varname='attr'),
|
|
5540 |
]
|
|
5541 |
carddef.store()
|
|
5542 |
carddef.data_class().wipe()
|
|
5543 |
foo_bar_ids = set()
|
|
5544 |
for i, (v1, v2) in enumerate([(v1, v2) for (v1, v2) in itertools.product(items, items) if v1 != v2]):
|
|
5545 |
carddata = carddef.data_class()()
|
|
5546 |
carddata.data = {
|
|
5547 |
'0': [v1, v2],
|
|
5548 |
'0_display': '%s,%s' % (v1, v2),
|
|
5549 |
'1': 'attr%s' % i,
|
|
5550 |
}
|
|
5551 |
carddata.just_created()
|
|
5552 |
carddata.store()
|
|
5553 |
if {v1, v2} & {'foo', 'bar'}:
|
|
5554 |
foo_bar_ids.add(str(carddata.id))
|
|
5555 |
|
|
5556 |
# create custom view
|
|
5557 |
app = login(get_app(pub), username='foo', password='foo')
|
|
5558 |
|
|
5559 |
# we must force the ordering to have a determinist test
|
|
5560 |
resp = app.get('/backoffice/data/items/?order_by=id')
|
|
5561 |
assert resp.text.count('<tr') == 13 # thead + 12 items (max per page)
|
|
5562 |
resp.forms['listing-settings']['filter-0'].checked = True
|
|
5563 |
resp = resp.forms['listing-settings'].submit()
|
|
5564 |
|
|
5565 |
resp.forms['listing-settings']['filter-0-value'].force_value(filter_value)
|
|
5566 |
resp = resp.forms['listing-settings'].submit()
|
|
5567 |
|
|
5568 |
resp.forms['save-custom-view']['title'] = 'as data source'
|
|
5569 |
resp.forms['save-custom-view']['visibility'] = 'datasource'
|
|
5570 |
resp = resp.forms['save-custom-view'].submit()
|
|
5571 |
|
|
5572 |
custom_view = pub.custom_view_class.select()[0]
|
|
5573 |
|
|
5574 |
# use custom view as source
|
|
5575 |
ds = {'type': 'carddef:%s:%s' % (carddef.url_name, custom_view.slug)}
|
|
5576 |
formdef.fields = [
|
|
5577 |
fields.ItemField(id='0', label='string', type='item', data_source=ds, display_disabled_items=True)
|
|
5578 |
]
|
|
5579 |
formdef.store()
|
|
5580 |
|
|
5581 |
resp = get_app(pub).get('/test/')
|
|
5582 |
assert len(resp.form['f0'].options) == 10 # 12 - ['baz,buz', 'buz,baz']
|
|
5583 |
assert {x[0] for x in resp.form['f0'].options} == foo_bar_ids
|
|
5584 |
resp = resp.form.submit('submit') # -> validation page
|
|
5585 |
resp = resp.form.submit('submit') # -> submit
|
|
5586 |
formdata = formdef.data_class().select()[0]
|
|
5587 |
assert formdata.data['0'] in foo_bar_ids
|
|
5588 |
assert formdata.data['0_structured']['text'] == 'attr0 - foo,bar'
|
|
5589 |
|
|
5590 |
|
5515 |
5591 |
def test_item_field_with_disabled_items(http_requests, pub):
|
5516 |
5592 |
create_user(pub)
|
5517 |
5593 |
formdef = create_formdef()
|