wcs: add status to card cell available filters (#78065)
gitea/combo/pipeline/head This commit looks good Details

This commit is contained in:
Valentin Deniaud 2023-06-01 15:29:45 +02:00
parent 221af86bd9
commit cc8fd003cb
4 changed files with 60 additions and 7 deletions

View File

@ -156,7 +156,8 @@ class WcsCardCellDisplayForm(forms.ModelForm):
del self.fields['custom_schema']
del self.fields['filters']
else:
self.fields['filters'].choices = BLANK_CHOICE_DASH + [
choices = BLANK_CHOICE_DASH + [('status', _('Status'))]
self.fields['filters'].choices = choices + [
(x['varname'], x['label'])
for x in self.instance.cached_json['fields']
if x['type'] in ('item', 'items') and x.get('varname')
@ -177,6 +178,13 @@ class WcsCardCellFiltersForm(forms.Form):
return
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]
if not field_schemas:
continue

View File

@ -66,7 +66,11 @@ def get_filter_attrs(cell, card):
attrs = {}
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:
continue

View File

@ -748,6 +748,7 @@ def test_manager_card_cell_filters(mock_send, app, admin_user):
# only item and items field with varnames are allowed
assert resp.form['c%s-filters' % cell.get_reference()].options == [
('', True, '---------'),
('status', False, 'Status'),
('fieldj', False, 'Field J'),
('related', False, 'Related'),
]
@ -758,12 +759,13 @@ def test_manager_card_cell_filters(mock_send, app, admin_user):
cell.refresh_from_db()
assert cell.filters == ['related']
cell.filters = ['related', 'fieldj']
cell.filters = ['related', 'fieldj', 'status']
cell.save()
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(), 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)
@ -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()
resp = TestResponse(cell.render(context))
assert len(resp.form.fields) == 2
assert len(resp.form.fields) == 3
assert resp.form['fieldj'].options == [
('first value', False, 'First Value'),
('second value \'', False, 'Second 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')] == [
{'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'},
]
}
cell.filters = ['related', 'fieldj']
cell.save()
resp = TestResponse(cell.render(context))

View File

@ -138,6 +138,10 @@ WCS_CARDS_DATA = {
'first_name': 'User',
'last_name': 'Foo Bar',
},
'workflow': {
'real_status': {'id': 'recorded', 'name': 'Recorded'},
'status': {'id': 'recorded', 'name': 'Recorded'},
},
},
{
'id': 12,
@ -152,6 +156,10 @@ WCS_CARDS_DATA = {
'related': 'Abc',
'related_raw': 13,
},
'workflow': {
'real_status': {'id': 'deleted', 'name': 'Deleted'},
'status': {'id': 'deleted', 'name': 'Deleted'},
},
},
{
'id': 13,
@ -285,6 +293,27 @@ WCS_CARDDEF_SCHEMAS = {
{'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': {
'name': 'Card A',