You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by je...@apache.org on 2015/12/04 10:30:00 UTC
[3/3] allura git commit: [#8023] ticket:867 add
SiteNotification.user_role,
add check role in ThemeProvider.get_site_notification
[#8023] ticket:867 add SiteNotification.user_role, add check role in ThemeProvider.get_site_notification
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/fde3f60d
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/fde3f60d
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/fde3f60d
Branch: refs/heads/ib/8023
Commit: fde3f60df1536a3ad2d4374f485ec3a6089eb286
Parents: 66a908f
Author: Denis Kotov <de...@gmail.com>
Authored: Wed Dec 2 20:55:01 2015 +0200
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Fri Dec 4 11:28:53 2015 +0200
----------------------------------------------------------------------
Allura/allura/lib/plugin.py | 2 ++
Allura/allura/model/notification.py | 3 ++-
Allura/allura/tests/test_plugin.py | 26 ++++++++++++++++++++++++++
3 files changed, 30 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/fde3f60d/Allura/allura/lib/plugin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index e061323..e2f6e5b 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -1316,6 +1316,8 @@ class ThemeProvider(object):
note = SiteNotification.current()
if note is None:
return None
+ if note.user_role is not None and not c.user.my_projects_by_role_name(note.user_role).first():
+ return None
cookie = request.cookies.get('site-notification', '').split('-')
if len(cookie) == 3 and cookie[0] == str(note._id):
views = asint(cookie[1]) + 1
http://git-wip-us.apache.org/repos/asf/allura/blob/fde3f60d/Allura/allura/model/notification.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/notification.py b/Allura/allura/model/notification.py
index 01482f0..b9381d0 100644
--- a/Allura/allura/model/notification.py
+++ b/Allura/allura/model/notification.py
@@ -713,10 +713,11 @@ class SiteNotification(MappedClass):
active = FieldProperty(bool, if_missing=True)
impressions = FieldProperty(
int, if_missing=lambda: config.get('site_notification.impressions', 0))
+ user_role = FieldProperty(str, if_missing=None)
@classmethod
def current(cls):
note = cls.query.find().sort('_id', -1).limit(1).first()
if note is None or not note.active:
return None
- return note
+ return note
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/allura/blob/fde3f60d/Allura/allura/tests/test_plugin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/test_plugin.py b/Allura/allura/tests/test_plugin.py
index 272ee35..bf05335 100644
--- a/Allura/allura/tests/test_plugin.py
+++ b/Allura/allura/tests/test_plugin.py
@@ -270,6 +270,7 @@ class TestThemeProvider(object):
@patch('pylons.request')
def test_get_site_notification_closed(self, request, response, SiteNotification):
SiteNotification.current.return_value._id = 'deadbeef'
+ SiteNotification.current.return_value.user_role = None
request.cookies = {'site-notification': 'deadbeef-1-true'}
assert_is_none(ThemeProvider().get_site_notification())
assert not response.set_cookie.called
@@ -281,6 +282,7 @@ class TestThemeProvider(object):
note = SiteNotification.current.return_value
note._id = 'deadbeef'
note.impressions = 2
+ note.user_role = None
request.cookies = {'site-notification': 'deadbeef-3-false'}
assert_is_none(ThemeProvider().get_site_notification())
assert not response.set_cookie.called
@@ -292,6 +294,7 @@ class TestThemeProvider(object):
note = SiteNotification.current.return_value
note._id = 'deadbeef'
note.impressions = 2
+ note.user_role = None
request.cookies = {'site-notification': 'deadbeef-1-false'}
assert_is(ThemeProvider().get_site_notification(), note)
response.set_cookie.assert_called_once_with(
@@ -304,6 +307,7 @@ class TestThemeProvider(object):
note = SiteNotification.current.return_value
note._id = 'deadbeef'
note.impressions = 0
+ note.user_role = None
request.cookies = {'site-notification': 'deadbeef-1000-false'}
assert_is(ThemeProvider().get_site_notification(), note)
@@ -314,6 +318,7 @@ class TestThemeProvider(object):
note = SiteNotification.current.return_value
note._id = 'deadbeef'
note.impressions = 1
+ note.user_role = None
request.cookies = {'site-notification': '0ddba11-1000-true'}
assert_is(ThemeProvider().get_site_notification(), note)
response.set_cookie.assert_called_once_with(
@@ -326,6 +331,7 @@ class TestThemeProvider(object):
note = SiteNotification.current.return_value
note._id = 'deadbeef'
note.impressions = 0
+ note.user_role = None
request.cookies = {}
assert_is(ThemeProvider().get_site_notification(), note)
response.set_cookie.assert_called_once_with(
@@ -338,6 +344,7 @@ class TestThemeProvider(object):
note = SiteNotification.current.return_value
note._id = 'deadbeef'
note.impressions = 0
+ note.user_role = None
request.cookies = {'site-notification': 'deadbeef-1000-true-bad'}
assert_is(ThemeProvider().get_site_notification(), note)
response.set_cookie.assert_called_once_with(
@@ -372,6 +379,25 @@ class TestThemeProvider(object):
g.theme_href.return_value)
g.theme_href.assert_called_with('images/testapp_24.png')
+ @patch('pylons.tmpl_context.user')
+ @patch('allura.model.notification.SiteNotification')
+ def test_get_site_notification_with_role(self, SiteNotification, User):
+ note = SiteNotification.current.return_value
+ note.user_role = 'Test'
+ first = User.my_projects_by_role_name.return_value.first
+ first.return_value = True
+ assert_is(ThemeProvider().get_site_notification(), note)
+
+ first.return_value = False
+ assert_is(ThemeProvider().get_site_notification(), None)
+
+ @patch('allura.model.notification.SiteNotification')
+ def test_get_site_notification_without_role(self, SiteNotification):
+ note = SiteNotification.current.return_value
+ note.user_role = None
+ assert_is(ThemeProvider().get_site_notification(), note)
+
+
class TestLocalAuthenticationProvider(object):