Skip to content

Commit

Permalink
fix tests for flask
Browse files Browse the repository at this point in the history
  • Loading branch information
tino097 committed Oct 12, 2017
1 parent 0407740 commit 9768e86
Showing 1 changed file with 36 additions and 88 deletions.
124 changes: 36 additions & 88 deletions 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 '<title>{0}</title>'.format(dataset['title']) in res.body
assert u'<title type="text">{0}</title>'.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 '<title>{0}</title>'.format(dataset['title']) in res.body
assert u'<title type="text">{0}</title>'.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 '<title>{0}</title>'.format(dataset['title']) in res.body
assert u'<title type="text">{0}</title>'.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 '<title>{0}</title>'.format(dataset1['title']) in res.body

assert '<title>{0}</title>'.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 '<georss:box>-2373790.000000 2937940.000000 -1681290.000000 3567770.000000</georss:box>' 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'<title type="text">{0}</title>'.format(
dataset1['title']) in res.body

box = tuple(float(extras.get(n))
for n in ('ymin', 'xmin', 'ymax', 'xmax'))
return {'geometry': box}
assert u'<title type="text">{0}</title>'.format(
dataset2['title']) not in res.body

0 comments on commit 9768e86

Please sign in to comment.