diff options
author | Go MAEDA <maeda@farend.jp> | 2019-06-16 09:34:49 +0000 |
---|---|---|
committer | Go MAEDA <maeda@farend.jp> | 2019-06-16 09:34:49 +0000 |
commit | 9cdd8bf039c78017ff80283ef76c2f45783ec987 (patch) | |
tree | ea157e585970ed801b7340fd4e8432c9912c6c76 /test/integration | |
parent | d16e36028fa635d736b8fc04b53408aab766d9eb (diff) | |
download | redmine-9cdd8bf039c78017ff80283ef76c2f45783ec987.tar.gz redmine-9cdd8bf039c78017ff80283ef76c2f45783ec987.zip |
Enables API access to /my/account for updating user account data (#31399).
Patch by Jens Krämer.
git-svn-id: http://svn.redmine.org/redmine/trunk@18257 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'test/integration')
-rw-r--r-- | test/integration/api_test/my_test.rb | 106 | ||||
-rw-r--r-- | test/integration/routing/my_test.rb | 2 | ||||
-rw-r--r-- | test/integration/sudo_mode_test.rb | 8 |
3 files changed, 111 insertions, 5 deletions
diff --git a/test/integration/api_test/my_test.rb b/test/integration/api_test/my_test.rb new file mode 100644 index 000000000..92a54f3ea --- /dev/null +++ b/test/integration/api_test/my_test.rb @@ -0,0 +1,106 @@ +# frozen_string_literal: true + +# Redmine - project management software +# Copyright (C) 2006-2017 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +require File.expand_path('../../../test_helper', __FILE__) + +class Redmine::ApiTest::MyTest < Redmine::ApiTest::Base + fixtures :users, :email_addresses, :members, :member_roles, :roles, :projects + + test "GET /my/account.json should return user" do + assert Setting.rest_api_enabled? + get '/my/account.json', :headers => credentials('dlopper', 'foo') + + assert_response :success + assert_equal 'application/json', response.content_type + json = ActiveSupport::JSON.decode(response.body) + assert json.key?('user') + assert_equal 'dlopper', json['user']['login'] + end + + test "PUT /my/account.xml with valid parameters should update the user" do + put '/my/account.xml', + :params => { + :user => { + :firstname => 'Dave', :lastname => 'Renamed', + :mail => 'dave@somenet.foo' + } + }, + :headers => credentials('dlopper', 'foo') + assert_response :no_content + assert_equal '', @response.body + + assert user = User.find_by_lastname('Renamed') + assert_equal 'Dave', user.firstname + assert_equal 'Renamed', user.lastname + assert_equal 'dave@somenet.foo', user.mail + refute user.admin? + end + + test "PUT /my/account.json with valid parameters should update the user" do + put '/my/account.xml', + :params => { + :user => { + :firstname => 'Dave', :lastname => 'Renamed', + :mail => 'dave@somenet.foo' + } + }, + :headers => credentials('dlopper', 'foo') + assert_response :no_content + assert_equal '', @response.body + + assert user = User.find_by_lastname('Renamed') + assert_equal 'Dave', user.firstname + assert_equal 'Renamed', user.lastname + assert_equal 'dave@somenet.foo', user.mail + refute user.admin? + + end + + test "PUT /my/account.xml with invalid parameters" do + put '/my/account.xml', + :params => { + :user => { + :login => 'dlopper', :firstname => '', :lastname => 'Lastname' + } + }, + :headers => credentials('dlopper', 'foo') + + assert_response :unprocessable_entity + assert_equal 'application/xml', @response.content_type + assert_select 'errors error', :text => "First name cannot be blank" + end + + test "PUT /my/account.json with invalid parameters" do + put '/my/account.json', + :params => { + :user => { + :login => 'dlopper', :firstname => '', :lastname => 'Lastname' + } + }, + :headers => credentials('dlopper', 'foo') + + assert_response :unprocessable_entity + assert_equal 'application/json', @response.content_type + json = ActiveSupport::JSON.decode(response.body) + assert_kind_of Hash, json + assert json.has_key?('errors') + assert_kind_of Array, json['errors'] + end +end + diff --git a/test/integration/routing/my_test.rb b/test/integration/routing/my_test.rb index ce98f70b5..8b70ae7e4 100644 --- a/test/integration/routing/my_test.rb +++ b/test/integration/routing/my_test.rb @@ -22,7 +22,7 @@ require File.expand_path('../../../test_helper', __FILE__) class RoutingMyTest < Redmine::RoutingTest def test_my should_route 'GET /my/account' => 'my#account' - should_route 'POST /my/account' => 'my#account' + should_route 'PUT /my/account' => 'my#account' should_route 'GET /my/account/destroy' => 'my#destroy' should_route 'POST /my/account/destroy' => 'my#destroy' diff --git a/test/integration/sudo_mode_test.rb b/test/integration/sudo_mode_test.rb index b7d9cb5d7..a2ff7cd09 100644 --- a/test/integration/sudo_mode_test.rb +++ b/test/integration/sudo_mode_test.rb @@ -149,7 +149,7 @@ class SudoModeTest < Redmine::IntegrationTest expire_sudo_mode! get '/my/account' assert_response :success - post '/my/account', :params => {user: { mail: 'newmail@test.com' }} + put '/my/account', :params => {user: { mail: 'newmail@test.com' }} assert_response :success assert_select 'h2', 'Confirm your password to continue' assert_select 'form[action="/my/account"]' @@ -157,7 +157,7 @@ class SudoModeTest < Redmine::IntegrationTest assert_select '#flash_error', 0 # wrong password - post '/my/account', :params => {user: { mail: 'newmail@test.com' }, sudo_password: 'wrong'} + put '/my/account', :params => {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"]' @@ -165,12 +165,12 @@ class SudoModeTest < Redmine::IntegrationTest assert_select '#flash_error' # correct password - post '/my/account', :params => {user: { mail: 'newmail@test.com' }, sudo_password: 'jsmith'} + put '/my/account', :params => {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', :params => {user: { mail: 'even.newer.mail@test.com' }} + put '/my/account', :params => {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 |