From 1245ff21f24ff424bfde3fef76e47f4ece3e385f Mon Sep 17 00:00:00 2001 From: Vitor Baptista Date: Mon, 16 Jun 2014 18:11:29 -0300 Subject: [PATCH] [#1767] Fix bug with send_email_notifications not working with paster The problem is that our validators notice that .send_email_notifications() didn't call its auth functions and raise an Exception. But it shouldn't call it's auth functions when being called with paster anyway, so it's correct. This fixes that. --- ckan/logic/action/update.py | 1 + ckan/new_tests/logic/action/test_update.py | 28 ++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/ckan/logic/action/update.py b/ckan/logic/action/update.py index 3cbd2abbe8d..bb8cf3faaef 100644 --- a/ckan/logic/action/update.py +++ b/ckan/logic/action/update.py @@ -1063,6 +1063,7 @@ def dashboard_mark_activities_old(context, data_dict): model.repo.commit() +@logic.auth_audit_exempt def send_email_notifications(context, data_dict): '''Send any pending activity stream notification emails to users. diff --git a/ckan/new_tests/logic/action/test_update.py b/ckan/new_tests/logic/action/test_update.py index 035e52f894b..9d344a109d0 100644 --- a/ckan/new_tests/logic/action/test_update.py +++ b/ckan/new_tests/logic/action/test_update.py @@ -3,12 +3,16 @@ import nose.tools import mock +import pylons.config as config import ckan.logic as logic import ckan.new_tests.helpers as helpers import ckan.new_tests.factories as factories +assert_raises = nose.tools.assert_raises + + def datetime_from_string(s): '''Return a standard datetime.datetime object initialised from a string in the same format used for timestamps in dictized activities (the format @@ -385,3 +389,27 @@ def test_resource_reorder(self): assert reordered_resource_urls == ["http://b.html", "http://c.html", "http://a.html"] + + +class TestUpdateSendEmailNotifications(object): + @classmethod + def setup_class(cls): + cls._original_config = dict(config) + config['ckan.activity_streams_email_notifications'] = True + + @classmethod + def teardown_class(cls): + config.clear() + config.update(cls._original_config) + + @mock.patch('ckan.logic.action.update.request') + def test_calling_through_paster_doesnt_validates_auth(self, mock_request): + mock_request.environ.get.return_value = True + helpers.call_action('send_email_notifications') + + @mock.patch('ckan.logic.action.update.request') + def test_not_calling_through_paster_validates_auth(self, mock_request): + mock_request.environ.get.return_value = False + assert_raises(logic.NotAuthorized, helpers.call_action, + 'send_email_notifications', + context={'ignore_auth': False})