From 9768e86dfbf3d26ea59599838cb7358485fc7714 Mon Sep 17 00:00:00 2001 From: Konstantin Sivakov Date: Thu, 12 Oct 2017 11:28:18 +0200 Subject: [PATCH] fix tests for flask --- ckan/tests/controllers/test_feed.py | 124 ++++++++-------------------- 1 file changed, 36 insertions(+), 88 deletions(-) diff --git a/ckan/tests/controllers/test_feed.py b/ckan/tests/controllers/test_feed.py index ba256d446ba..adaf226ccfc 100644 --- a/ckan/tests/controllers/test_feed.py +++ b/ckan/tests/controllers/test_feed.py @@ -1,147 +1,95 @@ # encoding: utf-8 from ckan.lib.helpers import url_for -from webhelpers.feedgenerator import GeoAtom1Feed - -import ckan.plugins as plugins import ckan.tests.helpers as helpers import ckan.tests.factories as factories class TestFeedNew(helpers.FunctionalTestBase): - @classmethod def teardown_class(cls): helpers.reset_db() def test_atom_feed_page_zero_gives_error(self): group = factories.Group() - offset = url_for(controller='feed', action='group', - id=group['name']) + '?page=0' + offset = url_for(u'feeds.group', id=group['name']) + '?page=0' app = self._get_test_app() + offset = url_for(u'feeds.group', id=group['name']) + u'?page=0' + res = app.get(offset, status=400) assert '"page" parameter must be a positive integer' in res, res def test_atom_feed_page_negative_gives_error(self): group = factories.Group() - offset = url_for(controller='feed', action='group', - id=group['name']) + '?page=-2' + offset = url_for(u'feeds.group', id=group['name']) + '?page=-2' app = self._get_test_app() + offset = url_for(u'feeds.group', id=group['name']) + '?page=-2' res = app.get(offset, status=400) assert '"page" parameter must be a positive integer' in res, res def test_atom_feed_page_not_int_gives_error(self): group = factories.Group() - offset = url_for(controller='feed', action='group', - id=group['name']) + '?page=abc' + offset = url_for(u'feeds.group', id=group['name']) + '?page=abc' app = self._get_test_app() + offset = url_for(u'feeds.group', id=group['name']) + '?page=abc' res = app.get(offset, status=400) assert '"page" parameter must be a positive integer' in res, res def test_general_atom_feed_works(self): dataset = factories.Dataset() - offset = url_for(controller='feed', action='general') + offset = url_for(u'feeds.general') app = self._get_test_app() + offset = url_for(u'feeds.general') res = app.get(offset) - assert '{0}'.format(dataset['title']) in res.body + assert u'{0}'.format( + dataset['title']) in res.body def test_group_atom_feed_works(self): group = factories.Group() dataset = factories.Dataset(groups=[{'id': group['id']}]) - offset = url_for(controller='feed', action='group', - id=group['name']) + offset = url_for(u'feeds.group', id=group['name']) app = self._get_test_app() + offset = url_for(u'feeds.group', id=group['name']) res = app.get(offset) - assert '{0}'.format(dataset['title']) in res.body + assert u'{0}'.format( + dataset['title']) in res.body def test_organization_atom_feed_works(self): group = factories.Organization() dataset = factories.Dataset(owner_org=group['id']) - offset = url_for(controller='feed', action='organization', - id=group['name']) + offset = url_for(u'feeds.organization', id=group['name']) app = self._get_test_app() + offset = url_for(u'feeds.organization', id=group['name']) res = app.get(offset) - assert '{0}'.format(dataset['title']) in res.body + assert u'{0}'.format( + dataset['title']) in res.body def test_custom_atom_feed_works(self): dataset1 = factories.Dataset( - title='Test weekly', - extras=[{'key': 'frequency', 'value': 'weekly'}]) + title=u'Test weekly', + extras=[{ + 'key': 'frequency', + 'value': 'weekly' + }]) dataset2 = factories.Dataset( - title='Test daily', - extras=[{'key': 'frequency', 'value': 'daily'}]) - offset = url_for(controller='feed', action='custom') - params = { - 'q': 'frequency:weekly' - } - app = self._get_test_app() - res = app.get(offset, params=params) - - assert '{0}'.format(dataset1['title']) in res.body - - assert '{0}'.format(dataset2['title']) not in res.body - - -class TestFeedInterface(helpers.FunctionalTestBase): - @classmethod - def setup_class(cls): - super(TestFeedInterface, cls).setup_class() - - if not plugins.plugin_loaded('test_feed_plugin'): - plugins.load('test_feed_plugin') - - @classmethod - def teardown_class(cls): - helpers.reset_db() - plugins.unload('test_feed_plugin') + title=u'Test daily', + extras=[{ + 'key': 'frequency', + 'value': 'daily' + }]) - def test_custom_class_used(self): - - app = self._get_test_app() - with app.flask_app.test_request_context(): - offset = url_for(controller='feed', action='general') app = self._get_test_app() - res = app.get(offset) - - assert 'xmlns:georss="http://www.georss.org/georss"' in res.body, res.body - - def test_additional_fields_added(self): - metadata = { - 'ymin': '-2373790', - 'xmin': '2937940', - 'ymax': '-1681290', - 'xmax': '3567770', - } - - extras = [ - {'key': k, 'value': v} for (k, v) in - metadata.items() - ] - - factories.Dataset(extras=extras) - + offset = url_for('feeds.custom') + params = {'q': 'frequency:weekly'} app = self._get_test_app() - with app.flask_app.test_request_context(): - offset = url_for(controller='feed', action='general') - app = self._get_test_app() - res = app.get(offset) - - assert '-2373790.000000 2937940.000000 -1681290.000000 3567770.000000' in res.body, res.body - - -class MockFeedPlugin(plugins.SingletonPlugin): - plugins.implements(plugins.IFeed) - - def get_feed_class(self): - return GeoAtom1Feed + res = app.get(offset, params=params) - def get_item_additional_fields(self, dataset_dict): - extras = {e['key']: e['value'] for e in dataset_dict['extras']} + assert u'{0}'.format( + dataset1['title']) in res.body - box = tuple(float(extras.get(n)) - for n in ('ymin', 'xmin', 'ymax', 'xmax')) - return {'geometry': box} + assert u'{0}'.format( + dataset2['title']) not in res.body