diff --git a/tugboat/tests/tests_functional/test_selenium.py b/tugboat/tests/tests_functional/test_selenium.py index bfc45f8..2a2903c 100644 --- a/tugboat/tests/tests_functional/test_selenium.py +++ b/tugboat/tests/tests_functional/test_selenium.py @@ -63,7 +63,7 @@ def url_for(self, view): """ Get the url for a live server with the relevant view """ - return '{}/{}'.format(self.get_server_url(), view) + return '{}/tugboat/{}'.format(self.get_server_url(), view) def test_server_firefox(self): """ diff --git a/tugboat/tests/tests_unit/test_search_redirect.py b/tugboat/tests/tests_unit/test_search_redirect.py index 8c8c171..990fdf3 100644 --- a/tugboat/tests/tests_unit/test_search_redirect.py +++ b/tugboat/tests/tests_unit/test_search_redirect.py @@ -234,9 +234,16 @@ def test_article_sel(self): req.args.update(self.append_default_weights()) view = ClassicSearchRedirectView() search = view.translate(req) - self.assertEqual('q=*:*&fq=' + urllib.quote('{!type=aqp v=$fq_doctype}&fq_doctype=(doctype:"article")') + + self.assertEqual('q=*:*&fq=' + urllib.quote('{') + '!' + urllib.quote('type=aqp v=$fq_property}') + + '&fq_property=(' + urllib.quote("article") + ')' + '&sort=' + urllib.quote('date desc, bibcode desc'), search) + req.args = MultiDict([('article_sel', 'NO')]) + req.args.update(self.append_default_weights()) + view = ClassicSearchRedirectView() + search = view.translate(req) + self.assertEqual('q=*:*' + '&sort=' + urllib.quote('date desc, bibcode desc') + + '&error_message=' + urllib.quote('Invalid value for article_sel: NO'), search) def test_data_link(self): """data_link to property:data""" @@ -280,13 +287,13 @@ def test_multiple_link_properties(self): req = Request('get', 'http://test.test?') req.prepare() req.mimetype = None - req.args = MultiDict([('article_sel', 'YES'), ('data_link', 'YES')]) + req.args = MultiDict([('open_link', 'YES'), ('data_link', 'YES')]) req.args.update(self.append_default_weights()) view = ClassicSearchRedirectView() search = view.translate(req) # should comparison permit fq clauses to be in different order? self.assertEqual('q=*:*&fq=' + urllib.quote('{!type=aqp v=$fq_doctype}&fq_doctype=(doctype:"data")') + - '&fq=' + urllib.quote('{!type=aqp v=$fq_doctype}&fq_doctype=(doctype:"article")') + + '&fq=' + urllib.quote('{!type=aqp v=$fq_doctype}&fq_doctype=(doctype:"OPENACCESS")') + '&sort=' + urllib.quote('date desc, bibcode desc'), search) @@ -430,15 +437,17 @@ def test_jou_pick(self): req.args.update(self.append_default_weights()) view = ClassicSearchRedirectView() search = view.translate(req) - self.assertEqual('q=*:*&fq=' + urllib.quote('{!type=aqp v=$fq_property}&fq_property=(property:"refereed")') + - '&sort=' + urllib.quote('date desc, bibcode desc'), search) # only refereed + self.assertEqual('q=*:*&fq=' + urllib.quote('{') + '!' + urllib.quote('type=aqp v=$fq_property}') + + '&fq_property=(' + urllib.quote("refereed") + ')' + + '&sort=' + urllib.quote('date desc, bibcode desc'), search) # only refereed req.args = MultiDict([('jou_pick', 'EXCL')]) req.args.update(self.append_default_weights()) view = ClassicSearchRedirectView() search = view.translate(req) - self.assertEqual('q=*:*&fq=' + urllib.quote('{!type=aqp v=$fq_property}&fq_property=(property:"notrefereed")') + - '&sort=' + urllib.quote('date desc, bibcode desc'), search) # exclude refereed + self.assertEqual('q=*:*&fq=' + urllib.quote('{') + '!' + urllib.quote('type=aqp v=$fq_property}') + + '&fq_property=(' + urllib.quote("notrefereed") + ')' + + '&sort=' + urllib.quote('date desc, bibcode desc'), search) # exclude refereed req.args = MultiDict([('jou_pick', 'foo')]) req.args.update(self.append_default_weights()) diff --git a/tugboat/views.py b/tugboat/views.py index c589d20..783c5bb 100644 --- a/tugboat/views.py +++ b/tugboat/views.py @@ -237,12 +237,13 @@ def translate(self, request): # consider using reflection to obtain this list funcs = [self.translate_authors, self.translate_pubdate, self.translate_entry_date, self.translate_results_subset, - self.translate_return_req, self.translate_qsearch, - self.translate_database, self.translate_property_filters, - self.translate_jou_pick, self.translate_data_entries, - self.translate_group_sel, self.translate_sort, - self.translate_to_ignore, self.translate_weights, - self.translate_arxiv_sel, self.translate_ref_stems, + self.translate_return_req, self.translate_article_sel, + self.translate_qsearch, self.translate_database, + self.translate_property_filters, self.translate_jou_pick, + self.translate_data_entries, self.translate_group_sel, + self.translate_sort, self.translate_to_ignore, + self.translate_weights, self.translate_arxiv_sel, + self.translate_ref_stems, ] for f in funcs: f(args) # each may contribute to self.translation singleton @@ -270,6 +271,7 @@ def translate(self, request): # pass their names out ads/bumblebee solr_query += '&unprocessed_parameter=' + urllib.quote('Parameters not processed: ' + ' '.join(args.keys())) + print '.......solr_query=', solr_query return solr_query @@ -501,10 +503,12 @@ def translate_jou_pick(self, args): pass elif jou_pick == 'NO': # only include refereed journals - self.translation.filter.append(urllib.quote('{!type=aqp v=$fq_property}&fq_property=(property:"refereed")')) + self.translation.filter.append(urllib.quote('{') + '!' + urllib.quote('type=aqp v=$fq_property}') + \ + '&fq_property=(' + urllib.quote("refereed") + ')') elif jou_pick == 'EXCL': # only include non-refereed - self.translation.filter.append(urllib.quote('{!type=aqp v=$fq_property}&fq_property=(property:"notrefereed")')) + self.translation.filter.append(urllib.quote('{') + '!' + urllib.quote('type=aqp v=$fq_property}') + \ + '&fq_property=(' + urllib.quote("notrefereed") + ')') else: self.translation.error_message.append(urllib.quote('Invalid value for jou_pick: {}'.format(jou_pick))) @@ -640,7 +644,7 @@ def translate_property_filters(self, args): several search fields translate to a Bumblebee filter query with property """ - to_bbb_property = {'article_sel': 'article', 'data_link': 'data', + to_bbb_property = {'data_link': 'data', 'open_link': 'OPENACCESS', 'preprint_link': 'eprint'} clauses = [] for key in to_bbb_property.keys(): @@ -648,6 +652,18 @@ def translate_property_filters(self, args): value = to_bbb_property[key] self.translation.filter.append(urllib.quote('{{!type=aqp v=$fq_doctype}}&fq_doctype=(doctype:"{}")'.format(to_bbb_property.get(key)))) + def translate_article_sel(self, args): + article_sel = args.pop('article_sel', None) + if article_sel is None: + pass + elif article_sel == 'YES': + # only include article journals + self.translation.filter.append(urllib.quote('{') + '!' + urllib.quote('type=aqp v=$fq_property}') + \ + '&fq_property=(' + urllib.quote("article") + ')') + else: + self.translation.error_message.append(urllib.quote('Invalid value for article_sel: {}'.format(article_sel))) + + def translate_qsearch(self, args): """translate qsearch parameter from single input form on classic_w_BBB_button.html