Skip to content
Snippets Groups Projects
test_search.py 4.47 KiB
Newer Older
  • Learn to ignore specific revisions
  • # 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 nose.tools import assert_true, assert_false, assert_equal, assert_in
    from routes import url_for
    import ckan.plugins
    
    
    def odsh_test(): return helpers.change_config('ckanext.odsh.spatial.mapping',
                                                  'file:///usr/lib/ckan/default/src/ckanext-odsh/ckanext/odsh/tests/spatial_mapping.csv')
    
    
    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_start_date_finds_one_dataset(self):
            # arrange
            datasetA = self._create_dataset('dataseta', '01-01-1960', '31-12-1960')
            datasetB = self._create_dataset('datasetb', '01-01-1980', '30-06-1990')
            datasetC = self._create_dataset('datasetc', '01-03-2001', '30-04-2001')
    
            # 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)
    
            self._assert_datasets_in_response(
                [datasetA, datasetB, datasetC], response2)
    
            self._assert_no_results(response3)
    
            self._assert_datasets_in_response([datasetB], response4)
            self._assert_datasets_not_in_response([datasetA, datasetC], response4)
    
            self._assert_datasets_in_response([datasetC], response5)
            self._assert_datasets_not_in_response([datasetA, datasetB], response5)
    
        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='27-01-2000', temporal_end='27-01-2000'):
            user = factories.User()
            return factories.Dataset(user=user,
                                     name=name,
                                     title='My very own dataset',
                                     issued='27-01-2000',
                                     spatial_uri='http://dcat-ap.de/def/politicalGeocoding/districtKey/01001',
                                     temporal_start=temporal_start,
                                     temporal_end=temporal_end)
    
        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('date-search-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_search_for_form(self, form):
            search_url = url_for(controller='package', action='search')
            search_response = self._get_test_app().get(search_url)
    
            search_form = search_response.forms[form]
            return search_form