wcs: register search engines for formdata of wcs sites (#26260)
This commit is contained in:
parent
9c2e369036
commit
00b6001be7
|
@ -19,6 +19,6 @@ from django.conf.urls import url
|
|||
from .models import SearchCell
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^ajax/search/(?P<cell_pk>\w+)/(?P<service_slug>[\w-]+)/$', SearchCell.ajax_results_view,
|
||||
url(r'^ajax/search/(?P<cell_pk>\w+)/(?P<service_slug>[\w:-]+)/$', SearchCell.ajax_results_view,
|
||||
name='combo-search-ajax-results'),
|
||||
]
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import hashlib
|
||||
|
||||
import django.apps
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
@ -28,12 +30,30 @@ class AppConfig(django.apps.AppConfig):
|
|||
engines.register(self.get_search_engines)
|
||||
|
||||
def get_search_engines(self):
|
||||
return {
|
||||
from .utils import get_wcs_services
|
||||
services = get_wcs_services()
|
||||
if not services:
|
||||
return
|
||||
|
||||
engines = {
|
||||
'tracking-code': {
|
||||
'url': reverse('wcs-tracking-code-search') + '?q=%(q)s',
|
||||
'label': _('Tracking Code'),
|
||||
}
|
||||
}
|
||||
for key, service in services.items():
|
||||
label = _('Forms')
|
||||
if len(services.keys()) > 1:
|
||||
label = _('Forms (%s)') % service['title']
|
||||
engines['formdata:%s' % hashlib.md5(key).hexdigest()[:8]] = {
|
||||
'url': service['url'] + 'api/forms/?NameID={{user_nameid}}&status=all&ignore-roles=on&q=%(q)s',
|
||||
'label': label,
|
||||
'signature': True,
|
||||
'hit_url_template': '{% if readable %}{{ form_url_backoffice }}{% endif %}',
|
||||
'hit_label_template': '{{ title }}',
|
||||
'hit_description_template': '{{ form_digest|default:"" }}',
|
||||
}
|
||||
return engines
|
||||
|
||||
def get_before_urls(self):
|
||||
from . import urls
|
||||
|
|
|
@ -127,7 +127,7 @@ div.searchcell {
|
|||
div.combo-search-results-users div.links-list li::before {
|
||||
content: "\f007"; // user
|
||||
}
|
||||
div.combo-search-results-formdata div.links-list li::before {
|
||||
div[class*="combo-search-results-formdata"] div.links-list li::before {
|
||||
content: "\f0f6"; // file-text-o
|
||||
}
|
||||
div.combo-search-results-tracking-code div.links-list li::before {
|
||||
|
|
|
@ -12,6 +12,7 @@ from django.core.urlresolvers import reverse
|
|||
|
||||
from haystack.exceptions import SkipDocument
|
||||
|
||||
from combo.apps.search.engines import engines
|
||||
from combo.apps.search.models import SearchCell
|
||||
from combo.data.models import Page, JsonCell, TextCell, MenuCell, LinkCell
|
||||
from combo.data.search_indexes import PageIndex
|
||||
|
@ -338,29 +339,37 @@ def test_manager_search_cell(app, admin_user):
|
|||
assert len(cells) == 1
|
||||
assert isinstance(cells[0], SearchCell)
|
||||
|
||||
resp = app.get('/manage/pages/%s/' % page.id)
|
||||
assert ('data-cell-reference="%s"' % cells[0].get_reference()) in resp.text
|
||||
assert len(resp.form['c%s-_search_services' % cells[0].get_reference()].options) == 2
|
||||
|
||||
with SearchServices(SEARCH_SERVICES):
|
||||
with override_settings(KNOWN_SERVICES={}):
|
||||
resp = app.get('/manage/pages/%s/' % page.id)
|
||||
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']
|
||||
resp = resp.form.submit()
|
||||
assert resp.status_int == 302
|
||||
assert ('data-cell-reference="%s"' % cells[0].get_reference()) in resp.text
|
||||
assert len(resp.form['c%s-_search_services' % cells[0].get_reference()].options) == 1
|
||||
|
||||
# check selected engines are selected and the first items of the list
|
||||
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
|
||||
# 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']
|
||||
resp = resp.form.submit()
|
||||
assert resp.status_int == 302
|
||||
|
||||
# check selected engines are selected and the first items of the list
|
||||
resp = app.get('/manage/pages/%s/' % page.id)
|
||||
assert set(resp.form['c%s-_search_services' % cells[0].get_reference()].value) == set(['search_tmpl', '_text'])
|
||||
assert resp.form['c%s-_search_services' % cells[0].get_reference()].options[0][0] == 'search_tmpl'
|
||||
assert resp.form['c%s-_search_services' % cells[0].get_reference()].options[1][0] == '_text'
|
||||
|
||||
# check there's no crash if search engines are removed from config
|
||||
resp = app.get('/manage/pages/%s/' % page.id)
|
||||
assert set(resp.form['c%s-_search_services' % cells[0].get_reference()].value) == set(['search_tmpl', '_text'])
|
||||
assert resp.form['c%s-_search_services' % cells[0].get_reference()].options[0][0] == 'search_tmpl'
|
||||
assert resp.form['c%s-_search_services' % cells[0].get_reference()].options[1][0] == '_text'
|
||||
assert resp.form['c%s-_search_services' % cells[0].get_reference()].value == ['_text']
|
||||
|
||||
# check there's no crash if search engines are removed from config
|
||||
resp = app.get('/manage/pages/%s/' % page.id)
|
||||
assert resp.form['c%s-_search_services' % cells[0].get_reference()].value == ['_text']
|
||||
|
||||
def test_wcs_search_engines(app):
|
||||
with override_settings(KNOWN_SERVICES={}):
|
||||
search_engines = engines.get_engines()
|
||||
assert 'tracking-code' not in search_engines.keys()
|
||||
assert len([x for x in search_engines.keys() if x.startswith('formdata:')]) == 0
|
||||
|
|
|
@ -19,6 +19,7 @@ from django.test.client import RequestFactory
|
|||
from django.utils.six.moves.urllib import parse as urlparse
|
||||
|
||||
from combo.data.models import Page
|
||||
from combo.apps.search.engines import engines
|
||||
from combo.apps.wcs.models import (WcsFormCell, WcsCurrentFormsCell,
|
||||
WcsFormsOfCategoryCell, WcsCurrentDraftsCell, WcsCategoryCell,
|
||||
TrackingCodeInputCell, BackofficeSubmissionCell)
|
||||
|
@ -675,6 +676,12 @@ def test_tracking_code_search(app):
|
|||
assert len(app.get('/api/search/tracking-code/?q=CNPHNTFB').json.get('data')) == 1
|
||||
assert len(app.get('/api/search/tracking-code/?q=BBCCDDFFG').json.get('data')) == 0
|
||||
|
||||
@wcsctl_present
|
||||
def test_wcs_search_engines(app):
|
||||
search_engines = engines.get_engines()
|
||||
assert 'tracking-code' in search_engines.keys()
|
||||
assert len([x for x in search_engines.keys() if x.startswith('formdata:')]) == 2
|
||||
|
||||
@wcsctl_present
|
||||
def test_backoffice_submission_cell_render(context):
|
||||
page = Page(title='xxx', slug='test_backoffice_submission_cell_render', template_name='standard')
|
||||
|
|
Loading…
Reference in New Issue