search: add support for API returning results in a different key (#28606)

This commit is contained in:
Frédéric Péters 2018-12-04 19:08:57 +01:00
parent d35ffa3b59
commit f598929c34
2 changed files with 18 additions and 2 deletions

View File

@ -146,6 +146,8 @@ class SearchCell(CellBase):
# {{user_nameid}} or {{user_email}}).
kwargs['without_user'] = True
results = requests.get(url, **kwargs).json()
if service.get('data_key'):
results['data'] = results.get(service['data_key']) or []
hit_templates = {}
if service.get('hit_url_template'):
hit_templates['url'] = Template(service['hit_url_template'])

View File

@ -30,7 +30,12 @@ SEARCH_SERVICES = {
'search_tmpl': {
'label': 'Search with template',
'url': '[search_url]?q=%(q)s',
}
},
'search_alternate_key': {
'label': 'Search with alternate key',
'url': 'http://www.example.net/search/?q=%(q)s',
'data_key': 'results',
},
}
TEMPLATE_VARS = {'search_url': 'http://search.example.net/'}
@ -90,6 +95,14 @@ def test_search_cell(app):
assert '<li><a href="http://test">barbarbar</a>' in resp.text
assert 'this is <b>html</b>' in resp.text
cell._search_services = {'data': ['search_alternate_key']}
cell.save()
response = {'results': [{'url': 'http://test', 'text': 'barbarbar'}]}
mock_json.json.return_value = response
resp = app.get('/ajax/search/%s/search_alternate_key/?q=foo' % cell.pk, status=200)
assert resp.text.count('<li>') == 1
assert '<li><a href="http://test">barbarbar</a>' in resp.text
with override_settings(TEMPLATE_VARS=TEMPLATE_VARS):
cell._search_services = {'data': ['search_tmpl']}
cell.save()
@ -331,10 +344,11 @@ def test_manager_search_cell(app, admin_user):
with SearchServices(SEARCH_SERVICES):
resp = app.get('/manage/pages/%s/' % page.id)
assert len(resp.form['c%s-_search_services' % cells[0].get_reference()].options) == 4
assert len(resp.form['c%s-_search_services' % cells[0].get_reference()].options) == 5
# simulate reordering of options
resp.form['c%s-_search_services' % cells[0].get_reference()].options = [
(u'search_tmpl', False, u'Search with template'),
(u'search_alternate_key', False, u'Search with alternate key'),
(u'_text', False, u'Page Contents'),
(u'search1', False, u'Search 1')]
resp.form['c%s-_search_services' % cells[0].get_reference()].value = ['search_tmpl', '_text']