You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2015/01/15 19:29:37 UTC
[1/4] allura git commit: [#7816] ticket:709 Manage user's pending
status
Repository: allura
Updated Branches:
refs/heads/master 80733fee3 -> 32ae5ff6f
[#7816] ticket:709 Manage user's pending status
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/ca260f34
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/ca260f34
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/ca260f34
Branch: refs/heads/master
Commit: ca260f340d956c9106ac5c9e96ff2db31e545205
Parents: 80733fe
Author: Igor Bondarenko <je...@gmail.com>
Authored: Mon Jan 12 15:32:00 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Wed Jan 14 10:52:26 2015 +0000
----------------------------------------------------------------------
Allura/allura/controllers/site_admin.py | 7 +-
Allura/allura/lib/plugin.py | 12 +++
.../templates/site_admin_user_details.html | 5 +-
.../allura/tests/functional/test_site_admin.py | 91 ++++++++++++++++++++
4 files changed, 112 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/ca260f34/Allura/allura/controllers/site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/site_admin.py b/Allura/allura/controllers/site_admin.py
index 5b84267..043678a 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -521,12 +521,17 @@ class AdminUserDetailsController(object):
user = M.User.by_username(username)
if not user or user.is_anonymous():
raise HTTPNotFound()
- if status == 'enable' and user.disabled:
+ if status == 'enable' and (user.disabled or user.pending):
+ AuthenticationProvider.get(request).activate_user(user)
AuthenticationProvider.get(request).enable_user(user)
flash('User enabled')
elif status == 'disable' and not user.disabled:
AuthenticationProvider.get(request).disable_user(user)
flash('User disabled')
+ elif status == 'pending':
+ AuthenticationProvider.get(request).deactivate_user(user)
+ AuthenticationProvider.get(request).enable_user(user)
+ flash('Set user status to pending')
redirect(request.referer)
@expose()
http://git-wip-us.apache.org/repos/asf/allura/blob/ca260f34/Allura/allura/lib/plugin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index e761ef3..5cf1905 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -197,6 +197,10 @@ class AuthenticationProvider(object):
'''Activate user after registration'''
raise NotImplementedError, 'activate_user'
+ def deactivate_user(self, user):
+ '''Deactivate user (== registation not confirmed)'''
+ raise NotImplementedError, 'deactivate_user'
+
def by_username(self, username):
'''
Find a user by username.
@@ -366,6 +370,11 @@ class LocalAuthenticationProvider(AuthenticationProvider):
session(user).flush(user)
h.auditlog_user('Account activated', user=user)
+ def deactivate_user(self, user):
+ user.pending = True
+ session(user).flush(user)
+ h.auditlog_user('Account deactivated', user=user)
+
def validate_password(self, user, password):
return self._validate_password(user, password)
@@ -624,6 +633,9 @@ class LdapAuthenticationProvider(AuthenticationProvider):
def activate_user(self, user):
return LocalAuthenticationProvider(None).activate_user(user)
+ def deactivate_user(self, user):
+ return LocalAuthenticationProvider(None).deactivate_user(user)
+
def get_last_password_updated(self, user):
return LocalAuthenticationProvider(None).get_last_password_updated(user)
http://git-wip-us.apache.org/repos/asf/allura/blob/ca260f34/Allura/allura/templates/site_admin_user_details.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/site_admin_user_details.html b/Allura/allura/templates/site_admin_user_details.html
index 8f18d7e..f5a8d2d 100644
--- a/Allura/allura/templates/site_admin_user_details.html
+++ b/Allura/allura/templates/site_admin_user_details.html
@@ -42,8 +42,9 @@
<div class="grid-6">
<form action='/nf/admin/user/set_status' method="POST">
<div class='grid-6'>
- <label><input type="radio" name="status" value="enable"{% if not user.disabled %} checked="checked"{% endif %}>Enabled</label><br>
- <label><input type="radio" name="status" value="disable"{% if user.disabled %} checked="checked"{% endif %}>Disabled</label>
+ <label><input type="radio" name="status" value="enable"{% if not user.disabled and not user.pending %} checked="checked"{% endif %}>Enabled</label><br>
+ <label><input type="radio" name="status" value="disable"{% if user.disabled %} checked="checked"{% endif %}>Disabled</label><br>
+ <label><input type="radio" name="status" value="pending"{% if user.pending and not user.disabled %} checked="checked"{% endif %}>Pending</label>
</div>
<input type='hidden' name='username' value='{{ user.username }}'>
{{lib.csrf_token()}}
http://git-wip-us.apache.org/repos/asf/allura/blob/ca260f34/Allura/allura/tests/functional/test_site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/functional/test_site_admin.py b/Allura/allura/tests/functional/test_site_admin.py
index 197d058..6c327c7 100644
--- a/Allura/allura/tests/functional/test_site_admin.py
+++ b/Allura/allura/tests/functional/test_site_admin.py
@@ -347,7 +347,9 @@ class TestUserDetails(TestController):
assert_in(u'Comment by test-admin: I was hêre!', r)
def test_disable_user(self):
+ # user was not pending
assert_equal(M.User.by_username('test-user-3').disabled, False)
+ assert_equal(M.User.by_username('test-user-3').pending, False)
r = self.app.get('/nf/admin/user/test-user-3')
form = r.forms[0]
assert_equal(form['username'].value, 'test-user-3')
@@ -356,12 +358,66 @@ class TestUserDetails(TestController):
r = form.submit()
assert_in(u'User disabled', self.webflash(r))
assert_equal(M.User.by_username('test-user-3').disabled, True)
+ assert_equal(M.User.by_username('test-user-3').pending, False)
+
+ # user was pending
+ user = M.User.by_username('test-user-3')
+ user.disabled = False
+ user.pending = True
+ ThreadLocalORMSession.flush_all()
+ assert_equal(M.User.by_username('test-user-3').disabled, False)
+ assert_equal(M.User.by_username('test-user-3').pending, True)
+ r = self.app.get('/nf/admin/user/test-user-3')
+ form = r.forms[0]
+ assert_equal(form['username'].value, 'test-user-3')
+ assert_equal(form['status'].value, 'pending')
+ form['status'].value = 'disable'
+ r = form.submit()
+ assert_in(u'User disabled', self.webflash(r))
+ assert_equal(M.User.by_username('test-user-3').disabled, True)
+ assert_equal(M.User.by_username('test-user-3').pending, True)
def test_enable_user(self):
+ # user was not pending
+ user = M.User.by_username('test-user-3')
+ user.disabled = True
+ ThreadLocalORMSession.flush_all()
+ assert_equal(M.User.by_username('test-user-3').disabled, True)
+ assert_equal(M.User.by_username('test-user-3').pending, False)
+ r = self.app.get('/nf/admin/user/test-user-3')
+ form = r.forms[0]
+ assert_equal(form['username'].value, 'test-user-3')
+ assert_equal(form['status'].value, 'disable')
+ form['status'].value = 'enable'
+ r = form.submit()
+ assert_in(u'User enabled', self.webflash(r))
+ assert_equal(M.User.by_username('test-user-3').disabled, False)
+ assert_equal(M.User.by_username('test-user-3').pending, False)
+
+ # user was pending
+ user = M.User.by_username('test-user-3')
+ user.disabled = False
+ user.pending = True
+ ThreadLocalORMSession.flush_all()
+ assert_equal(M.User.by_username('test-user-3').disabled, False)
+ assert_equal(M.User.by_username('test-user-3').pending, True)
+ r = self.app.get('/nf/admin/user/test-user-3')
+ form = r.forms[0]
+ assert_equal(form['username'].value, 'test-user-3')
+ assert_equal(form['status'].value, 'pending')
+ form['status'].value = 'enable'
+ r = form.submit()
+ assert_in(u'User enabled', self.webflash(r))
+ assert_equal(M.User.by_username('test-user-3').disabled, False)
+ assert_equal(M.User.by_username('test-user-3').pending, False)
+
+ # user was pending and disabled
user = M.User.by_username('test-user-3')
user.disabled = True
+ user.pending = True
ThreadLocalORMSession.flush_all()
assert_equal(M.User.by_username('test-user-3').disabled, True)
+ assert_equal(M.User.by_username('test-user-3').pending, True)
r = self.app.get('/nf/admin/user/test-user-3')
form = r.forms[0]
assert_equal(form['username'].value, 'test-user-3')
@@ -370,6 +426,41 @@ class TestUserDetails(TestController):
r = form.submit()
assert_in(u'User enabled', self.webflash(r))
assert_equal(M.User.by_username('test-user-3').disabled, False)
+ assert_equal(M.User.by_username('test-user-3').pending, False)
+
+ def test_set_pending(self):
+ # user was disabled
+ user = M.User.by_username('test-user-3')
+ user.disabled = True
+ ThreadLocalORMSession.flush_all()
+ assert_equal(M.User.by_username('test-user-3').disabled, True)
+ assert_equal(M.User.by_username('test-user-3').pending, False)
+ r = self.app.get('/nf/admin/user/test-user-3')
+ form = r.forms[0]
+ assert_equal(form['username'].value, 'test-user-3')
+ assert_equal(form['status'].value, 'disable')
+ form['status'].value = 'pending'
+ r = form.submit()
+ assert_in(u'Set user status to pending', self.webflash(r))
+ assert_equal(M.User.by_username('test-user-3').disabled, False)
+ assert_equal(M.User.by_username('test-user-3').pending, True)
+
+ # user was enabled
+ user = M.User.by_username('test-user-3')
+ user.pending = False
+ user.disabled = False
+ ThreadLocalORMSession.flush_all()
+ assert_equal(M.User.by_username('test-user-3').disabled, False)
+ assert_equal(M.User.by_username('test-user-3').pending, False)
+ r = self.app.get('/nf/admin/user/test-user-3')
+ form = r.forms[0]
+ assert_equal(form['username'].value, 'test-user-3')
+ assert_equal(form['status'].value, 'enable')
+ form['status'].value = 'pending'
+ r = form.submit()
+ assert_in(u'Set user status to pending', self.webflash(r))
+ assert_equal(M.User.by_username('test-user-3').disabled, False)
+ assert_equal(M.User.by_username('test-user-3').pending, True)
def test_emails(self):
# add test@example.com
[2/4] allura git commit: [#7816] ticket:713 Add status to admin user
search & refactoring
Posted by br...@apache.org.
[#7816] ticket:713 Add status to admin user search & refactoring
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/24ddf594
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/24ddf594
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/24ddf594
Branch: refs/heads/master
Commit: 24ddf594ada7323dc84483a6ff5aa3eee8124438
Parents: ca260f3
Author: Igor Bondarenko <je...@gmail.com>
Authored: Wed Jan 14 11:25:39 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Wed Jan 14 11:25:39 2015 +0000
----------------------------------------------------------------------
Allura/allura/controllers/site_admin.py | 2 ++
Allura/allura/lib/helpers.py | 21 ++++++++++++++++++++
.../site_admin_search_users_results.html | 4 ++--
.../templates/site_admin_user_details.html | 6 +++---
4 files changed, 28 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/24ddf594/Allura/allura/controllers/site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/site_admin.py b/Allura/allura/controllers/site_admin.py
index 043678a..d284113 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -325,6 +325,7 @@ class SiteAdminController(object):
fields = [('username', 'username'), ('display_name', 'display name')]
add_fields = aslist(tg.config.get('search.user.additional_search_fields'), ',')
r = self._search(M.User, fields, add_fields, q, f, page, limit, **kw)
+ r['objects'] = [dict(u, status=h.get_user_status(u)) for u in r['objects']]
r['search_results_template'] = 'allura:templates/site_admin_search_users_results.html'
r['additional_display_fields'] = \
aslist(tg.config.get('search.user.additional_display_fields'), ',')
@@ -471,6 +472,7 @@ class AdminUserDetailsController(object):
audit_log = self._audit_log(user, limit, page)
info = {
'user': user,
+ 'status': h.get_user_status(user),
'projects': projects,
'audit_log': audit_log,
}
http://git-wip-us.apache.org/repos/asf/allura/blob/24ddf594/Allura/allura/lib/helpers.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/helpers.py b/Allura/allura/lib/helpers.py
index 3b6a1d5..ad238e3 100644
--- a/Allura/allura/lib/helpers.py
+++ b/Allura/allura/lib/helpers.py
@@ -1209,3 +1209,24 @@ def auditlog_user(message, *args, **kwargs):
message = 'Done by user: {}\n'.format(c.user.username) + message
return M.AuditLog.log_user(message, *args, **kwargs)
+
+def get_user_status(user):
+ '''
+ Get user status based on disabled and pending attrs
+
+ :param user: a dict or :class:`allura.model.auth.User`
+ '''
+ from allura import model as M
+ if isinstance(user, M.User):
+ disabled = user.disabled
+ pending = user.pending
+ else:
+ disabled = user['disabled']
+ pending = user['pending']
+
+ if not disabled and not pending:
+ return 'enabled'
+ elif disabled:
+ return 'disabled'
+ elif pending:
+ return 'pending'
http://git-wip-us.apache.org/repos/asf/allura/blob/24ddf594/Allura/allura/templates/site_admin_search_users_results.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/site_admin_search_users_results.html b/Allura/allura/templates/site_admin_search_users_results.html
index c718b02..bbb0693 100644
--- a/Allura/allura/templates/site_admin_search_users_results.html
+++ b/Allura/allura/templates/site_admin_search_users_results.html
@@ -21,7 +21,7 @@
<th>Display name</th>
<th>Email</th>
<th>Registered</th>
- <th>Disabled?</th>
+ <th>Status</th>
{% for field in additional_display_fields %}
<th>{{ field }}</th>
{% endfor %}
@@ -34,7 +34,7 @@
<td>{{ u['display_name'] }}</td>
<td>{{ u['object'].get_pref('email_address') }}</td>
<td>{{ h.ago(provider.user_registration_date(u['object']).replace(tzinfo=None)) }}</td>
- <td>{{ u['disabled'] }}</td>
+ <td>{{ u['status'] }}</td>
{% for field in additional_display_fields %}
<td>{{ u[field] }}</td>
{% endfor %}
http://git-wip-us.apache.org/repos/asf/allura/blob/24ddf594/Allura/allura/templates/site_admin_user_details.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/site_admin_user_details.html b/Allura/allura/templates/site_admin_user_details.html
index f5a8d2d..1288ecb 100644
--- a/Allura/allura/templates/site_admin_user_details.html
+++ b/Allura/allura/templates/site_admin_user_details.html
@@ -42,9 +42,9 @@
<div class="grid-6">
<form action='/nf/admin/user/set_status' method="POST">
<div class='grid-6'>
- <label><input type="radio" name="status" value="enable"{% if not user.disabled and not user.pending %} checked="checked"{% endif %}>Enabled</label><br>
- <label><input type="radio" name="status" value="disable"{% if user.disabled %} checked="checked"{% endif %}>Disabled</label><br>
- <label><input type="radio" name="status" value="pending"{% if user.pending and not user.disabled %} checked="checked"{% endif %}>Pending</label>
+ <label><input type="radio" name="status" value="enable"{% if status == 'enabled' %} checked="checked"{% endif %}>Enabled</label><br>
+ <label><input type="radio" name="status" value="disable"{% if status == 'disabled' %} checked="checked"{% endif %}>Disabled</label><br>
+ <label><input type="radio" name="status" value="pending"{% if status == 'pending' %} checked="checked"{% endif %}>Pending</label>
</div>
<input type='hidden' name='username' value='{{ user.username }}'>
{{lib.csrf_token()}}
[4/4] allura git commit: [#7816] use User object for status checks
(solr record could be old one before pending status introduced)
Posted by br...@apache.org.
[#7816] use User object for status checks (solr record could be old one before pending status introduced)
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/32ae5ff6
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/32ae5ff6
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/32ae5ff6
Branch: refs/heads/master
Commit: 32ae5ff6f1d9462ab5f8152f3feb914ff6fd7037
Parents: 4a5275c
Author: Dave Brondsema <db...@slashdotmedia.com>
Authored: Wed Jan 14 17:02:52 2015 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Wed Jan 14 17:02:52 2015 +0000
----------------------------------------------------------------------
Allura/allura/controllers/site_admin.py | 2 +-
Allura/allura/lib/helpers.py | 11 +++--------
Allura/allura/tests/test_helpers.py | 12 +++++-------
3 files changed, 9 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/32ae5ff6/Allura/allura/controllers/site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/site_admin.py b/Allura/allura/controllers/site_admin.py
index d284113..f150370 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -325,7 +325,7 @@ class SiteAdminController(object):
fields = [('username', 'username'), ('display_name', 'display name')]
add_fields = aslist(tg.config.get('search.user.additional_search_fields'), ',')
r = self._search(M.User, fields, add_fields, q, f, page, limit, **kw)
- r['objects'] = [dict(u, status=h.get_user_status(u)) for u in r['objects']]
+ r['objects'] = [dict(u, status=h.get_user_status(u['object'])) for u in r['objects']]
r['search_results_template'] = 'allura:templates/site_admin_search_users_results.html'
r['additional_display_fields'] = \
aslist(tg.config.get('search.user.additional_display_fields'), ',')
http://git-wip-us.apache.org/repos/asf/allura/blob/32ae5ff6/Allura/allura/lib/helpers.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/helpers.py b/Allura/allura/lib/helpers.py
index ad238e3..3cd14fb 100644
--- a/Allura/allura/lib/helpers.py
+++ b/Allura/allura/lib/helpers.py
@@ -1214,15 +1214,10 @@ def get_user_status(user):
'''
Get user status based on disabled and pending attrs
- :param user: a dict or :class:`allura.model.auth.User`
+ :param user: a :class:`allura.model.auth.User`
'''
- from allura import model as M
- if isinstance(user, M.User):
- disabled = user.disabled
- pending = user.pending
- else:
- disabled = user['disabled']
- pending = user['pending']
+ disabled = user.disabled
+ pending = user.pending
if not disabled and not pending:
return 'enabled'
http://git-wip-us.apache.org/repos/asf/allura/blob/32ae5ff6/Allura/allura/tests/test_helpers.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/test_helpers.py b/Allura/allura/tests/test_helpers.py
index 780f21c..49032eb 100644
--- a/Allura/allura/tests/test_helpers.py
+++ b/Allura/allura/tests/test_helpers.py
@@ -551,16 +551,14 @@ class TestIterEntryPoints(TestCase):
list, h.iter_entry_points('allura'))
def test_get_user_status():
- user = {'pending': False, 'disabled': False}
+ user = M.User.by_username('test-admin')
assert_equals(h.get_user_status(user), 'enabled')
- user = {'pending': True, 'disabled': True}
- assert_equals(h.get_user_status(user), 'disabled')
- user = {'pending': False, 'disabled': True}
+ user = Mock(disabled=True, pending=False)
assert_equals(h.get_user_status(user), 'disabled')
- user = {'pending': True, 'disabled': False}
+ user = Mock(disabled=False, pending=True)
assert_equals(h.get_user_status(user), 'pending')
- user = M.User.by_username('test-admin')
- assert_equals(h.get_user_status(user), 'enabled')
+ user = Mock(disabled=True, pending=True) # not an expected combination
+ assert_equals(h.get_user_status(user), 'disabled')
[3/4] allura git commit: [#7816] ticket:713 Fix/add tests
Posted by br...@apache.org.
[#7816] ticket:713 Fix/add tests
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/4a5275c7
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/4a5275c7
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/4a5275c7
Branch: refs/heads/master
Commit: 4a5275c7957212f94d25715a7a50dbb4141f8ba0
Parents: 24ddf59
Author: Igor Bondarenko <je...@gmail.com>
Authored: Wed Jan 14 11:46:25 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Wed Jan 14 11:46:25 2015 +0000
----------------------------------------------------------------------
Allura/allura/tests/functional/test_site_admin.py | 5 +++--
Allura/allura/tests/test_helpers.py | 15 +++++++++++++++
2 files changed, 18 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/4a5275c7/Allura/allura/tests/functional/test_site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/functional/test_site_admin.py b/Allura/allura/tests/functional/test_site_admin.py
index 6c327c7..be89354 100644
--- a/Allura/allura/tests/functional/test_site_admin.py
+++ b/Allura/allura/tests/functional/test_site_admin.py
@@ -229,6 +229,7 @@ class TestUsersSearch(TestController):
TEST_HIT = MagicMock(hits=1, docs=[{
'_version_': 1478773871277506560,
'disabled_b': False,
+ 'pending_b': False,
'display_name_t': 'Darth Vader',
'id': 'allura/model/auth/User#540efdf2100d2b1483155d39',
'last_access_login_date_dt': '2014-09-09T13:17:40.176Z',
@@ -263,7 +264,7 @@ class TestUsersSearch(TestController):
assert_equal(options, ['username', 'display_name', '__custom__'])
ths = [th.text for th in r.html.findAll('th')]
assert_equal(ths, ['Username', 'Display name', 'Email', 'Registered',
- 'Disabled?', 'Details'])
+ 'Status', 'Details'])
@patch('allura.controllers.site_admin.search')
def test_additional_fields(self, search):
@@ -275,7 +276,7 @@ class TestUsersSearch(TestController):
assert_equal(options, ['username', 'display_name', 'email_addresses', 'url', '__custom__'])
ths = [th.text for th in r.html.findAll('th')]
assert_equal(ths, ['Username', 'Display name', 'Email', 'Registered',
- 'Disabled?', 'url', 'Details'])
+ 'Status', 'url', 'Details'])
class TestUserDetails(TestController):
http://git-wip-us.apache.org/repos/asf/allura/blob/4a5275c7/Allura/allura/tests/test_helpers.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/test_helpers.py b/Allura/allura/tests/test_helpers.py
index 4cced7e..780f21c 100644
--- a/Allura/allura/tests/test_helpers.py
+++ b/Allura/allura/tests/test_helpers.py
@@ -549,3 +549,18 @@ class TestIterEntryPoints(TestCase):
'Ambiguous \[allura\] entry points detected. '
'Multiple entry points with name "myapp".',
list, h.iter_entry_points('allura'))
+
+def test_get_user_status():
+ user = {'pending': False, 'disabled': False}
+ assert_equals(h.get_user_status(user), 'enabled')
+
+ user = {'pending': True, 'disabled': True}
+ assert_equals(h.get_user_status(user), 'disabled')
+ user = {'pending': False, 'disabled': True}
+ assert_equals(h.get_user_status(user), 'disabled')
+
+ user = {'pending': True, 'disabled': False}
+ assert_equals(h.get_user_status(user), 'pending')
+
+ user = M.User.by_username('test-admin')
+ assert_equals(h.get_user_status(user), 'enabled')