summaryrefslogtreecommitdiffstats
path: root/test/integration
diff options
context:
space:
mode:
authorGo MAEDA <maeda@farend.jp>2019-06-16 09:34:49 +0000
committerGo MAEDA <maeda@farend.jp>2019-06-16 09:34:49 +0000
commit9cdd8bf039c78017ff80283ef76c2f45783ec987 (patch)
treeea157e585970ed801b7340fd4e8432c9912c6c76 /test/integration
parentd16e36028fa635d736b8fc04b53408aab766d9eb (diff)
downloadredmine-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.rb106
-rw-r--r--test/integration/routing/my_test.rb2
-rw-r--r--test/integration/sudo_mode_test.rb8
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