128 lines
4.3 KiB
Python
128 lines
4.3 KiB
Python
import logging
|
|
import json
|
|
from pprint import pprint
|
|
from nose.tools import assert_equal, assert_raises
|
|
from ckan.logic.action.create import package_create
|
|
from ckan.logic.action.delete import package_delete
|
|
from ckan.logic.schema import default_create_package_schema
|
|
from ckan import model
|
|
|
|
from ckan.model import Package, Session
|
|
import ckan.lib.search as search
|
|
from ckan.tests import CreateTestData, setup_test_search_index,WsgiAppCase
|
|
from ckan.tests.functional.api.base import ApiTestCase
|
|
from ckan.tests import TestController as ControllerTestCase
|
|
from ckanext.spatial.tests import SpatialTestBase
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
class TestSpatialApi(ApiTestCase,SpatialTestBase,ControllerTestCase):
|
|
|
|
api_version = '2'
|
|
|
|
@classmethod
|
|
def setup_class(self):
|
|
super(TestSpatialApi,self).setup_class()
|
|
setup_test_search_index()
|
|
CreateTestData.create_test_user()
|
|
self.package_fixture_data = {
|
|
'name' : u'test-spatial-dataset-search-point',
|
|
'title': 'Some Title',
|
|
'extras': [{'key':'spatial','value':self.geojson_examples['point']}]
|
|
}
|
|
self.base_url = self.offset('/search/dataset/geo')
|
|
|
|
def _offset_with_bbox(self,minx=-180,miny=-90,maxx=180,maxy=90,crs=None):
|
|
offset = self.base_url + '?bbox=%s,%s,%s,%s' % (minx,miny,maxx,maxy)
|
|
if crs:
|
|
offset = offset + '&crs=%s' % crs
|
|
return offset
|
|
|
|
def test_basic_query(self):
|
|
schema = default_create_package_schema()
|
|
context = {'model':model,'session':Session,'user':'tester','extras_as_string':True,'schema':schema,'api_version':2}
|
|
package_dict = package_create(context,self.package_fixture_data)
|
|
package_id = context.get('id')
|
|
|
|
# Point inside bbox
|
|
offset = self._offset_with_bbox()
|
|
|
|
res = self.app.get(offset, status=200)
|
|
res_dict = self.data_from_res(res)
|
|
|
|
assert res_dict['count'] == 1
|
|
assert res_dict['results'][0] == package_id
|
|
|
|
# Point outside bbox
|
|
offset = self._offset_with_bbox(-10,10,-20,20)
|
|
|
|
res = self.app.get(offset, status=200)
|
|
res_dict = self.data_from_res(res)
|
|
|
|
assert res_dict['count'] == 0
|
|
assert res_dict['results'] == []
|
|
|
|
# Delete the package and ensure it does not come up on
|
|
# search results
|
|
package_delete(context,{'id':package_id})
|
|
offset = self._offset_with_bbox()
|
|
|
|
res = self.app.get(offset, status=200)
|
|
res_dict = self.data_from_res(res)
|
|
|
|
assert res_dict['count'] == 0
|
|
assert res_dict['results'] == []
|
|
|
|
|
|
|
|
class TestActionPackageSearch(SpatialTestBase,WsgiAppCase):
|
|
|
|
@classmethod
|
|
def setup_class(self):
|
|
super(TestActionPackageSearch,self).setup_class()
|
|
setup_test_search_index()
|
|
self.package_fixture_data_1 = {
|
|
'name' : u'test-spatial-dataset-search-point-1',
|
|
'title': 'Some Title 1',
|
|
'extras': [{'key':'spatial','value':self.geojson_examples['point']}]
|
|
}
|
|
self.package_fixture_data_2 = {
|
|
'name' : u'test-spatial-dataset-search-point-2',
|
|
'title': 'Some Title 2',
|
|
'extras': [{'key':'spatial','value':self.geojson_examples['point_2']}]
|
|
}
|
|
|
|
CreateTestData.create()
|
|
|
|
@classmethod
|
|
def teardown_class(self):
|
|
model.repo.rebuild_db()
|
|
|
|
def test_1_basic(self):
|
|
schema = default_create_package_schema()
|
|
context = {'model':model,'session':Session,'user':'tester','extras_as_string':True,'schema':schema,'api_version':2}
|
|
package_dict_1 = package_create(context,self.package_fixture_data_1)
|
|
del context['package']
|
|
package_dict_2 = package_create(context,self.package_fixture_data_2)
|
|
|
|
postparams = '%s=1' % json.dumps({
|
|
'q': 'test',
|
|
'facet.field': ('groups', 'tags', 'res_format', 'license'),
|
|
'rows': 20,
|
|
'start': 0,
|
|
'extras': {
|
|
'ext_bbox': '%s,%s,%s,%s' % (10,10,40,40)
|
|
}
|
|
})
|
|
res = self.app.post('/api/action/package_search', params=postparams)
|
|
res = json.loads(res.body)
|
|
result = res['result']
|
|
|
|
# Only one dataset returned
|
|
assert_equal(res['success'], True)
|
|
assert_equal(result['count'], 1)
|
|
assert_equal(result['results'][0]['name'], 'test-spatial-dataset-search-point-2')
|
|
|