0001-cards-add-preset-datasources-for-cards-filtered-on-u.patch
tests/form_pages/test_all.py | ||
---|---|---|
9673 | 9673 |
# it jumps to st2, as jump.by is only related to triggers |
9674 | 9674 |
assert formdef.data_class().count() == 1 |
9675 | 9675 |
assert formdef.data_class().select()[0].status == 'wf-st2' |
9676 | ||
9677 | ||
9678 |
def test_user_filter_auto_custom_view(pub): |
|
9679 |
user = create_user(pub) |
|
9680 | ||
9681 |
CardDef.wipe() |
|
9682 |
carddef = CardDef() |
|
9683 |
carddef.name = 'items' |
|
9684 |
carddef.user_support = 'optional' |
|
9685 |
carddef.digest_templates = {'default': '{{form_var_name}}'} |
|
9686 |
carddef.fields = [ |
|
9687 |
fields.StringField(id='0', label='string', varname='name'), |
|
9688 |
] |
|
9689 |
carddef.store() |
|
9690 |
for i, value in enumerate(['foo', 'bar', 'baz']): |
|
9691 |
carddata = carddef.data_class()() |
|
9692 |
carddata.data = { |
|
9693 |
'0': value, |
|
9694 |
'1': 'attr%s' % i, |
|
9695 |
} |
|
9696 |
carddata.user_id = user.id |
|
9697 |
carddata.just_created() |
|
9698 |
carddata.store() |
|
9699 | ||
9700 |
carddata.user_id = None # don't associate latest (baz) with user |
|
9701 |
carddata.store() |
|
9702 | ||
9703 |
ds = {'type': 'carddef:%s' % carddef.url_name} |
|
9704 |
formdef = FormDef() |
|
9705 |
formdef.name = 'foobar' |
|
9706 |
formdef.fields = [ |
|
9707 |
fields.ItemField(id='0', label='item', type='item', varname='foo', data_source=ds), |
|
9708 |
] |
|
9709 |
formdef.store() |
|
9710 | ||
9711 |
app = get_app(pub) |
|
9712 |
resp = app.get(formdef.get_url()) |
|
9713 |
assert [x[2] for x in resp.form['f0'].options] == ['bar', 'baz', 'foo'] |
|
9714 | ||
9715 |
formdef.fields[0].data_source['type'] = 'carddef:%s:_with_user_filter' % carddef.url_name |
|
9716 |
formdef.store() |
|
9717 |
resp = app.get(formdef.get_url()) |
|
9718 |
assert [x[2] for x in resp.form['f0'].options] == ['---'] |
|
9719 | ||
9720 |
app = login(get_app(pub), username='foo', password='foo') |
|
9721 |
resp = app.get(formdef.get_url()) |
|
9722 |
assert [x[2] for x in resp.form['f0'].options] == ['bar', 'foo'] |
wcs/carddef.py | ||
---|---|---|
155 | 155 |
data_source_id = 'carddef:%s' % carddef.url_name |
156 | 156 |
carddefs_by_id[carddef.id] = carddef |
157 | 157 |
yield (carddef, carddef.name, data_source_id, None) |
158 |
if carddef.user_support: |
|
159 |
data_source_id = 'carddef:%s:_with_user_filter' % carddef.url_name |
|
160 |
yield (carddef, _('%s (filtered on user)') % carddef.name, data_source_id, None) |
|
158 | 161 |
clauses = [Equal('formdef_type', 'carddef'), Equal('visibility', 'datasource')] |
159 | 162 |
for custom_view in get_publisher().custom_view_class.select(clauses): |
160 | 163 |
carddef = carddefs_by_id.get(custom_view.formdef_id) |
... | ... | |
198 | 201 |
order_by = None |
199 | 202 |
digest_key = 'default' |
200 | 203 |
if len(parts) > 2: |
201 |
if custom_view is None: |
|
202 |
custom_view = cls.get_data_source_custom_view(data_source_id, carddef=carddef) |
|
203 |
if not custom_view: |
|
204 |
return [] |
|
205 |
order_by = custom_view.order_by |
|
206 |
if not get_by_id: |
|
207 |
criterias.extend(custom_view.get_criterias(formdef=carddef, compile_templates=True)) |
|
204 |
if parts[2] == '_with_user_filter': |
|
205 |
if not get_by_id: |
|
206 |
variables = get_publisher().substitutions.get_context_variables(mode='lazy') |
|
207 |
user = variables['form_user'] |
|
208 |
criterias.append(Equal('user_id', str(user.id) if user else '-1')) |
|
209 |
else: |
|
210 |
if custom_view is None: |
|
211 |
custom_view = cls.get_data_source_custom_view(data_source_id, carddef=carddef) |
|
212 |
if not custom_view: |
|
213 |
return [] |
|
214 |
order_by = custom_view.order_by |
|
215 |
if not get_by_id: |
|
216 |
criterias.extend(custom_view.get_criterias(formdef=carddef, compile_templates=True)) |
|
208 | 217 | |
209 | 218 |
if custom_view: |
210 | 219 |
view_digest_key = 'custom-view:%s' % custom_view.get_url_slug() |
211 |
- |