Skip to content

Commit

Permalink
Fix ckanext tests
Browse files Browse the repository at this point in the history
Same as previous commits, using the app from
tests.helpers._get_test_app and request contexts when necessary

Conflicts:
	ckanext/imageview/tests/test_view.py
  • Loading branch information
amercader committed Jun 9, 2016
1 parent d1adfe7 commit 3298f69
Show file tree
Hide file tree
Showing 16 changed files with 364 additions and 235 deletions.
24 changes: 13 additions & 11 deletions ckanext/datapusher/tests/test.py
Expand Up @@ -8,15 +8,14 @@
import datetime

import pylons
from pylons import config
import sqlalchemy.orm as orm
import paste.fixture


from ckan.tests import helpers
import ckan.plugins as p
import ckan.lib.create_test_data as ctd
import ckan.model as model
import ckan.tests.legacy as tests
import ckan.config.middleware as middleware

import ckanext.datastore.db as db
from ckanext.datastore.tests.helpers import rebuild_all_dbs, set_url_type
Expand Down Expand Up @@ -68,9 +67,7 @@ class TestDatastoreCreate(tests.WsgiAppCase):

@classmethod
def setup_class(cls):

wsgiapp = middleware.make_app(config['global_conf'], **config)
cls.app = paste.fixture.TestApp(wsgiapp)
cls.app = helpers._get_test_app()
if not tests.is_datastore_supported():
raise nose.SkipTest("Datastore not supported")
p.load('datastore')
Expand All @@ -81,8 +78,10 @@ def setup_class(cls):
engine = db._get_engine(
{'connection_url': pylons.config['ckan.datastore.write_url']})
cls.Session = orm.scoped_session(orm.sessionmaker(bind=engine))
set_url_type(
model.Package.get('annakarenina').resources, cls.sysadmin_user)

with cls.app.flask_app.test_request_context():
set_url_type(
model.Package.get('annakarenina').resources, cls.sysadmin_user)

# Httpretty crashes with Solr on Python 2.6,
# skip the tests
Expand Down Expand Up @@ -195,9 +194,12 @@ def test_send_datapusher_creates_task(self):
'user': self.sysadmin_user.name
}

p.toolkit.get_action('datapusher_submit')(context, {
'resource_id': resource.id
})
# datapusher_submit will call a function further down the line that
# relies on url_for so we need a request context
with self.app.flask_app.test_request_context():
p.toolkit.get_action('datapusher_submit')(context, {
'resource_id': resource.id
})

context.pop('task_status', None)

Expand Down
22 changes: 11 additions & 11 deletions ckanext/datapusher/tests/test_interfaces.py
Expand Up @@ -9,13 +9,10 @@
from nose.tools import raises
from pylons import config
import sqlalchemy.orm as orm
import paste.fixture

from ckan.tests import helpers, factories
import ckan.plugins as p
import ckan.model as model
import ckan.tests.legacy as tests
import ckan.config.middleware as middleware

import ckanext.datapusher.interfaces as interfaces
import ckanext.datastore.db as db
Expand All @@ -42,22 +39,22 @@ def after_upload(self, context, resource_dict, package_dict):
self.after_upload_calls += 1


class TestInterace(object):
class TestInterface(object):
sysadmin_user = None
normal_user = None

@classmethod
def setup_class(cls):
wsgiapp = middleware.make_app(config['global_conf'], **config)
cls.app = paste.fixture.TestApp(wsgiapp)
cls.app = helpers._get_test_app()
if not tests.is_datastore_supported():
raise nose.SkipTest("Datastore not supported")
p.load('datastore')
p.load('datapusher')
p.load('test_datapusher_plugin')

resource = factories.Resource(url_type='datastore')
cls.dataset = factories.Dataset(resources=[resource])
with cls.app.flask_app.test_request_context():
resource = factories.Resource(url_type='datastore')
cls.dataset = factories.Dataset(resources=[resource])

cls.sysadmin_user = factories.User(name='testsysadmin', sysadmin=True)
cls.normal_user = factories.User(name='annafan')
Expand Down Expand Up @@ -89,9 +86,12 @@ def test_send_datapusher_creates_task(self):
'user': self.sysadmin_user['name']
}

result = p.toolkit.get_action('datapusher_submit')(context, {
'resource_id': resource['id']
})
# datapusher_submit will call a function further down the line that
# relies on url_for so we need a request context
with self.app.flask_app.test_request_context():
result = p.toolkit.get_action('datapusher_submit')(context, {
'resource_id': resource['id']
})
assert not result

