wcs: add status to card cell available filters (#78065)
gitea/combo/pipeline/head This commit looks good
Details
gitea/combo/pipeline/head This commit looks good
Details
This commit is contained in:
parent
221af86bd9
commit
cc8fd003cb
|
@ -156,7 +156,8 @@ class WcsCardCellDisplayForm(forms.ModelForm):
|
||||||
del self.fields['custom_schema']
|
del self.fields['custom_schema']
|
||||||
del self.fields['filters']
|
del self.fields['filters']
|
||||||
else:
|
else:
|
||||||
self.fields['filters'].choices = BLANK_CHOICE_DASH + [
|
choices = BLANK_CHOICE_DASH + [('status', _('Status'))]
|
||||||
|
self.fields['filters'].choices = choices + [
|
||||||
(x['varname'], x['label'])
|
(x['varname'], x['label'])
|
||||||
for x in self.instance.cached_json['fields']
|
for x in self.instance.cached_json['fields']
|
||||||
if x['type'] in ('item', 'items') and x.get('varname')
|
if x['type'] in ('item', 'items') and x.get('varname')
|
||||||
|
@ -177,6 +178,13 @@ class WcsCardCellFiltersForm(forms.Form):
|
||||||
return
|
return
|
||||||
|
|
||||||
for filter_id in cell.filters:
|
for filter_id in cell.filters:
|
||||||
|
if filter_id == 'status' and 'workflow' in cell.cached_json:
|
||||||
|
options = [(x['id'], x['name']) for x in cell.cached_json['workflow']['statuses']]
|
||||||
|
self.fields[filter_id] = forms.MultipleChoiceField(
|
||||||
|
label=_('Status'), choices=options, widget=MultipleSelect2Widget
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
|
||||||
field_schemas = [x for x in cell.cached_json['fields'] if x.get('varname') == filter_id]
|
field_schemas = [x for x in cell.cached_json['fields'] if x.get('varname') == filter_id]
|
||||||
if not field_schemas:
|
if not field_schemas:
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -66,7 +66,11 @@ def get_filter_attrs(cell, card):
|
||||||
|
|
||||||
attrs = {}
|
attrs = {}
|
||||||
for filter_id in cell.filters:
|
for filter_id in cell.filters:
|
||||||
value = card['fields'].get(filter_id + '_raw')
|
if filter_id == 'status' and 'workflow' in card:
|
||||||
|
value = card['workflow']['real_status']['id']
|
||||||
|
else:
|
||||||
|
value = card['fields'].get(filter_id + '_raw')
|
||||||
|
|
||||||
if not value:
|
if not value:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
|
@ -748,6 +748,7 @@ def test_manager_card_cell_filters(mock_send, app, admin_user):
|
||||||
# only item and items field with varnames are allowed
|
# only item and items field with varnames are allowed
|
||||||
assert resp.form['c%s-filters' % cell.get_reference()].options == [
|
assert resp.form['c%s-filters' % cell.get_reference()].options == [
|
||||||
('', True, '---------'),
|
('', True, '---------'),
|
||||||
|
('status', False, 'Status'),
|
||||||
('fieldj', False, 'Field J'),
|
('fieldj', False, 'Field J'),
|
||||||
('related', False, 'Related'),
|
('related', False, 'Related'),
|
||||||
]
|
]
|
||||||
|
@ -758,12 +759,13 @@ def test_manager_card_cell_filters(mock_send, app, admin_user):
|
||||||
cell.refresh_from_db()
|
cell.refresh_from_db()
|
||||||
assert cell.filters == ['related']
|
assert cell.filters == ['related']
|
||||||
|
|
||||||
cell.filters = ['related', 'fieldj']
|
cell.filters = ['related', 'fieldj', 'status']
|
||||||
cell.save()
|
cell.save()
|
||||||
|
|
||||||
resp = app.get('/manage/pages/%s/' % page.pk)
|
resp = app.get('/manage/pages/%s/' % page.pk)
|
||||||
assert resp.form.get('c%s-filters' % cell.get_reference(), 0).value == 'related'
|
assert resp.form.get('c%s-filters' % cell.get_reference(), 0).value == 'related'
|
||||||
assert resp.form.get('c%s-filters' % cell.get_reference(), 1).value == 'fieldj'
|
assert resp.form.get('c%s-filters' % cell.get_reference(), 1).value == 'fieldj'
|
||||||
|
assert resp.form.get('c%s-filters' % cell.get_reference(), 2).value == 'status'
|
||||||
|
|
||||||
|
|
||||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||||
|
@ -1598,19 +1600,28 @@ def test_card_cell_table_mode_render_filters(mock_send, context, app):
|
||||||
{},
|
{},
|
||||||
]
|
]
|
||||||
|
|
||||||
cell.filters = ['related', 'fieldj']
|
cell.filters = ['related', 'fieldj', 'status']
|
||||||
cell.save()
|
cell.save()
|
||||||
|
|
||||||
resp = TestResponse(cell.render(context))
|
resp = TestResponse(cell.render(context))
|
||||||
assert len(resp.form.fields) == 2
|
assert len(resp.form.fields) == 3
|
||||||
assert resp.form['fieldj'].options == [
|
assert resp.form['fieldj'].options == [
|
||||||
('first value', False, 'First Value'),
|
('first value', False, 'First Value'),
|
||||||
('second value \'', False, 'Second Value \''),
|
('second value \'', False, 'Second Value \''),
|
||||||
('third value', False, 'Third Value'),
|
('third value', False, 'Third Value'),
|
||||||
]
|
]
|
||||||
|
assert resp.form['status'].options == [('recorded', False, 'Recorded'), ('deleted', False, 'Deleted')]
|
||||||
assert [x.attrib for x in resp.pyquery('.list-of-cards li')] == [
|
assert [x.attrib for x in resp.pyquery('.list-of-cards li')] == [
|
||||||
{'data-related': '["42"]', 'data-fieldj': '["first value", "second value \'"]'},
|
{
|
||||||
{'data-related': '["13"]', 'data-fieldj': '["first value", "third value"]'},
|
'data-related': '["42"]',
|
||||||
|
'data-fieldj': '["first value", "second value \'"]',
|
||||||
|
'data-status': '["recorded"]',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'data-related': '["13"]',
|
||||||
|
'data-fieldj': '["first value", "third value"]',
|
||||||
|
'data-status': '["deleted"]',
|
||||||
|
},
|
||||||
{},
|
{},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1620,6 +1631,7 @@ def test_card_cell_table_mode_render_filters(mock_send, context, app):
|
||||||
{'varname': 'fieldb', 'field_content': 'value', 'display_mode': 'title'},
|
{'varname': 'fieldb', 'field_content': 'value', 'display_mode': 'title'},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
cell.filters = ['related', 'fieldj']
|
||||||
cell.save()
|
cell.save()
|
||||||
|
|
||||||
resp = TestResponse(cell.render(context))
|
resp = TestResponse(cell.render(context))
|
||||||
|
|
|
@ -138,6 +138,10 @@ WCS_CARDS_DATA = {
|
||||||
'first_name': 'User',
|
'first_name': 'User',
|
||||||
'last_name': 'Foo Bar',
|
'last_name': 'Foo Bar',
|
||||||
},
|
},
|
||||||
|
'workflow': {
|
||||||
|
'real_status': {'id': 'recorded', 'name': 'Recorded'},
|
||||||
|
'status': {'id': 'recorded', 'name': 'Recorded'},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id': 12,
|
'id': 12,
|
||||||
|
@ -152,6 +156,10 @@ WCS_CARDS_DATA = {
|
||||||
'related': 'Abc',
|
'related': 'Abc',
|
||||||
'related_raw': 13,
|
'related_raw': 13,
|
||||||
},
|
},
|
||||||
|
'workflow': {
|
||||||
|
'real_status': {'id': 'deleted', 'name': 'Deleted'},
|
||||||
|
'status': {'id': 'deleted', 'name': 'Deleted'},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id': 13,
|
'id': 13,
|
||||||
|
@ -285,6 +293,27 @@ WCS_CARDDEF_SCHEMAS = {
|
||||||
{'label': 'Last name', 'varname': 'last_name', 'type': 'string'},
|
{'label': 'Last name', 'varname': 'last_name', 'type': 'string'},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
'workflow': {
|
||||||
|
'fields': [],
|
||||||
|
'functions': {'_editor': 'Editor', '_viewer': 'Viewer'},
|
||||||
|
'name': 'default',
|
||||||
|
'statuses': [
|
||||||
|
{
|
||||||
|
'endpoint': False,
|
||||||
|
'forced_endpoint': False,
|
||||||
|
'id': 'recorded',
|
||||||
|
'name': 'Recorded',
|
||||||
|
'waitpoint': True,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'endpoint': True,
|
||||||
|
'forced_endpoint': False,
|
||||||
|
'id': 'deleted',
|
||||||
|
'name': 'Deleted',
|
||||||
|
'waitpoint': True,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
},
|
},
|
||||||
'card_a': {
|
'card_a': {
|
||||||
'name': 'Card A',
|
'name': 'Card A',
|
||||||
|
|
Loading…
Reference in New Issue