0002-wcs-register-search-engines-for-formdata-of-wcs-site.patch
combo/apps/search/urls.py | ||
---|---|---|
19 | 19 |
from .models import SearchCell |
20 | 20 | |
21 | 21 |
urlpatterns = [ |
22 |
url(r'^ajax/search/(?P<cell_pk>\w+)/(?P<service_slug>[\w-]+)/$', SearchCell.ajax_results_view, |
|
22 |
url(r'^ajax/search/(?P<cell_pk>\w+)/(?P<service_slug>[\w:-]+)/$', SearchCell.ajax_results_view,
|
|
23 | 23 |
name='combo-search-ajax-results'), |
24 | 24 |
] |
combo/apps/wcs/__init__.py | ||
---|---|---|
14 | 14 |
# You should have received a copy of the GNU Affero General Public License |
15 | 15 |
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
16 | 16 | |
17 |
import hashlib |
|
18 | ||
17 | 19 |
import django.apps |
18 | 20 |
from django.core.urlresolvers import reverse |
19 | 21 |
from django.utils.translation import ugettext_lazy as _ |
... | ... | |
28 | 30 |
engines.register(self.get_search_engines) |
29 | 31 | |
30 | 32 |
def get_search_engines(self): |
31 |
return { |
|
33 |
from .utils import get_wcs_services |
|
34 |
services = get_wcs_services() |
|
35 |
if not services: |
|
36 |
return |
|
37 | ||
38 |
engines = { |
|
32 | 39 |
'tracking-code': { |
33 | 40 |
'url': reverse('wcs-tracking-code-search') + '?q=%(q)s', |
34 | 41 |
'label': _('Tracking Code'), |
35 | 42 |
} |
36 | 43 |
} |
44 |
for key, service in services.items(): |
|
45 |
label = _('Forms') |
|
46 |
if len(services.keys()) > 1: |
|
47 |
label = _('Forms (%s)') % service['title'] |
|
48 |
engines['formdata:%s' % hashlib.md5(key).hexdigest()[:8]] = { |
|
49 |
'url': service['url'] + 'api/forms/?NameID={{user_nameid}}&status=all&ignore-roles=on&q=%(q)s', |
|
50 |
'label': label, |
|
51 |
'signature': True, |
|
52 |
'hit_url_template': '{% if readable %}{{ form_url_backoffice }}{% endif %}', |
|
53 |
'hit_label_template': '{{ title }}', |
|
54 |
'hit_description_template': '{{ form_digest|default:"" }}', |
|
55 |
} |
|
56 |
return engines |
|
37 | 57 | |
38 | 58 |
def get_before_urls(self): |
39 | 59 |
from . import urls |
tests/test_search.py | ||
---|---|---|
12 | 12 | |
13 | 13 |
from haystack.exceptions import SkipDocument |
14 | 14 | |
15 |
from combo.apps.search.engines import engines |
|
15 | 16 |
from combo.apps.search.models import SearchCell |
16 | 17 |
from combo.data.models import Page, JsonCell, TextCell, MenuCell, LinkCell |
17 | 18 |
from combo.data.search_indexes import PageIndex |
... | ... | |
338 | 339 |
assert len(cells) == 1 |
339 | 340 |
assert isinstance(cells[0], SearchCell) |
340 | 341 | |
341 |
resp = app.get('/manage/pages/%s/' % page.id) |
|
342 |
assert ('data-cell-reference="%s"' % cells[0].get_reference()) in resp.text |
|
343 |
assert len(resp.form['c%s-_search_services' % cells[0].get_reference()].options) == 2 |
|
344 | ||
345 |
with SearchServices(SEARCH_SERVICES): |
|
342 |
with override_settings(KNOWN_SERVICES={}): |
|
346 | 343 |
resp = app.get('/manage/pages/%s/' % page.id) |
347 |
assert len(resp.form['c%s-_search_services' % cells[0].get_reference()].options) == 5 |
|
348 |
# simulate reordering of options |
|
349 |
resp.form['c%s-_search_services' % cells[0].get_reference()].options = [ |
|
350 |
(u'search_tmpl', False, u'Search with template'), |
|
351 |
(u'search_alternate_key', False, u'Search with alternate key'), |
|
352 |
(u'_text', False, u'Page Contents'), |
|
353 |
(u'search1', False, u'Search 1')] |
|
354 |
resp.form['c%s-_search_services' % cells[0].get_reference()].value = ['search_tmpl', '_text'] |
|
355 |
resp = resp.form.submit() |
|
356 |
assert resp.status_int == 302 |
|
357 | ||
358 |
# check selected engines are selected and the first items of the list |
|
344 |
assert ('data-cell-reference="%s"' % cells[0].get_reference()) in resp.text |
|
345 |
assert len(resp.form['c%s-_search_services' % cells[0].get_reference()].options) == 1 |
|
346 | ||
347 |
with SearchServices(SEARCH_SERVICES): |
|
348 |
resp = app.get('/manage/pages/%s/' % page.id) |
|
349 |
assert len(resp.form['c%s-_search_services' % cells[0].get_reference()].options) == 4 |
|
350 |
# simulate reordering of options |
|
351 |
resp.form['c%s-_search_services' % cells[0].get_reference()].options = [ |
|
352 |
(u'search_tmpl', False, u'Search with template'), |
|
353 |
(u'search_alternate_key', False, u'Search with alternate key'), |
|
354 |
(u'_text', False, u'Page Contents'), |
|
355 |
(u'search1', False, u'Search 1')] |
|
356 |
resp.form['c%s-_search_services' % cells[0].get_reference()].value = ['search_tmpl', '_text'] |
|
357 |
resp = resp.form.submit() |
|
358 |
assert resp.status_int == 302 |
|
359 | ||
360 |
# check selected engines are selected and the first items of the list |
|
361 |
resp = app.get('/manage/pages/%s/' % page.id) |
|
362 |
assert set(resp.form['c%s-_search_services' % cells[0].get_reference()].value) == set(['search_tmpl', '_text']) |
|
363 |
assert resp.form['c%s-_search_services' % cells[0].get_reference()].options[0][0] == 'search_tmpl' |
|
364 |
assert resp.form['c%s-_search_services' % cells[0].get_reference()].options[1][0] == '_text' |
|
365 | ||
366 |
# check there's no crash if search engines are removed from config |
|
359 | 367 |
resp = app.get('/manage/pages/%s/' % page.id) |
360 |
assert set(resp.form['c%s-_search_services' % cells[0].get_reference()].value) == set(['search_tmpl', '_text']) |
|
361 |
assert resp.form['c%s-_search_services' % cells[0].get_reference()].options[0][0] == 'search_tmpl' |
|
362 |
assert resp.form['c%s-_search_services' % cells[0].get_reference()].options[1][0] == '_text' |
|
368 |
assert resp.form['c%s-_search_services' % cells[0].get_reference()].value == ['_text'] |
|
363 | 369 | |
364 |
# check there's no crash if search engines are removed from config |
|
365 |
resp = app.get('/manage/pages/%s/' % page.id) |
|
366 |
assert resp.form['c%s-_search_services' % cells[0].get_reference()].value == ['_text'] |
|
370 | ||
371 |
def test_wcs_search_engines(app): |
|
372 |
with override_settings(KNOWN_SERVICES={}): |
|
373 |
search_engines = engines.get_engines() |
|
374 |
assert 'tracking-code' not in search_engines.keys() |
|
375 |
assert len([x for x in search_engines.keys() if x.startswith('formdata:')]) == 0 |
tests/test_wcs.py | ||
---|---|---|
19 | 19 |
from django.utils.six.moves.urllib import parse as urlparse |
20 | 20 | |
21 | 21 |
from combo.data.models import Page |
22 |
from combo.apps.search.engines import engines |
|
22 | 23 |
from combo.apps.wcs.models import (WcsFormCell, WcsCurrentFormsCell, |
23 | 24 |
WcsFormsOfCategoryCell, WcsCurrentDraftsCell, WcsCategoryCell, |
24 | 25 |
TrackingCodeInputCell, BackofficeSubmissionCell) |
... | ... | |
675 | 676 |
assert len(app.get('/api/search/tracking-code/?q=CNPHNTFB').json.get('data')) == 1 |
676 | 677 |
assert len(app.get('/api/search/tracking-code/?q=BBCCDDFFG').json.get('data')) == 0 |
677 | 678 | |
679 |
@wcsctl_present |
|
680 |
def test_wcs_search_engines(app): |
|
681 |
search_engines = engines.get_engines() |
|
682 |
assert 'tracking-code' in search_engines.keys() |
|
683 |
assert len([x for x in search_engines.keys() if x.startswith('formdata:')]) == 2 |
|
684 | ||
678 | 685 |
@wcsctl_present |
679 | 686 |
def test_backoffice_submission_cell_render(context): |
680 | 687 |
page = Page(title='xxx', slug='test_backoffice_submission_cell_render', template_name='standard') |
681 |
- |