From 50378d8310fa344af8da49d9b28d647c16d21732 Mon Sep 17 00:00:00 2001 From: Glignos Date: Mon, 12 Aug 2019 20:42:55 +0200 Subject: [PATCH] global: compatibility fixes for suggesters --- .../mappings/v5/funders/funder-v1.0.0.json | 4 +-- .../mappings/v5/grants/grant-v1.0.0.json | 4 +-- .../mappings/v6/funders/funder-v1.0.0.json | 4 +-- .../mappings/v6/grants/grant-v1.0.0.json | 4 +-- .../mappings/v7/funders/funder-v1.0.0.json | 4 +-- .../mappings/v7/grants/grant-v1.0.0.json | 4 +-- tests/conftest.py | 4 +-- tests/test_rest.py | 30 +++++++++++++++---- 8 files changed, 39 insertions(+), 19 deletions(-) diff --git a/invenio_openaire/mappings/v5/funders/funder-v1.0.0.json b/invenio_openaire/mappings/v5/funders/funder-v1.0.0.json index 43ae2e0..378b266 100644 --- a/invenio_openaire/mappings/v5/funders/funder-v1.0.0.json +++ b/invenio_openaire/mappings/v5/funders/funder-v1.0.0.json @@ -46,8 +46,8 @@ }, "suggest": { "type": "completion", - "analyzer" : "snowball", - "search_analyzer" : "snowball" + "analyzer" : "standard", + "search_analyzer" : "standard" } } } diff --git a/invenio_openaire/mappings/v5/grants/grant-v1.0.0.json b/invenio_openaire/mappings/v5/grants/grant-v1.0.0.json index a8d6a6e..2b0999b 100644 --- a/invenio_openaire/mappings/v5/grants/grant-v1.0.0.json +++ b/invenio_openaire/mappings/v5/grants/grant-v1.0.0.json @@ -90,8 +90,8 @@ }, "suggest": { "type": "completion", - "analyzer": "snowball", - "search_analyzer": "snowball", + "analyzer": "standard", + "search_analyzer": "standard", "contexts": [ { "name": "funder", diff --git a/invenio_openaire/mappings/v6/funders/funder-v1.0.0.json b/invenio_openaire/mappings/v6/funders/funder-v1.0.0.json index eca6391..f0d58d9 100644 --- a/invenio_openaire/mappings/v6/funders/funder-v1.0.0.json +++ b/invenio_openaire/mappings/v6/funders/funder-v1.0.0.json @@ -46,8 +46,8 @@ }, "suggest": { "type": "completion", - "analyzer": "snowball", - "search_analyzer": "snowball" + "analyzer": "standard", + "search_analyzer": "standard" } } } diff --git a/invenio_openaire/mappings/v6/grants/grant-v1.0.0.json b/invenio_openaire/mappings/v6/grants/grant-v1.0.0.json index a8d6a6e..2b0999b 100644 --- a/invenio_openaire/mappings/v6/grants/grant-v1.0.0.json +++ b/invenio_openaire/mappings/v6/grants/grant-v1.0.0.json @@ -90,8 +90,8 @@ }, "suggest": { "type": "completion", - "analyzer": "snowball", - "search_analyzer": "snowball", + "analyzer": "standard", + "search_analyzer": "standard", "contexts": [ { "name": "funder", diff --git a/invenio_openaire/mappings/v7/funders/funder-v1.0.0.json b/invenio_openaire/mappings/v7/funders/funder-v1.0.0.json index f3ab2c4..a7fb7c9 100644 --- a/invenio_openaire/mappings/v7/funders/funder-v1.0.0.json +++ b/invenio_openaire/mappings/v7/funders/funder-v1.0.0.json @@ -45,8 +45,8 @@ }, "suggest": { "type": "completion", - "analyzer" : "snowball", - "search_analyzer" : "snowball" + "analyzer" : "standard", + "search_analyzer" : "standard" } } } diff --git a/invenio_openaire/mappings/v7/grants/grant-v1.0.0.json b/invenio_openaire/mappings/v7/grants/grant-v1.0.0.json index ac20ac2..7c70471 100644 --- a/invenio_openaire/mappings/v7/grants/grant-v1.0.0.json +++ b/invenio_openaire/mappings/v7/grants/grant-v1.0.0.json @@ -89,8 +89,8 @@ }, "suggest": { "type": "completion", - "analyzer" : "snowball", - "search_analyzer" : "snowball", + "analyzer" : "standard", + "search_analyzer" : "standard", "contexts": [{ "name" : "funder", "type": "category", diff --git a/tests/conftest.py b/tests/conftest.py index d57bb11..025b906 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -48,6 +48,7 @@ from invenio_records.models import RecordMetadata from invenio_records_rest.utils import PIDConverter, PIDPathConverter from invenio_search import InvenioSearch, current_search +from invenio_search.errors import IndexAlreadyExistsError from sqlalchemy_utils.functions import create_database, database_exists from invenio_openaire import InvenioOpenAIRE @@ -96,7 +97,6 @@ def app(request): CELERY_EAGER_PROPAGATES_EXCEPTIONS=True, JSONSCHEMAS_HOST='inveniosoftware.org', OPENAIRE_OAI_LOCAL_SOURCE='invenio_openaire/data/oaire_local.sqlite', - SEARCH_AUTOINDEX=[], TESTING=True, ) @@ -142,7 +142,7 @@ def es(app): """Provide elasticsearch access.""" try: list(current_search.create()) - except RequestError: + except (IndexAlreadyExistsError, RequestError): list(current_search.delete(ignore=[404])) list(current_search.create(ignore=[400])) yield current_search diff --git a/tests/test_rest.py b/tests/test_rest.py index 882f398..684bfda 100644 --- a/tests/test_rest.py +++ b/tests/test_rest.py @@ -26,12 +26,22 @@ from __future__ import absolute_import, print_function +import json + from invenio_records_rest import InvenioRecordsREST from invenio_records_rest.views import create_blueprint from invenio_openaire.config import OPENAIRE_REST_ENDPOINTS +def _get_json(response, code=None): + """Decode JSON from response.""" + data = response.get_data(as_text=True) + if code is not None: + assert response.status_code == code, data + return json.loads(data) + + def test_records_rest(app, db, es, grants): """Test Records REST.""" app.config['RECORDS_REST_ENDPOINTS'] = OPENAIRE_REST_ENDPOINTS @@ -51,15 +61,25 @@ def test_records_rest(app, db, es, grants): print(res.get_data(as_text=True)) # Suggest res = client.get("/funders/_suggest?text=Uni") - assert res.status_code == 200 - - # Item + data = _get_json(res, 200) + options = data['text'][0]['options'] + assert len(options) == 2 + assert [option['_source']['doi'] for option in options].sort() == [ + '0.13039/501100000923', '10.13039/001'].sort() res = client.get("/grants/10.13039/501100000923::LP0667725") assert res.status_code == 200 # List res = client.get("/grants/") assert res.status_code == 200 # Suggest + funder = '10.13039/501100000923' res = client.get( - "/grants/_suggest?text=open&funder=10.13039/501100000923") - assert res.status_code == 200 + "/grants/_suggest?text=LP&funder={}".format(funder)) + data = _get_json(res, 200) + options = data['text'][0]['options'] + assert len(options) == 3 + assert [(option['_source']['code'], + option['_source']['funder']['doi']) for option in options + ].sort() == [ + ('LP0989479', funder), ('LP0667725', funder), + ('LP0215942', funder)].sort()