diff --git a/README.md b/README.md index c93aa716ba7187c645e15bb6c4622235df8b91e4..f02bba0fd0bd64e504ec89b0ccfdc622e0c17276 100644 --- a/README.md +++ b/README.md @@ -118,13 +118,10 @@ test suite is provided. You can follow the instructions below to run the tests: ```sh pytest ckanext/odsh/tests/ - pytest ckanext/odsh/tests_tpsh/ ``` Running these commands will initiate the test suite, which will automatically execute -various test cases and verify the expected behavior of the extension. The tests are -organized into two directories: `tests` and `tests_tpsh`, each containing different -sets of tests. +various test cases and verify the expected behavior of the extension. ### Internationalization diff --git a/ckanext/odsh/tests_tpsh/__init__.py b/ckanext/odsh/tests/resources/__init__.py similarity index 100% rename from ckanext/odsh/tests_tpsh/__init__.py rename to ckanext/odsh/tests/resources/__init__.py diff --git a/ckanext/odsh/tests_tpsh/resources/collection1.rdf b/ckanext/odsh/tests/resources/collection1.rdf similarity index 100% rename from ckanext/odsh/tests_tpsh/resources/collection1.rdf rename to ckanext/odsh/tests/resources/collection1.rdf diff --git a/ckanext/odsh/tests_tpsh/resources/org_dicts.py b/ckanext/odsh/tests/resources/org_dicts.py similarity index 100% rename from ckanext/odsh/tests_tpsh/resources/org_dicts.py rename to ckanext/odsh/tests/resources/org_dicts.py diff --git a/ckanext/odsh/tests_tpsh/resources/test.pdf b/ckanext/odsh/tests/resources/test.pdf similarity index 100% rename from ckanext/odsh/tests_tpsh/resources/test.pdf rename to ckanext/odsh/tests/resources/test.pdf diff --git a/ckanext/odsh/tests_tpsh/test_checksum.py b/ckanext/odsh/tests/test_checksum.py similarity index 100% rename from ckanext/odsh/tests_tpsh/test_checksum.py rename to ckanext/odsh/tests/test_checksum.py diff --git a/ckanext/odsh/tests_tpsh/test_date_range.py b/ckanext/odsh/tests/test_date_range.py similarity index 100% rename from ckanext/odsh/tests_tpsh/test_date_range.py rename to ckanext/odsh/tests/test_date_range.py diff --git a/ckanext/odsh/tests_tpsh/test_date_range_formatter.py b/ckanext/odsh/tests/test_date_range_formatter.py similarity index 100% rename from ckanext/odsh/tests_tpsh/test_date_range_formatter.py rename to ckanext/odsh/tests/test_date_range_formatter.py diff --git a/ckanext/odsh/tests_tpsh/test_helper_pkg_dict.py b/ckanext/odsh/tests/test_helper_pkg_dict.py similarity index 100% rename from ckanext/odsh/tests_tpsh/test_helper_pkg_dict.py rename to ckanext/odsh/tests/test_helper_pkg_dict.py diff --git a/ckanext/odsh/tests_tpsh/test_helpers_tpsh.py b/ckanext/odsh/tests/test_helpers_tpsh.py similarity index 100% rename from ckanext/odsh/tests_tpsh/test_helpers_tpsh.py rename to ckanext/odsh/tests/test_helpers_tpsh.py diff --git a/ckanext/odsh/tests_tpsh/test_odsh_helpers.py b/ckanext/odsh/tests/test_odsh_helpers.py similarity index 100% rename from ckanext/odsh/tests_tpsh/test_odsh_helpers.py rename to ckanext/odsh/tests/test_odsh_helpers.py diff --git a/ckanext/odsh/tests_tpsh/test_password_validation.py b/ckanext/odsh/tests/test_password_validation.py similarity index 100% rename from ckanext/odsh/tests_tpsh/test_password_validation.py rename to ckanext/odsh/tests/test_password_validation.py diff --git a/ckanext/odsh/tests/test_plugin.py b/ckanext/odsh/tests/test_plugin.py index af2f6e90324119090a8d6ca0c324b900e4cb1690..140bd8ae92afc4a21e9235038898f13a3da489b8 100644 --- a/ckanext/odsh/tests/test_plugin.py +++ b/ckanext/odsh/tests/test_plugin.py @@ -1,30 +1,53 @@ -import paste.fixture -import pylons.test -import ckan.plugins -import ckan.model as model -import ckan.tests.factories as factories -import ckan.tests.legacy as tests -from ckan.common import config +import datetime +import ckanext.odsh.plugin as plugin +import unittest -# class TestOdshPlugin(object): +class TestMethodBeforeView(unittest.TestCase): + date_time_format = '%Y-%m-%dT%H:%M:%S' -# @classmethod -# def setup_class(cls): -# cls.app = paste.fixture.TestApp(pylons.test.pylonsapp) -# ckan.plugins.load('odsh') + def test_before_view_adds_false_for_old_dataset(self): + plugin_object = plugin.OdshPlugin() + today = datetime.date.today() + hundred_days_ago = today - datetime.timedelta(days=100) + hundred_days_ago_as_ckan_str = self._date_as_ckan_str(hundred_days_ago) + dict_for_template = plugin_object.before_view( + { + 'extras': [ + {'key': 'issued', 'value': hundred_days_ago_as_ckan_str} + ] + } + ) + assert dict_for_template['is_new']==False -# def teardown(self): -# model.repo.rebuild_db() + def _date_as_ckan_str(self, date): + return date.strftime(self.date_time_format) -# @classmethod -# def teardown_class(cls): -# ckan.plugins.unload('odsh') - -# def test_plugin(self): -# pass - -# def test_user_cannot_access_dashboard(self): -# user = factories.User() -# tests.call_action_api(self.app, 'group_create', name='test-group', -# apikey=user['apikey']) + def test_before_view_adds_true_for_new_dataset(self): + plugin_object = plugin.OdshPlugin() + today = datetime.date.today() + ten_days_ago = today - datetime.timedelta(days=10) + ten_days_ago_as_ckan_str = self._date_as_ckan_str(ten_days_ago) + dict_for_template = plugin_object.before_view( + { + 'extras': [ + {'key': 'issued', 'value': ten_days_ago_as_ckan_str} + ] + } + ) + assert dict_for_template['is_new']==True + + def test_before_view_does_not_modify_unconcerned_dict_values(self): + plugin_object = plugin.OdshPlugin() + today = datetime.date.today() + ten_days_ago = today - datetime.timedelta(days=10) + ten_days_ago_as_ckan_str = self._date_as_ckan_str(ten_days_ago) + dict_for_template = plugin_object.before_view( + { + 'extras': [ + {'key': 'issued', 'value': ten_days_ago_as_ckan_str} + ], + 'some_other_key': 'some_other_value', + } + ) + assert dict_for_template['some_other_key']=='some_other_value' diff --git a/ckanext/odsh/tests_tpsh/test_profiles.py b/ckanext/odsh/tests/test_profiles.py similarity index 100% rename from ckanext/odsh/tests_tpsh/test_profiles.py rename to ckanext/odsh/tests/test_profiles.py diff --git a/ckanext/odsh/tests/test_search.py b/ckanext/odsh/tests/test_search.py index 854a7917a5f7a0c3a8e27ccafe1cae33f153f185..0988d909ce2f5e86cc9af2822abd03169653a5ec 100644 --- a/ckanext/odsh/tests/test_search.py +++ b/ckanext/odsh/tests/test_search.py @@ -1,253 +1,133 @@ -# encoding: utf-8 - -import ckan.tests.factories as factories -import ckan.tests.helpers as helpers -from bs4 import BeautifulSoup -from ckan import model -from ckan.lib.mailer import create_reset_key -from routes import url_for -import ckan.plugins -from .test_helpers import odsh_test -import pdb - - - -class TestSearch(helpers.FunctionalTestBase): - - _load_plugins = ['odsh', 'spatial_metadata', 'spatial_query'] - - def teardown(self): - model.repo.rebuild_db() - - @odsh_test() - def test_dataset_is_in_search_result(self): - # arrange - dataset = self._create_dataset() - - # act - response = self._perform_search() - - # assert - assert dataset['name'] in response - - @odsh_test() - def test_query_with_no_match_finds_no_dataset(self): - # arrange - dataset = self._create_dataset() - - # act - response = self._perform_search("foobar") - - # assert - self._assert_no_results(response) - - @odsh_test() - def test_query_with_no_dates_finds_dataset(self): - # arrange - dataset = self._create_dataset() - +import ckanext.odsh.search as search +import unittest + +class Test_before_search(unittest.TestCase): + def setUp(self): + self.search_params_before_test = { + 'extras': {}, + 'facet.field': ['organization', 'groups'], + 'fq': 'organization:"test-organisation" groups:"gove" +dataset_type:dataset', + 'include_private': True, + 'q': '', + 'rows': 20, + 'sort': 'score desc, metadata_modified desc', + 'start': 0 + } + self.search_params_with_facet_mincount = self.search_params_before_test.copy() + self.search_params_with_facet_mincount.update({'facet.mincount': 0}) + + def test_it_solely_adds_facet_mincount_to_dict_if_no_extras(self): + # arange + search_params = self.search_params_before_test.copy() # act - response = self._perform_date_search(None, None) - + search.before_search(search_params) # assert - assert dataset['name'] in response - - @odsh_test() - def test_query_with_very_old_dataset(self): - # arrange - dataseta = self._create_dataset('do_not_find_me', '2011-01-01', '2013-12-31') - datasetb = self._create_dataset('old_dataset', '1111-01-01', '1860-12-31') - - # act - response = self._perform_date_search('1110-12-30', '1960-02-01') - - # assert - assert 'wrong_start_date_for_search' not in response - self._assert_datasets_in_response([datasetb], response) - self._assert_datasets_not_in_response([dataseta], response) - - @odsh_test() - def test_query_with_end_before_start_finds_no_dataset(self): - # arrange - datasetA = self._create_dataset('dataseta', '1960-01-01', '1960-12-31') - - # act - response = self._perform_date_search('1960-12-30', '1960-02-01') - - # assert - self._assert_no_results(response) - - @odsh_test() - def test_query_with_wrong_dates_shows_error(self): - # arrange - dataset = self._create_dataset() - + search_params_expected = self.search_params_with_facet_mincount.copy() + assert search_params == search_params_expected + + def test_it_adds_fq_if_empty_range(self): + # arange + search_params = self.search_params_before_test.copy() + extras = {'ext_enddate': '2019-08-01', 'ext_startdate': '2019-08-02'} + search_params.update({'extras': extras}) + search_params_expected = self.search_params_with_facet_mincount.copy() + search_params_expected.update({'extras': extras}) + search_params_expected.update({ + 'fq': ( + 'organization:"test-organisation" groups:"gove" ' + '+dataset_type:dataset (+extras_temporal_start:[2019-08-02T00:00:00Z TO 2019-08-01T00:00:00Z] ' + 'OR +extras_temporal_end:[2019-08-02T00:00:00Z TO 2019-08-01T00:00:00Z] OR ' + '((*:* NOT extras_temporal_end:[* TO *]) AND extras_temporal_start:[* TO 2019-08-01T00:00:00Z]))' + ) + }) # act - response1 = self._perform_date_search('foo', None) - response2 = self._perform_date_search(None, 'foo') - response3 = self._perform_date_search('11-11-11', None) - + search.before_search(search_params) # assert - assert 'wrong_start_date_for_search' in response1 - self._assert_datasets_in_response([dataset], response1) - assert 'daterange: to' not in response1 - assert 'daterange: from' not in response1 - assert 'wrong_end_date_for_search' in response2 - self._assert_datasets_in_response([dataset], response2) - assert 'daterange: to' not in response2 - assert 'daterange: from' not in response2 - assert 'wrong_start_date_for_search' in response3 - assert 'daterange: to' not in response3 - assert 'daterange: from' not in response3 - self._assert_datasets_in_response([dataset], response3) - - @odsh_test() - def test_query_with_start_date_finds_one_dataset(self): - # arrange - datasetA = self._create_dataset('dataseta', '1960-01-01', '1960-12-31') - datasetB = self._create_dataset('datasetb', '1980-01-01', '1990-06-30') - datasetC = self._create_dataset('datasetc', '2001-03-01', '2001-04-30') - + assert search_params == search_params_expected + + def test_it_solely_adds_facet_mincount_to_dict_if_wrong_date_format_in_extras(self): + # arange + search_params = self.search_params_before_test.copy() + extras = {'ext_enddate': 'some_date', 'ext_startdate': 'some_date'} + search_params.update({'extras': extras}) + search_params_expected = self.search_params_with_facet_mincount.copy() + search_params_expected.update({'extras': extras}) # act - response1 = self._perform_date_search(None, '1990-01-01') - response2 = self._perform_date_search(None, '2010-12-31') - response3 = self._perform_date_search('2010-12-31', None) - response4 = self._perform_date_search('1985-04-01', '1985-04-20') - response5 = self._perform_date_search('2001-04-01', None) - + search.before_search(search_params) # assert - self._assert_datasets_in_response([datasetA, datasetB], response1) - self._assert_datasets_not_in_response([datasetC], response1) - assert 'daterange: to' in response1 - - self._assert_datasets_in_response( - [datasetA, datasetB, datasetC], response2) - assert 'daterange: to' in response2 - - self._assert_no_results(response3) - assert 'daterange: from' in response3 - - self._assert_datasets_in_response([datasetB], response4) - self._assert_datasets_not_in_response([datasetA, datasetC], response4) - assert 'daterange: to' in response4 - assert 'daterange: from' in response4 - - self._assert_datasets_in_response([datasetC], response5) - self._assert_datasets_not_in_response([datasetA, datasetB], response5) - - @odsh_test() - def test_dataset_combime_date_range_search_and_text_search_same_title(self): - # arrange - datasetA = self._create_dataset('dataseta', '1960-01-01', '1960-12-31','mytitle') - datasetB = self._create_dataset('datasetb', '1980-01-01', '1990-06-30', 'mytitle') - + assert search_params == search_params_expected + + def test_it_adds_fq_if_enclosing_range(self): + # arange + search_params = self.search_params_before_test.copy() + extras = {'ext_enddate': '2019-08-02', 'ext_startdate': '2019-08-01'} + search_params.update({'extras': extras}) + search_params_expected = self.search_params_with_facet_mincount.copy() + search_params_expected.update({'extras': extras}) + search_params_expected.update({ + 'fq': ( + 'organization:"test-organisation" groups:"gove" ' + '+dataset_type:dataset ' + '(+extras_temporal_start:[2019-08-01T00:00:00Z TO 2019-08-02T00:00:00Z] ' + 'OR +extras_temporal_end:[2019-08-01T00:00:00Z TO 2019-08-02T00:00:00Z] ' + 'OR (extras_temporal_start:[* TO 2019-08-01T00:00:00Z] AND ' + 'extras_temporal_end:[2019-08-02T00:00:00Z TO *]) OR ' + '((*:* NOT extras_temporal_end:[* TO *]) AND ' + 'extras_temporal_start:[* TO 2019-08-02T00:00:00Z]))' + ) + }) # act - response = self._perform_text_and_date_search('mytitle', None, '1970-01-01') - + search.before_search(search_params) # assert - self._assert_datasets_in_response([datasetA], response) - self._assert_datasets_not_in_response([datasetB], response) - - @odsh_test() - def test_dataset_combime_date_range_search_and_text_search_same_dates(self): - # arrange - datasetA = self._create_dataset('dataseta', '1960-01-01', '1960-12-31','mytitle') - datasetB = self._create_dataset('datasetb', '1960-01-01', '1960-12-31','othertitle') - datasetC = self._create_dataset('datasetc', '1980-01-01', '1990-06-30', 'mytitle') - + assert search_params == search_params_expected + + def test_it_adds_fq_if_start_only(self): + # arange + search_params = self.search_params_before_test.copy() + extras = {'ext_startdate': '2019-08-01'} + search_params.update({'extras': extras}) + search_params_expected = self.search_params_with_facet_mincount.copy() + search_params_expected.update({'extras': extras}) + search_params_expected.update({ + 'fq': ( + 'organization:"test-organisation" groups:"gove" ' + '+dataset_type:dataset ' + '(+extras_temporal_start:[2019-08-01T00:00:00Z TO *] ' + 'OR +extras_temporal_end:[2019-08-01T00:00:00Z TO *] ' + 'OR (*:* NOT extras_temporal_end:[* TO *]))' + ) + }) # act - response = self._perform_text_and_date_search('mytitle', None, '1970-01-01') - + search.before_search(search_params) # assert - self._assert_datasets_in_response([datasetA], response) - self._assert_datasets_not_in_response([datasetB, datasetC], response) - - @odsh_test() - def test_dataset_without_end(self): - # arrange - datasetA = self._create_dataset('dataseta', '1960-01-01', None,'mytitle') - + assert search_params == search_params_expected + + def test_it_adds_fq_if_end_only(self): + # arange + search_params = self.search_params_before_test.copy() + extras = {'ext_enddate': '2019-08-02'} + search_params.update({'extras': extras}) + search_params_expected = self.search_params_with_facet_mincount.copy() + search_params_expected.update({'extras': extras}) + search_params_expected.update({ + 'fq': ( + 'organization:"test-organisation" groups:"gove" ' + '+dataset_type:dataset ' + '(+extras_temporal_start:[* TO 2019-08-02T00:00:00Z] OR ' + '+extras_temporal_end:[* TO 2019-08-02T00:00:00Z] ' + 'OR ((*:* NOT extras_temporal_end:[* TO *]) ' + 'AND extras_temporal_start:[* TO 2019-08-02T00:00:00Z]))' + ) + }) # act - response1 = self._perform_text_and_date_search('mytitle', '1950-01-01', '1950-02-01') - response2 = self._perform_text_and_date_search('mytitle', '1950-01-01', '1960-02-01') - response3 = self._perform_text_and_date_search('mytitle', '1950-01-01', None) - response4 = self._perform_text_and_date_search('mytitle', None, '1970-01-01') - response5 = self._perform_text_and_date_search('mytitle', '1970-01-01', '1980-02-01') - response6 = self._perform_text_and_date_search('mytitle', None, '1950-01-01') - + search.before_search(search_params) # assert - self._assert_datasets_not_in_response([datasetA], response1) - self._assert_datasets_in_response([datasetA], response2) - self._assert_datasets_in_response([datasetA], response3) - self._assert_datasets_in_response([datasetA], response4) - self._assert_datasets_in_response([datasetA], response5) - self._assert_datasets_not_in_response([datasetA], response6) - - @odsh_test() - def test_dataset_new_has_label(self): - # arrange - datasetA = self._create_dataset('dataseta', '1960-01-01', None,'mytitle') - + assert search_params == search_params_expected + + def test_it_returns_search_params(self): + # arange + search_params = self.search_params_before_test.copy() # act - response = self._perform_text_and_date_search('mytitle', None, None) - + return_value = search.before_search(search_params) # assert - response.mustcontain('new-dataset-label') - - def _assert_datasets_in_response(self, datasets, response): - for dataset in datasets: - assert dataset['name'] in response - - def _assert_datasets_not_in_response(self, datasets, response): - for dataset in datasets: - assert dataset['name'] not in response - - def _assert_no_results(self, response): - assert "No datasets found" in response - - def _create_dataset(self, name='my-own-dataset', temporal_start='2000-01-27', temporal_end='2000-01-27',title='title'): - user = factories.User() - extras = [ - {'key': 'temporal_start', 'value': temporal_start}, - {'key': 'temporal_end', 'value': temporal_end}, - {'key': 'issued', 'value': '2000-01-27'}, - {'key': 'groups', 'value': 'soci'}, - {'key': 'licenseAttributionByText', 'value': 'text'}, - {'key': 'spatial_uri', 'value': 'http://dcat-ap.de/def/politicalGeocoding/districtKey/01001'} - ] - return factories.Dataset(user=user, - name=name, - title=title, - issued='27-01-2000', - extras=extras, - license_id='http://dcat-ap.de/def/licenses/dl-by-de/2.0') - - def _perform_search(self, query=None): - search_form = self._perform_search_for_form('dataset-search-box-form') - if query is not None: - search_form['q'] = query - return helpers.webtest_submit(search_form) - - def _perform_date_search(self, search_from, search_to): - search_form = self._perform_search_for_form('dataset-search-box-form') - if search_form is not None: - search_form['ext_startdate'] = search_from - if search_to is not None: - search_form['ext_enddate'] = search_to - return helpers.webtest_submit(search_form) - - def _perform_text_and_date_search(self, query, search_from, search_to): - search_form = self._perform_search_for_form('dataset-search-box-form') - search_form['q'] = query - if search_form is not None: - search_form['ext_startdate'] = search_from - if search_to is not None: - search_form['ext_enddate'] = search_to - return helpers.webtest_submit(search_form) - - def _perform_search_for_form(self, form): - search_url = url_for(named_route='dataset.search') - search_response = self._get_test_app().get(search_url) - - search_form = search_response.forms[form] - return search_form + assert search_params == return_value diff --git a/ckanext/odsh/tests_tpsh/test_uri_store.py b/ckanext/odsh/tests/test_uri_store.py similarity index 100% rename from ckanext/odsh/tests_tpsh/test_uri_store.py rename to ckanext/odsh/tests/test_uri_store.py diff --git a/ckanext/odsh/tests_tpsh/test_plugin.py b/ckanext/odsh/tests_tpsh/test_plugin.py deleted file mode 100644 index 140bd8ae92afc4a21e9235038898f13a3da489b8..0000000000000000000000000000000000000000 --- a/ckanext/odsh/tests_tpsh/test_plugin.py +++ /dev/null @@ -1,53 +0,0 @@ -import datetime - -import ckanext.odsh.plugin as plugin -import unittest - -class TestMethodBeforeView(unittest.TestCase): - date_time_format = '%Y-%m-%dT%H:%M:%S' - - def test_before_view_adds_false_for_old_dataset(self): - plugin_object = plugin.OdshPlugin() - today = datetime.date.today() - hundred_days_ago = today - datetime.timedelta(days=100) - hundred_days_ago_as_ckan_str = self._date_as_ckan_str(hundred_days_ago) - dict_for_template = plugin_object.before_view( - { - 'extras': [ - {'key': 'issued', 'value': hundred_days_ago_as_ckan_str} - ] - } - ) - assert dict_for_template['is_new']==False - - def _date_as_ckan_str(self, date): - return date.strftime(self.date_time_format) - - def test_before_view_adds_true_for_new_dataset(self): - plugin_object = plugin.OdshPlugin() - today = datetime.date.today() - ten_days_ago = today - datetime.timedelta(days=10) - ten_days_ago_as_ckan_str = self._date_as_ckan_str(ten_days_ago) - dict_for_template = plugin_object.before_view( - { - 'extras': [ - {'key': 'issued', 'value': ten_days_ago_as_ckan_str} - ] - } - ) - assert dict_for_template['is_new']==True - - def test_before_view_does_not_modify_unconcerned_dict_values(self): - plugin_object = plugin.OdshPlugin() - today = datetime.date.today() - ten_days_ago = today - datetime.timedelta(days=10) - ten_days_ago_as_ckan_str = self._date_as_ckan_str(ten_days_ago) - dict_for_template = plugin_object.before_view( - { - 'extras': [ - {'key': 'issued', 'value': ten_days_ago_as_ckan_str} - ], - 'some_other_key': 'some_other_value', - } - ) - assert dict_for_template['some_other_key']=='some_other_value' diff --git a/ckanext/odsh/tests_tpsh/test_search.py b/ckanext/odsh/tests_tpsh/test_search.py deleted file mode 100644 index 0988d909ce2f5e86cc9af2822abd03169653a5ec..0000000000000000000000000000000000000000 --- a/ckanext/odsh/tests_tpsh/test_search.py +++ /dev/null @@ -1,133 +0,0 @@ -import ckanext.odsh.search as search -import unittest - -class Test_before_search(unittest.TestCase): - def setUp(self): - self.search_params_before_test = { - 'extras': {}, - 'facet.field': ['organization', 'groups'], - 'fq': 'organization:"test-organisation" groups:"gove" +dataset_type:dataset', - 'include_private': True, - 'q': '', - 'rows': 20, - 'sort': 'score desc, metadata_modified desc', - 'start': 0 - } - self.search_params_with_facet_mincount = self.search_params_before_test.copy() - self.search_params_with_facet_mincount.update({'facet.mincount': 0}) - - def test_it_solely_adds_facet_mincount_to_dict_if_no_extras(self): - # arange - search_params = self.search_params_before_test.copy() - # act - search.before_search(search_params) - # assert - search_params_expected = self.search_params_with_facet_mincount.copy() - assert search_params == search_params_expected - - def test_it_adds_fq_if_empty_range(self): - # arange - search_params = self.search_params_before_test.copy() - extras = {'ext_enddate': '2019-08-01', 'ext_startdate': '2019-08-02'} - search_params.update({'extras': extras}) - search_params_expected = self.search_params_with_facet_mincount.copy() - search_params_expected.update({'extras': extras}) - search_params_expected.update({ - 'fq': ( - 'organization:"test-organisation" groups:"gove" ' - '+dataset_type:dataset (+extras_temporal_start:[2019-08-02T00:00:00Z TO 2019-08-01T00:00:00Z] ' - 'OR +extras_temporal_end:[2019-08-02T00:00:00Z TO 2019-08-01T00:00:00Z] OR ' - '((*:* NOT extras_temporal_end:[* TO *]) AND extras_temporal_start:[* TO 2019-08-01T00:00:00Z]))' - ) - }) - # act - search.before_search(search_params) - # assert - assert search_params == search_params_expected - - def test_it_solely_adds_facet_mincount_to_dict_if_wrong_date_format_in_extras(self): - # arange - search_params = self.search_params_before_test.copy() - extras = {'ext_enddate': 'some_date', 'ext_startdate': 'some_date'} - search_params.update({'extras': extras}) - search_params_expected = self.search_params_with_facet_mincount.copy() - search_params_expected.update({'extras': extras}) - # act - search.before_search(search_params) - # assert - assert search_params == search_params_expected - - def test_it_adds_fq_if_enclosing_range(self): - # arange - search_params = self.search_params_before_test.copy() - extras = {'ext_enddate': '2019-08-02', 'ext_startdate': '2019-08-01'} - search_params.update({'extras': extras}) - search_params_expected = self.search_params_with_facet_mincount.copy() - search_params_expected.update({'extras': extras}) - search_params_expected.update({ - 'fq': ( - 'organization:"test-organisation" groups:"gove" ' - '+dataset_type:dataset ' - '(+extras_temporal_start:[2019-08-01T00:00:00Z TO 2019-08-02T00:00:00Z] ' - 'OR +extras_temporal_end:[2019-08-01T00:00:00Z TO 2019-08-02T00:00:00Z] ' - 'OR (extras_temporal_start:[* TO 2019-08-01T00:00:00Z] AND ' - 'extras_temporal_end:[2019-08-02T00:00:00Z TO *]) OR ' - '((*:* NOT extras_temporal_end:[* TO *]) AND ' - 'extras_temporal_start:[* TO 2019-08-02T00:00:00Z]))' - ) - }) - # act - search.before_search(search_params) - # assert - assert search_params == search_params_expected - - def test_it_adds_fq_if_start_only(self): - # arange - search_params = self.search_params_before_test.copy() - extras = {'ext_startdate': '2019-08-01'} - search_params.update({'extras': extras}) - search_params_expected = self.search_params_with_facet_mincount.copy() - search_params_expected.update({'extras': extras}) - search_params_expected.update({ - 'fq': ( - 'organization:"test-organisation" groups:"gove" ' - '+dataset_type:dataset ' - '(+extras_temporal_start:[2019-08-01T00:00:00Z TO *] ' - 'OR +extras_temporal_end:[2019-08-01T00:00:00Z TO *] ' - 'OR (*:* NOT extras_temporal_end:[* TO *]))' - ) - }) - # act - search.before_search(search_params) - # assert - assert search_params == search_params_expected - - def test_it_adds_fq_if_end_only(self): - # arange - search_params = self.search_params_before_test.copy() - extras = {'ext_enddate': '2019-08-02'} - search_params.update({'extras': extras}) - search_params_expected = self.search_params_with_facet_mincount.copy() - search_params_expected.update({'extras': extras}) - search_params_expected.update({ - 'fq': ( - 'organization:"test-organisation" groups:"gove" ' - '+dataset_type:dataset ' - '(+extras_temporal_start:[* TO 2019-08-02T00:00:00Z] OR ' - '+extras_temporal_end:[* TO 2019-08-02T00:00:00Z] ' - 'OR ((*:* NOT extras_temporal_end:[* TO *]) ' - 'AND extras_temporal_start:[* TO 2019-08-02T00:00:00Z]))' - ) - }) - # act - search.before_search(search_params) - # assert - assert search_params == search_params_expected - - def test_it_returns_search_params(self): - # arange - search_params = self.search_params_before_test.copy() - # act - return_value = search.before_search(search_params) - # assert - assert search_params == return_value diff --git a/ckanext/odsh/tests_tpsh/resources/__init__.py b/ckanext/odsh/tests_wip/__init__.py similarity index 100% rename from ckanext/odsh/tests_tpsh/resources/__init__.py rename to ckanext/odsh/tests_wip/__init__.py diff --git a/ckanext/odsh/tests/ckan_selenium.py b/ckanext/odsh/tests_wip/ckan_selenium.py similarity index 100% rename from ckanext/odsh/tests/ckan_selenium.py rename to ckanext/odsh/tests_wip/ckan_selenium.py diff --git a/ckanext/odsh/tests/harvest_sever_mock.py b/ckanext/odsh/tests_wip/harvest_sever_mock.py similarity index 100% rename from ckanext/odsh/tests/harvest_sever_mock.py rename to ckanext/odsh/tests_wip/harvest_sever_mock.py diff --git a/ckanext/odsh/tests/icap_sever_mock.py b/ckanext/odsh/tests_wip/icap_sever_mock.py similarity index 100% rename from ckanext/odsh/tests/icap_sever_mock.py rename to ckanext/odsh/tests_wip/icap_sever_mock.py diff --git a/ckanext/odsh/tests/rdf_catalog.xml b/ckanext/odsh/tests_wip/rdf_catalog.xml similarity index 100% rename from ckanext/odsh/tests/rdf_catalog.xml rename to ckanext/odsh/tests_wip/rdf_catalog.xml diff --git a/ckanext/odsh/tests/rdf_catalog_empty.xml b/ckanext/odsh/tests_wip/rdf_catalog_empty.xml similarity index 100% rename from ckanext/odsh/tests/rdf_catalog_empty.xml rename to ckanext/odsh/tests_wip/rdf_catalog_empty.xml diff --git a/ckanext/odsh/tests/result_data.json b/ckanext/odsh/tests_wip/result_data.json similarity index 100% rename from ckanext/odsh/tests/result_data.json rename to ckanext/odsh/tests_wip/result_data.json diff --git a/ckanext/odsh/tests/spatial_mapping.csv b/ckanext/odsh/tests_wip/spatial_mapping.csv similarity index 100% rename from ckanext/odsh/tests/spatial_mapping.csv rename to ckanext/odsh/tests_wip/spatial_mapping.csv diff --git a/ckanext/odsh/tests/test_data.json b/ckanext/odsh/tests_wip/test_data.json similarity index 100% rename from ckanext/odsh/tests/test_data.json rename to ckanext/odsh/tests_wip/test_data.json diff --git a/ckanext/odsh/tests/test_datarequest.py b/ckanext/odsh/tests_wip/test_datarequest.py similarity index 100% rename from ckanext/odsh/tests/test_datarequest.py rename to ckanext/odsh/tests_wip/test_datarequest.py diff --git a/ckanext/odsh/tests/test_env.py b/ckanext/odsh/tests_wip/test_env.py similarity index 100% rename from ckanext/odsh/tests/test_env.py rename to ckanext/odsh/tests_wip/test_env.py diff --git a/ckanext/odsh/tests/test_harvest.py b/ckanext/odsh/tests_wip/test_harvest.py similarity index 100% rename from ckanext/odsh/tests/test_harvest.py rename to ckanext/odsh/tests_wip/test_harvest.py diff --git a/ckanext/odsh/tests/test_helpers.py b/ckanext/odsh/tests_wip/test_helpers.py similarity index 100% rename from ckanext/odsh/tests/test_helpers.py rename to ckanext/odsh/tests_wip/test_helpers.py diff --git a/ckanext/odsh/tests_wip/test_plugin.py b/ckanext/odsh/tests_wip/test_plugin.py new file mode 100644 index 0000000000000000000000000000000000000000..af2f6e90324119090a8d6ca0c324b900e4cb1690 --- /dev/null +++ b/ckanext/odsh/tests_wip/test_plugin.py @@ -0,0 +1,30 @@ +import paste.fixture +import pylons.test +import ckan.plugins +import ckan.model as model +import ckan.tests.factories as factories +import ckan.tests.legacy as tests +from ckan.common import config + + +# class TestOdshPlugin(object): + +# @classmethod +# def setup_class(cls): +# cls.app = paste.fixture.TestApp(pylons.test.pylonsapp) +# ckan.plugins.load('odsh') + +# def teardown(self): +# model.repo.rebuild_db() + +# @classmethod +# def teardown_class(cls): +# ckan.plugins.unload('odsh') + +# def test_plugin(self): +# pass + +# def test_user_cannot_access_dashboard(self): +# user = factories.User() +# tests.call_action_api(self.app, 'group_create', name='test-group', +# apikey=user['apikey']) diff --git a/ckanext/odsh/tests/test_rdfexport.py b/ckanext/odsh/tests_wip/test_rdfexport.py similarity index 100% rename from ckanext/odsh/tests/test_rdfexport.py rename to ckanext/odsh/tests_wip/test_rdfexport.py diff --git a/ckanext/odsh/tests/test_routes.py b/ckanext/odsh/tests_wip/test_routes.py similarity index 100% rename from ckanext/odsh/tests/test_routes.py rename to ckanext/odsh/tests_wip/test_routes.py diff --git a/ckanext/odsh/tests_wip/test_search.py b/ckanext/odsh/tests_wip/test_search.py new file mode 100644 index 0000000000000000000000000000000000000000..854a7917a5f7a0c3a8e27ccafe1cae33f153f185 --- /dev/null +++ b/ckanext/odsh/tests_wip/test_search.py @@ -0,0 +1,253 @@ +# encoding: utf-8 + +import ckan.tests.factories as factories +import ckan.tests.helpers as helpers +from bs4 import BeautifulSoup +from ckan import model +from ckan.lib.mailer import create_reset_key +from routes import url_for +import ckan.plugins +from .test_helpers import odsh_test +import pdb + + + +class TestSearch(helpers.FunctionalTestBase): + + _load_plugins = ['odsh', 'spatial_metadata', 'spatial_query'] + + def teardown(self): + model.repo.rebuild_db() + + @odsh_test() + def test_dataset_is_in_search_result(self): + # arrange + dataset = self._create_dataset() + + # act + response = self._perform_search() + + # assert + assert dataset['name'] in response + + @odsh_test() + def test_query_with_no_match_finds_no_dataset(self): + # arrange + dataset = self._create_dataset() + + # act + response = self._perform_search("foobar") + + # assert + self._assert_no_results(response) + + @odsh_test() + def test_query_with_no_dates_finds_dataset(self): + # arrange + dataset = self._create_dataset() + + # act + response = self._perform_date_search(None, None) + + # assert + assert dataset['name'] in response + + @odsh_test() + def test_query_with_very_old_dataset(self): + # arrange + dataseta = self._create_dataset('do_not_find_me', '2011-01-01', '2013-12-31') + datasetb = self._create_dataset('old_dataset', '1111-01-01', '1860-12-31') + + # act + response = self._perform_date_search('1110-12-30', '1960-02-01') + + # assert + assert 'wrong_start_date_for_search' not in response + self._assert_datasets_in_response([datasetb], response) + self._assert_datasets_not_in_response([dataseta], response) + + @odsh_test() + def test_query_with_end_before_start_finds_no_dataset(self): + # arrange + datasetA = self._create_dataset('dataseta', '1960-01-01', '1960-12-31') + + # act + response = self._perform_date_search('1960-12-30', '1960-02-01') + + # assert + self._assert_no_results(response) + + @odsh_test() + def test_query_with_wrong_dates_shows_error(self): + # arrange + dataset = self._create_dataset() + + # act + response1 = self._perform_date_search('foo', None) + response2 = self._perform_date_search(None, 'foo') + response3 = self._perform_date_search('11-11-11', None) + + # assert + assert 'wrong_start_date_for_search' in response1 + self._assert_datasets_in_response([dataset], response1) + assert 'daterange: to' not in response1 + assert 'daterange: from' not in response1 + assert 'wrong_end_date_for_search' in response2 + self._assert_datasets_in_response([dataset], response2) + assert 'daterange: to' not in response2 + assert 'daterange: from' not in response2 + assert 'wrong_start_date_for_search' in response3 + assert 'daterange: to' not in response3 + assert 'daterange: from' not in response3 + self._assert_datasets_in_response([dataset], response3) + + @odsh_test() + def test_query_with_start_date_finds_one_dataset(self): + # arrange + datasetA = self._create_dataset('dataseta', '1960-01-01', '1960-12-31') + datasetB = self._create_dataset('datasetb', '1980-01-01', '1990-06-30') + datasetC = self._create_dataset('datasetc', '2001-03-01', '2001-04-30') + + # act + response1 = self._perform_date_search(None, '1990-01-01') + response2 = self._perform_date_search(None, '2010-12-31') + response3 = self._perform_date_search('2010-12-31', None) + response4 = self._perform_date_search('1985-04-01', '1985-04-20') + response5 = self._perform_date_search('2001-04-01', None) + + # assert + self._assert_datasets_in_response([datasetA, datasetB], response1) + self._assert_datasets_not_in_response([datasetC], response1) + assert 'daterange: to' in response1 + + self._assert_datasets_in_response( + [datasetA, datasetB, datasetC], response2) + assert 'daterange: to' in response2 + + self._assert_no_results(response3) + assert 'daterange: from' in response3 + + self._assert_datasets_in_response([datasetB], response4) + self._assert_datasets_not_in_response([datasetA, datasetC], response4) + assert 'daterange: to' in response4 + assert 'daterange: from' in response4 + + self._assert_datasets_in_response([datasetC], response5) + self._assert_datasets_not_in_response([datasetA, datasetB], response5) + + @odsh_test() + def test_dataset_combime_date_range_search_and_text_search_same_title(self): + # arrange + datasetA = self._create_dataset('dataseta', '1960-01-01', '1960-12-31','mytitle') + datasetB = self._create_dataset('datasetb', '1980-01-01', '1990-06-30', 'mytitle') + + # act + response = self._perform_text_and_date_search('mytitle', None, '1970-01-01') + + # assert + self._assert_datasets_in_response([datasetA], response) + self._assert_datasets_not_in_response([datasetB], response) + + @odsh_test() + def test_dataset_combime_date_range_search_and_text_search_same_dates(self): + # arrange + datasetA = self._create_dataset('dataseta', '1960-01-01', '1960-12-31','mytitle') + datasetB = self._create_dataset('datasetb', '1960-01-01', '1960-12-31','othertitle') + datasetC = self._create_dataset('datasetc', '1980-01-01', '1990-06-30', 'mytitle') + + # act + response = self._perform_text_and_date_search('mytitle', None, '1970-01-01') + + # assert + self._assert_datasets_in_response([datasetA], response) + self._assert_datasets_not_in_response([datasetB, datasetC], response) + + @odsh_test() + def test_dataset_without_end(self): + # arrange + datasetA = self._create_dataset('dataseta', '1960-01-01', None,'mytitle') + + # act + response1 = self._perform_text_and_date_search('mytitle', '1950-01-01', '1950-02-01') + response2 = self._perform_text_and_date_search('mytitle', '1950-01-01', '1960-02-01') + response3 = self._perform_text_and_date_search('mytitle', '1950-01-01', None) + response4 = self._perform_text_and_date_search('mytitle', None, '1970-01-01') + response5 = self._perform_text_and_date_search('mytitle', '1970-01-01', '1980-02-01') + response6 = self._perform_text_and_date_search('mytitle', None, '1950-01-01') + + # assert + self._assert_datasets_not_in_response([datasetA], response1) + self._assert_datasets_in_response([datasetA], response2) + self._assert_datasets_in_response([datasetA], response3) + self._assert_datasets_in_response([datasetA], response4) + self._assert_datasets_in_response([datasetA], response5) + self._assert_datasets_not_in_response([datasetA], response6) + + @odsh_test() + def test_dataset_new_has_label(self): + # arrange + datasetA = self._create_dataset('dataseta', '1960-01-01', None,'mytitle') + + # act + response = self._perform_text_and_date_search('mytitle', None, None) + + # assert + response.mustcontain('new-dataset-label') + + def _assert_datasets_in_response(self, datasets, response): + for dataset in datasets: + assert dataset['name'] in response + + def _assert_datasets_not_in_response(self, datasets, response): + for dataset in datasets: + assert dataset['name'] not in response + + def _assert_no_results(self, response): + assert "No datasets found" in response + + def _create_dataset(self, name='my-own-dataset', temporal_start='2000-01-27', temporal_end='2000-01-27',title='title'): + user = factories.User() + extras = [ + {'key': 'temporal_start', 'value': temporal_start}, + {'key': 'temporal_end', 'value': temporal_end}, + {'key': 'issued', 'value': '2000-01-27'}, + {'key': 'groups', 'value': 'soci'}, + {'key': 'licenseAttributionByText', 'value': 'text'}, + {'key': 'spatial_uri', 'value': 'http://dcat-ap.de/def/politicalGeocoding/districtKey/01001'} + ] + return factories.Dataset(user=user, + name=name, + title=title, + issued='27-01-2000', + extras=extras, + license_id='http://dcat-ap.de/def/licenses/dl-by-de/2.0') + + def _perform_search(self, query=None): + search_form = self._perform_search_for_form('dataset-search-box-form') + if query is not None: + search_form['q'] = query + return helpers.webtest_submit(search_form) + + def _perform_date_search(self, search_from, search_to): + search_form = self._perform_search_for_form('dataset-search-box-form') + if search_form is not None: + search_form['ext_startdate'] = search_from + if search_to is not None: + search_form['ext_enddate'] = search_to + return helpers.webtest_submit(search_form) + + def _perform_text_and_date_search(self, query, search_from, search_to): + search_form = self._perform_search_for_form('dataset-search-box-form') + search_form['q'] = query + if search_form is not None: + search_form['ext_startdate'] = search_from + if search_to is not None: + search_form['ext_enddate'] = search_to + return helpers.webtest_submit(search_form) + + def _perform_search_for_form(self, form): + search_url = url_for(named_route='dataset.search') + search_response = self._get_test_app().get(search_url) + + search_form = search_response.forms[form] + return search_form diff --git a/ckanext/odsh/tests/test_selenium.py b/ckanext/odsh/tests_wip/test_selenium.py similarity index 100% rename from ckanext/odsh/tests/test_selenium.py rename to ckanext/odsh/tests_wip/test_selenium.py diff --git a/ckanext/odsh/tests/test_statistikNordHarvester_old.py b/ckanext/odsh/tests_wip/test_statistikNordHarvester_old.py similarity index 100% rename from ckanext/odsh/tests/test_statistikNordHarvester_old.py rename to ckanext/odsh/tests_wip/test_statistikNordHarvester_old.py diff --git a/ckanext/odsh/tests/test_upload.py b/ckanext/odsh/tests_wip/test_upload.py similarity index 100% rename from ckanext/odsh/tests/test_upload.py rename to ckanext/odsh/tests_wip/test_upload.py diff --git a/ckanext/odsh/tests/test_user.py b/ckanext/odsh/tests_wip/test_user.py similarity index 100% rename from ckanext/odsh/tests/test_user.py rename to ckanext/odsh/tests_wip/test_user.py diff --git a/ckanext/odsh/tests/test_validation.py b/ckanext/odsh/tests_wip/test_validation.py similarity index 100% rename from ckanext/odsh/tests/test_validation.py rename to ckanext/odsh/tests_wip/test_validation.py