diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2015-06-19 18:41:10 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2015-06-19 18:41:10 +0000 |
commit | d6f389658b9e83d7a5d74c57fc46a203a5a88591 (patch) | |
tree | 534fd5f3520833e1c1c2bb2105971ce86008b991 /test/integration | |
parent | 3811ff5d95bd848f457c9d29a162ce83f12fe3ac (diff) | |
download | redmine-d6f389658b9e83d7a5d74c57fc46a203a5a88591.tar.gz redmine-d6f389658b9e83d7a5d74c57fc46a203a5a88591.zip |
Require password re-entry for sensitive actions (#19851).
Patch by Jens Krämer.
git-svn-id: http://svn.redmine.org/redmine/trunk@14333 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'test/integration')
-rw-r--r-- | test/integration/admin_test.rb | 17 | ||||
-rw-r--r-- | test/integration/sudo_test.rb | 126 |
2 files changed, 143 insertions, 0 deletions
diff --git a/test/integration/admin_test.rb b/test/integration/admin_test.rb index 402d0ed3a..ef95cc9df 100644 --- a/test/integration/admin_test.rb +++ b/test/integration/admin_test.rb @@ -26,6 +26,14 @@ class AdminTest < Redmine::IntegrationTest :members, :enabled_modules + def setup + Redmine::SudoMode.enable! + end + + def teardown + Redmine::SudoMode.disable! + end + def test_add_user log_user("admin", "admin") get "/users/new" @@ -36,6 +44,15 @@ class AdminTest < Redmine::IntegrationTest :lastname => "Smith", :mail => "psmith@somenet.foo", :language => "en", :password => "psmith09", :password_confirmation => "psmith09" } + assert_response :success + assert_nil User.find_by_login("psmith") + + post "/users", + :user => { :login => "psmith", :firstname => "Paul", + :lastname => "Smith", :mail => "psmith@somenet.foo", + :language => "en", :password => "psmith09", + :password_confirmation => "psmith09" }, + :sudo_password => 'admin' user = User.find_by_login("psmith") assert_kind_of User, user diff --git a/test/integration/sudo_test.rb b/test/integration/sudo_test.rb new file mode 100644 index 000000000..13ccd0b96 --- /dev/null +++ b/test/integration/sudo_test.rb @@ -0,0 +1,126 @@ +require File.expand_path('../../test_helper', __FILE__) + +class SudoTest < Redmine::IntegrationTest + fixtures :projects, :members, :member_roles, :roles, :users + + def setup + Redmine::SudoMode.enable! + end + + def teardown + Redmine::SudoMode.disable! + end + + def test_create_member_xhr + log_user 'admin', 'admin' + get '/projects/ecookbook/settings/members' + assert_response :success + + assert_no_difference 'Member.count' do + xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7} + end + + assert_no_difference 'Member.count' do + xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: '' + end + + assert_no_difference 'Member.count' do + xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'wrong' + end + + assert_difference 'Member.count' do + xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'admin' + end + assert User.find(7).member_of?(Project.find(1)) + end + + def test_create_member + log_user 'admin', 'admin' + get '/projects/ecookbook/settings/members' + assert_response :success + + assert_no_difference 'Member.count' do + post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7} + end + + assert_no_difference 'Member.count' do + post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: '' + end + + assert_no_difference 'Member.count' do + post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'wrong' + end + + assert_difference 'Member.count' do + post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'admin' + end + + assert_redirected_to '/projects/ecookbook/settings/members' + assert User.find(7).member_of?(Project.find(1)) + end + + def test_create_role + log_user 'admin', 'admin' + get '/roles' + assert_response :success + + get '/roles/new' + assert_response :success + + post '/roles', role: { } + assert_response :success + assert_select 'h2', 'Confirm your password to continue' + assert_select 'form[action="/roles"]' + assert assigns(:sudo_form).errors.blank? + + post '/roles', role: { name: 'new role', issues_visibility: 'all' } + assert_response :success + assert_select 'h2', 'Confirm your password to continue' + assert_select 'form[action="/roles"]' + assert_match /"new role"/, response.body + assert assigns(:sudo_form).errors.blank? + + post '/roles', role: { name: 'new role', issues_visibility: 'all' }, sudo_password: 'wrong' + assert_response :success + assert_select 'h2', 'Confirm your password to continue' + assert_select 'form[action="/roles"]' + assert_match /"new role"/, response.body + assert assigns(:sudo_form).errors[:password].present? + + assert_difference 'Role.count' do + post '/roles', role: { name: 'new role', issues_visibility: 'all', assignable: '1', permissions: %w(view_calendar) }, sudo_password: 'admin' + end + assert_redirected_to '/roles' + end + + def test_update_email_address + log_user 'jsmith', 'jsmith' + get '/my/account' + assert_response :success + post '/my/account', user: { mail: 'newmail@test.com' } + assert_response :success + assert_select 'h2', 'Confirm your password to continue' + assert_select 'form[action="/my/account"]' + assert_match /"newmail@test\.com"/, response.body + assert assigns(:sudo_form).errors.blank? + + # wrong password + post '/my/account', user: { mail: 'newmail@test.com' }, sudo_password: 'wrong' + assert_response :success + assert_select 'h2', 'Confirm your password to continue' + assert_select 'form[action="/my/account"]' + assert_match /"newmail@test\.com"/, response.body + assert assigns(:sudo_form).errors[:password].present? + + # correct password + post '/my/account', user: { mail: 'newmail@test.com' }, sudo_password: 'jsmith' + assert_redirected_to '/my/account' + assert_equal 'newmail@test.com', User.find_by_login('jsmith').mail + + # sudo mode should now be active and not require password again + post '/my/account', user: { mail: 'even.newer.mail@test.com' } + assert_redirected_to '/my/account' + assert_equal 'even.newer.mail@test.com', User.find_by_login('jsmith').mail + end + +end |