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/01/14 14:16:40 UTC
[1/4] allura git commit: [#7772] ticket:712 Fix options split at bulk
edit form
Repository: allura
Updated Branches:
refs/heads/ib/7816 4c6700d52 -> 4a5275c79 (forced update)
[#7772] ticket:712 Fix options split at bulk edit form
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/80733fee
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/80733fee
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/80733fee
Branch: refs/heads/ib/7816
Commit: 80733fee35dd809a866717736ecb646296879577
Parents: 184ffd6
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Jan 13 12:19:51 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Jan 13 12:19:51 2015 +0000
----------------------------------------------------------------------
.../tracker_widgets/mass_edit_form.html | 2 +-
.../forgetracker/tests/functional/test_root.py | 23 ++++++++++++++++++++
2 files changed, 24 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/80733fee/ForgeTracker/forgetracker/templates/tracker_widgets/mass_edit_form.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker_widgets/mass_edit_form.html b/ForgeTracker/forgetracker/templates/tracker_widgets/mass_edit_form.html
index bfeaf15..c35278c 100644
--- a/ForgeTracker/forgetracker/templates/tracker_widgets/mass_edit_form.html
+++ b/ForgeTracker/forgetracker/templates/tracker_widgets/mass_edit_form.html
@@ -76,7 +76,7 @@
{% elif field.type == 'select' %}
<select name="{{field.name}}" class="wide">
<option value="" selected="selected">no change</option>
- {% for option in field.options.split() %}
+ {% for option in h.split_select_field_options(h.really_unicode(field.options)) %}
{% if option.startswith('*') %}
<option value="{{option[1:]}}">{{option[1:]}}</option>
{% else %}
http://git-wip-us.apache.org/repos/asf/allura/blob/80733fee/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index 8506d3a..38fd793 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -506,6 +506,29 @@ class TestFunctionalController(TrackerTestController):
assert_equal(ticket1.custom_fields._major, True)
assert_equal(ticket2.custom_fields._major, False)
+ def test_mass_edit_select_options_split(self):
+ params = dict(
+ custom_fields=[
+ dict(name='_type',
+ label='Type',
+ type='select',
+ options='Bug "Feature Request"')],
+ open_status_names='aa bb',
+ closed_status_names='cc',
+ )
+ self.app.post(
+ '/admin/bugs/set_custom_fields',
+ params=variable_encode(params))
+ r = self.app.get('/p/test/bugs/edit/')
+ opts = r.html.find('select', attrs={'name': '_type'})
+ opts = opts.findAll('option')
+ assert_equal(opts[0].get('value'), u'')
+ assert_equal(opts[0].getText(), u'no change')
+ assert_equal(opts[1].get('value'), u'Bug')
+ assert_equal(opts[1].getText(), u'Bug')
+ assert_equal(opts[2].get('value'), u'Feature Request')
+ assert_equal(opts[2].getText(), u'Feature Request')
+
def test_mass_edit_private_field(self):
kw = {'private': True}
self.new_ticket(summary='First', **kw)
[4/4] allura git commit: [#7816] ticket:713 Fix/add tests
Posted by je...@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/ib/7816
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')
[3/4] allura git commit: [#7816] ticket:713 Add status to admin user
search & refactoring
Posted by je...@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/ib/7816
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()}}
[2/4] allura git commit: [#7816] ticket:709 Manage user's pending
status
Posted by je...@apache.org.
[#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/ib/7816
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