From 21959755ba8246dd63760d2f18c3d41f234d9ca2 Mon Sep 17 00:00:00 2001 From: Ian Ward Date: Mon, 4 Apr 2016 15:00:50 -0400 Subject: [PATCH] [#2936] move extra_environ change to decorator --- ckan/tests/helpers.py | 33 +++++++++++++++++++ ckan/tests/lib/test_helpers.py | 59 +++++++++------------------------- 2 files changed, 49 insertions(+), 43 deletions(-) diff --git a/ckan/tests/helpers.py b/ckan/tests/helpers.py index a3ffe96dcc6..58278154d50 100644 --- a/ckan/tests/helpers.py +++ b/ckan/tests/helpers.py @@ -379,3 +379,36 @@ def side_effect(called_action_name): return nose.tools.make_decorator(func)(wrapper) return decorator + + +def set_extra_environ(key, value): + '''Decorator to temporarily changes a single request environemnt value + + Create a new test app and use the a side effect of making a request + to set an extra_environ value. Reset the value to '' after the test. + + Usage:: + + @helpers.extra_environ('SCRIPT_NAME', '/myscript') + def test_ckan_thing_affected_by_script_name(self): + # ... + + :param key: the extra_environ key to be changed, e.g. ``'SCRIPT_NAME'`` + :type key: string + + :param value: the new extra_environ key's value, e.g. ``'/myscript'`` + :type value: string + ''' + def decorator(func): + def wrapper(*args, **kwargs): + app = _get_test_app() + app.get('/', extra_environ={key: value}) + + try: + return_value = func(*args, **kwargs) + finally: + app.get('/', extra_environ={key: ''}) + + return return_value + return nose.tools.make_decorator(func)(wrapper) + return decorator diff --git a/ckan/tests/lib/test_helpers.py b/ckan/tests/lib/test_helpers.py index 3b3baacd2b5..c3225822446 100644 --- a/ckan/tests/lib/test_helpers.py +++ b/ckan/tests/lib/test_helpers.py @@ -2,7 +2,6 @@ import pytz import tzlocal from babel import Locale -from pylons import config import ckan.lib.helpers as h import ckan.exceptions @@ -49,26 +48,13 @@ def test_url_for_static_qualified_with_root_path(self): generated_url = h.url_for_static('/my-asset/file.txt', qualified=True) eq_(generated_url, url) + @helpers.set_extra_environ('SCRIPT_NAME', '/my/custom/path') + @helpers.change_config('ckan.site_url', 'http://example.com') + @helpers.change_config('ckan.root_path', '/my/custom/path/{{LANG}}/foo') def test_url_for_static_with_root_path_and_script_name_env(self): - - @helpers.change_config('ckan.site_url', 'http://example.com') - @helpers.change_config('ckan.root_path', '/my/custom/path/{{LANG}}/foo') - def test(): - url = 'http://example.com/my/custom/path/foo/my-asset/file.txt' - generated_url = h.url_for_static('/my-asset/file.txt', qualified=True) - eq_(generated_url, url) - - app = helpers._get_test_app() - app.get('/', extra_environ={ - 'SCRIPT_NAME': '/my/custom/path' - }) - - try: - test() - finally: - app.get('/', extra_environ={ - 'SCRIPT_NAME': '' - }) + url = 'http://example.com/my/custom/path/foo/my-asset/file.txt' + generated_url = h.url_for_static('/my-asset/file.txt', qualified=True) + eq_(generated_url, url) class TestHelpersUrlForStaticOrExternal(object): @@ -169,30 +155,17 @@ def test_url_for_qualified_with_root_path_and_locale(self): locale='de') eq_(generated_url, url) + @helpers.set_extra_environ('SCRIPT_NAME', '/my/custom/path') + @helpers.change_config('ckan.site_url', 'http://example.com') + @helpers.change_config('ckan.root_path', '/my/custom/path/{{LANG}}/foo') def test_url_for_qualified_with_root_path_locale_and_script_name_env(self): - - @helpers.change_config('ckan.site_url', 'http://example.com') - @helpers.change_config('ckan.root_path', '/my/custom/path/{{LANG}}/foo') - def test(): - url = 'http://example.com/my/custom/path/de/foo/dataset/my_dataset' - generated_url = h.url_for(controller='package', - action='read', - id='my_dataset', - qualified=True, - locale='de') - eq_(generated_url, url) - - app = helpers._get_test_app() - app.get('/', extra_environ={ - 'SCRIPT_NAME': '/my/custom/path' - }) - - try: - test() - finally: - app.get('/', extra_environ={ - 'SCRIPT_NAME': '' - }) + url = 'http://example.com/my/custom/path/de/foo/dataset/my_dataset' + generated_url = h.url_for(controller='package', + action='read', + id='my_dataset', + qualified=True, + locale='de') + eq_(generated_url, url) class TestHelpersRenderMarkdown(object):