context.pop('task_status', None)
Expand Down
30 changes: 23 additions & 7 deletions ckanext/datastore/tests/test_create.py
Expand Up @@ -6,15 +6,12 @@
from nose.tools import assert_equal, raises

import pylons
from pylons import config
import sqlalchemy.orm as orm
import paste.fixture

import ckan.plugins as p
import ckan.lib.create_test_data as ctd
import ckan.model as model
import ckan.tests.legacy as tests
import ckan.config.middleware as middleware
import ckan.tests.helpers as helpers
import ckan.tests.factories as factories

Expand All @@ -31,13 +28,23 @@
class TestDatastoreCreateNewTests(object):
@classmethod
def setup_class(cls):
cls.app = helpers._get_test_app()
p.load('datastore')

@classmethod
def teardown_class(cls):
p.unload('datastore')
helpers.reset_db()

def setup(self):

self.request_context = self.app.flask_app.test_request_context()
self.request_context.push()

def teardown(self):

self.request_context.pop()

def test_create_creates_index_on_primary_key(self):
package = factories.Dataset()
data = {
Expand Down Expand Up @@ -240,8 +247,7 @@ class TestDatastoreCreate(tests.WsgiAppCase):
@classmethod
def setup_class(cls):

wsgiapp = middleware.make_app(config['global_conf'], **config)
cls.app = paste.fixture.TestApp(wsgiapp)
cls.app = helpers._get_test_app()
if not tests.is_datastore_supported():
raise nose.SkipTest("Datastore not supported")
p.load('datastore')
Expand All @@ -251,14 +257,24 @@ def setup_class(cls):
engine = db._get_engine(
{'connection_url': pylons.config['ckan.datastore.write_url']})
cls.Session = orm.scoped_session(orm.sessionmaker(bind=engine))
set_url_type(
model.Package.get('annakarenina').resources, cls.sysadmin_user)
with cls.app.flask_app.test_request_context():
set_url_type(
model.Package.get('annakarenina').resources, cls.sysadmin_user)

@classmethod
def teardown_class(cls):
rebuild_all_dbs(cls.Session)
p.unload('datastore')

def setup(self):

self.request_context = self.app.flask_app.test_request_context()
self.request_context.push()

def teardown(self):

self.request_context.pop()

def test_create_requires_auth(self):
resource = model.Package.get('annakarenina').resources[0]
data = {
Expand Down
9 changes: 7 additions & 2 deletions ckanext/datastore/tests/test_delete.py
Expand Up @@ -12,6 +12,7 @@
import ckan.model as model
import ckan.tests.legacy as tests

import ckan.tests.helpers as helpers
import ckanext.datastore.db as db
from ckanext.datastore.tests.helpers import rebuild_all_dbs, set_url_type

Expand All @@ -23,6 +24,8 @@ class TestDatastoreDelete(tests.WsgiAppCase):

@classmethod
def setup_class(cls):

cls.app = helpers._get_test_app()
if not tests.is_datastore_supported():
raise nose.SkipTest("Datastore not supported")
p.load('datastore')
Expand All @@ -45,8 +48,10 @@ def setup_class(cls):
engine = db._get_engine(
{'connection_url': pylons.config['ckan.datastore.write_url']})
cls.Session = orm.scoped_session(orm.sessionmaker(bind=engine))
set_url_type(
model.Package.get('annakarenina').resources, cls.sysadmin_user)

with cls.app.flask_app.test_request_context():
set_url_type(
model.Package.get('annakarenina').resources, cls.sysadmin_user)

@classmethod
def teardown_class(cls):
Expand Down
6 changes: 4 additions & 2 deletions ckanext/datastore/tests/test_dump.py
Expand Up @@ -16,15 +16,17 @@
import ckanext.datastore.db as db
import ckanext.datastore.tests.helpers as helpers

import ckan.tests.helpers as test_helpers


class TestDatastoreDump(object):
sysadmin_user = None
normal_user = None

@classmethod
def setup_class(cls):
wsgiapp = middleware.make_app(config['global_conf'], **config)
cls.app = paste.fixture.TestApp(wsgiapp)
test_helpers.reset_db()
cls.app = test_helpers._get_test_app()
if not tests.is_datastore_supported():
raise nose.SkipTest("Datastore not supported")
p.load('datastore')
Expand Down
62 changes: 33 additions & 29 deletions ckanext/datastore/tests/test_upsert.py
Expand Up @@ -14,7 +14,6 @@
import ckan.tests.helpers as helpers
import ckan.tests.factories as factories


import ckanext.datastore.db as db
from ckanext.datastore.tests.helpers import rebuild_all_dbs, set_url_type

Expand Down Expand Up @@ -85,12 +84,16 @@ class TestDatastoreUpsert(tests.WsgiAppCase):
def setup_class(cls):
if not tests.is_datastore_supported():
raise nose.SkipTest("Datastore not supported")

cls.app = helpers._get_test_app()
p.load('datastore')
ctd.CreateTestData.create()
cls.sysadmin_user = model.User.get('testsysadmin')
cls.normal_user = model.User.get('annafan')
set_url_type(
model.Package.get('annakarenina').resources, cls.sysadmin_user)

with cls.app.flask_app.test_request_context():
set_url_type(
model.Package.get('annakarenina').resources, cls.sysadmin_user)
resource = model.Package.get('annakarenina').resources[0]
cls.data = {
'resource_id': resource.id,
Expand Down Expand Up @@ -328,7 +331,6 @@ def test_upsert_works_with_empty_list_in_json_field(self):
data['records'][0]['nested'])



class TestDatastoreInsert(tests.WsgiAppCase):
sysadmin_user = None
normal_user = None
Expand All @@ -337,33 +339,32 @@ class TestDatastoreInsert(tests.WsgiAppCase):
def setup_class(cls):
if not tests.is_datastore_supported():
raise nose.SkipTest("Datastore not supported")

cls.app = helpers._get_test_app()
p.load('datastore')
ctd.CreateTestData.create()
cls.sysadmin_user = model.User.get('testsysadmin')
cls.normal_user = model.User.get('annafan')
set_url_type(
model.Package.get('annakarenina').resources, cls.sysadmin_user)
resource = model.Package.get('annakarenina').resources[0]
cls.data = {
'resource_id': resource.id,
'fields': [{'id': u'b\xfck', 'type': 'text'},
{'id': 'author', 'type': 'text'},
{'id': 'nested', 'type': 'json'},
{'id': 'characters', 'type': 'text[]'},
{'id': 'published'}],
'primary_key': u'b\xfck',
'records': [{u'b\xfck': 'annakarenina', 'author': 'tolstoy',
'published': '2005-03-01', 'nested': ['b', {'moo': 'moo'}]},
{u'b\xfck': 'warandpeace', 'author': 'tolstoy',
'nested': {'a':'b'}}
]
}
postparams = '%s=1' % json.dumps(cls.data)
auth = {'Authorization': str(cls.sysadmin_user.apikey)}
res = cls.app.post('/api/action/datastore_create', params=postparams,
extra_environ=auth)
res_dict = json.loads(res.body)
assert res_dict['success'] is True
with cls.app.flask_app.test_request_context():
set_url_type(
model.Package.get('annakarenina').resources, cls.sysadmin_user)
resource = model.Package.get('annakarenina').resources[0]
cls.data = {
'resource_id': resource.id,
'fields': [{'id': u'b\xfck', 'type': 'text'},
{'id': 'author', 'type': 'text'},
{'id': 'nested', 'type': 'json'},
{'id': 'characters', 'type': 'text[]'},
{'id': 'published'}],
'primary_key': u'b\xfck',
'records': [{u'b\xfck': 'annakarenina', 'author': 'tolstoy',
'published': '2005-03-01', 'nested': ['b', {'moo': 'moo'}]},
{u'b\xfck': 'warandpeace', 'author': 'tolstoy',
'nested': {'a':'b'}}
]
}

helpers.call_action('datastore_create', **cls.data)

engine = db._get_engine(
{'connection_url': pylons.config['ckan.datastore.write_url']})
Expand Down Expand Up @@ -439,12 +440,15 @@ class TestDatastoreUpdate(tests.WsgiAppCase):
def setup_class(cls):
if not tests.is_datastore_supported():
raise nose.SkipTest("Datastore not supported")

cls.app = helpers._get_test_app()
p.load('datastore')
ctd.CreateTestData.create()
cls.sysadmin_user = model.User.get('testsysadmin')
cls.normal_user = model.User.get('annafan')
set_url_type(
model.Package.get('annakarenina').resources, cls.sysadmin_user)
with cls.app.flask_app.test_request_context():
set_url_type(
model.Package.get('annakarenina').resources, cls.sysadmin_user)
resource = model.Package.get('annakarenina').resources[0]
hhguide = u"hitchhiker's guide to the galaxy"
cls.data = {
Expand Down

0 comments on commit 3298f69

Please sign in to comment.