##// END OF EJS Templates
Adds a UI test (#19851)....
Jean-Philippe Lang -
r13963:278468c0c8f2
parent child
Show More
@@ -0,0 +1,53
1 # Redmine - project management software
2 # Copyright (C) 2006-2015 Jean-Philippe Lang
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
18 require File.expand_path('../base', __FILE__)
19
20 class Redmine::UiTest::SudoModeTest < Redmine::UiTest::Base
21 fixtures :users, :email_addresses
22
23 def setup
24 Redmine::SudoMode.stubs(:enabled?).returns(true)
25 end
26
27 def test_add_user
28 log_user('admin', 'admin')
29 visit '/users/new'
30
31 assert_difference 'User.count' do
32 within('form#new_user') do
33 fill_in 'Login', :with => 'johnpaul'
34 fill_in 'First name', :with => 'John'
35 fill_in 'Last name', :with => 'Paul'
36 fill_in 'Email', :with => 'john@example.net'
37 fill_in 'Password', :with => 'password'
38 fill_in 'Confirmation', :with => 'password'
39 # click_button 'Create' would match both 'Create' and 'Create and continue' buttons
40 find('input[name=commit]').click
41 end
42
43 assert_equal '/users', current_path
44 assert page.has_content?("Confirm your password to continue")
45 assert page.has_css?('form#sudo-form')
46
47 within('form#sudo-form') do
48 fill_in 'Password', :with => 'admin'
49 click_button 'Submit'
50 end
51 end
52 end
53 end
@@ -1,17 +1,17
1 <h2><%= l :label_password_required %></h2>
1 <h2><%= l :label_password_required %></h2>
2 <%= form_tag({}, class: 'tabular') do %>
2 <%= form_tag({}, class: 'tabular', id: 'sudo-form') do %>
3
3
4 <%= hidden_field_tag '_method', request.request_method %>
4 <%= hidden_field_tag '_method', request.request_method %>
5 <%= hash_to_hidden_fields @sudo_form.original_fields %>
5 <%= hash_to_hidden_fields @sudo_form.original_fields %>
6
6
7 <div class="box">
7 <div class="box">
8 <p>
8 <p>
9 <label for="sudo_password"><%= l :field_password %><span class="required">*</span></label>
9 <label for="sudo_password"><%= l :field_password %><span class="required">*</span></label>
10 <%= password_field_tag :sudo_password, nil, size: 25 %>
10 <%= password_field_tag :sudo_password, nil, size: 25 %>
11 </p>
11 </p>
12 </div>
12 </div>
13 <%= submit_tag l(:button_submit) %>
13 <%= submit_tag l(:button_submit) %>
14 <% end %>
14 <% end %>
15 <%= javascript_tag "$('#sudo_password').focus();" %>
15 <%= javascript_tag "$('#sudo_password').focus();" %>
16
16
17
17
@@ -1,164 +1,164
1 require File.expand_path('../../test_helper', __FILE__)
1 require File.expand_path('../../test_helper', __FILE__)
2
2
3 class SudoTest < Redmine::IntegrationTest
3 class SudoModeTest < Redmine::IntegrationTest
4 fixtures :projects, :members, :member_roles, :roles, :users
4 fixtures :projects, :members, :member_roles, :roles, :users, :email_addresses
5
5
6 def setup
6 def setup
7 Redmine::SudoMode.stubs(:enabled?).returns(true)
7 Redmine::SudoMode.stubs(:enabled?).returns(true)
8 end
8 end
9
9
10 def test_add_user
10 def test_add_user
11 log_user("admin", "admin")
11 log_user("admin", "admin")
12 get "/users/new"
12 get "/users/new"
13 assert_response :success
13 assert_response :success
14 post "/users",
14 post "/users",
15 :user => { :login => "psmith", :firstname => "Paul",
15 :user => { :login => "psmith", :firstname => "Paul",
16 :lastname => "Smith", :mail => "psmith@somenet.foo",
16 :lastname => "Smith", :mail => "psmith@somenet.foo",
17 :language => "en", :password => "psmith09",
17 :language => "en", :password => "psmith09",
18 :password_confirmation => "psmith09" }
18 :password_confirmation => "psmith09" }
19 assert_response :success
19 assert_response :success
20 assert_nil User.find_by_login("psmith")
20 assert_nil User.find_by_login("psmith")
21
21
22 assert_select 'input[name=?][value=?]', 'user[login]', 'psmith'
22 assert_select 'input[name=?][value=?]', 'user[login]', 'psmith'
23 assert_select 'input[name=?][value=?]', 'user[firstname]', 'Paul'
23 assert_select 'input[name=?][value=?]', 'user[firstname]', 'Paul'
24
24
25 post "/users",
25 post "/users",
26 :user => { :login => "psmith", :firstname => "Paul",
26 :user => { :login => "psmith", :firstname => "Paul",
27 :lastname => "Smith", :mail => "psmith@somenet.foo",
27 :lastname => "Smith", :mail => "psmith@somenet.foo",
28 :language => "en", :password => "psmith09",
28 :language => "en", :password => "psmith09",
29 :password_confirmation => "psmith09" },
29 :password_confirmation => "psmith09" },
30 :sudo_password => 'admin'
30 :sudo_password => 'admin'
31 assert_response 302
31 assert_response 302
32
32
33 user = User.find_by_login("psmith")
33 user = User.find_by_login("psmith")
34 assert_kind_of User, user
34 assert_kind_of User, user
35 end
35 end
36
36
37 def test_create_member_xhr
37 def test_create_member_xhr
38 log_user 'admin', 'admin'
38 log_user 'admin', 'admin'
39 get '/projects/ecookbook/settings/members'
39 get '/projects/ecookbook/settings/members'
40 assert_response :success
40 assert_response :success
41
41
42 assert_no_difference 'Member.count' do
42 assert_no_difference 'Member.count' do
43 xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}
43 xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}
44 end
44 end
45
45
46 assert_no_difference 'Member.count' do
46 assert_no_difference 'Member.count' do
47 xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: ''
47 xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: ''
48 end
48 end
49
49
50 assert_no_difference 'Member.count' do
50 assert_no_difference 'Member.count' do
51 xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'wrong'
51 xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'wrong'
52 end
52 end
53
53
54 assert_difference 'Member.count' do
54 assert_difference 'Member.count' do
55 xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'admin'
55 xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'admin'
56 end
56 end
57 assert User.find(7).member_of?(Project.find(1))
57 assert User.find(7).member_of?(Project.find(1))
58 end
58 end
59
59
60 def test_create_member
60 def test_create_member
61 log_user 'admin', 'admin'
61 log_user 'admin', 'admin'
62 get '/projects/ecookbook/settings/members'
62 get '/projects/ecookbook/settings/members'
63 assert_response :success
63 assert_response :success
64
64
65 assert_no_difference 'Member.count' do
65 assert_no_difference 'Member.count' do
66 post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}
66 post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}
67 end
67 end
68
68
69 assert_no_difference 'Member.count' do
69 assert_no_difference 'Member.count' do
70 post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: ''
70 post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: ''
71 end
71 end
72
72
73 assert_no_difference 'Member.count' do
73 assert_no_difference 'Member.count' do
74 post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'wrong'
74 post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'wrong'
75 end
75 end
76
76
77 assert_difference 'Member.count' do
77 assert_difference 'Member.count' do
78 post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'admin'
78 post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'admin'
79 end
79 end
80
80
81 assert_redirected_to '/projects/ecookbook/settings/members'
81 assert_redirected_to '/projects/ecookbook/settings/members'
82 assert User.find(7).member_of?(Project.find(1))
82 assert User.find(7).member_of?(Project.find(1))
83 end
83 end
84
84
85 def test_create_role
85 def test_create_role
86 log_user 'admin', 'admin'
86 log_user 'admin', 'admin'
87 get '/roles'
87 get '/roles'
88 assert_response :success
88 assert_response :success
89
89
90 get '/roles/new'
90 get '/roles/new'
91 assert_response :success
91 assert_response :success
92
92
93 post '/roles', role: { }
93 post '/roles', role: { }
94 assert_response :success
94 assert_response :success
95 assert_select 'h2', 'Confirm your password to continue'
95 assert_select 'h2', 'Confirm your password to continue'
96 assert_select 'form[action="/roles"]'
96 assert_select 'form[action="/roles"]'
97 assert assigns(:sudo_form).errors.blank?
97 assert assigns(:sudo_form).errors.blank?
98
98
99 post '/roles', role: { name: 'new role', issues_visibility: 'all' }
99 post '/roles', role: { name: 'new role', issues_visibility: 'all' }
100 assert_response :success
100 assert_response :success
101 assert_select 'h2', 'Confirm your password to continue'
101 assert_select 'h2', 'Confirm your password to continue'
102 assert_select 'form[action="/roles"]'
102 assert_select 'form[action="/roles"]'
103 assert_match /"new role"/, response.body
103 assert_match /"new role"/, response.body
104 assert assigns(:sudo_form).errors.blank?
104 assert assigns(:sudo_form).errors.blank?
105
105
106 post '/roles', role: { name: 'new role', issues_visibility: 'all' }, sudo_password: 'wrong'
106 post '/roles', role: { name: 'new role', issues_visibility: 'all' }, sudo_password: 'wrong'
107 assert_response :success
107 assert_response :success
108 assert_select 'h2', 'Confirm your password to continue'
108 assert_select 'h2', 'Confirm your password to continue'
109 assert_select 'form[action="/roles"]'
109 assert_select 'form[action="/roles"]'
110 assert_match /"new role"/, response.body
110 assert_match /"new role"/, response.body
111 assert assigns(:sudo_form).errors[:password].present?
111 assert assigns(:sudo_form).errors[:password].present?
112
112
113 assert_difference 'Role.count' do
113 assert_difference 'Role.count' do
114 post '/roles', role: { name: 'new role', issues_visibility: 'all', assignable: '1', permissions: %w(view_calendar) }, sudo_password: 'admin'
114 post '/roles', role: { name: 'new role', issues_visibility: 'all', assignable: '1', permissions: %w(view_calendar) }, sudo_password: 'admin'
115 end
115 end
116 assert_redirected_to '/roles'
116 assert_redirected_to '/roles'
117 end
117 end
118
118
119 def test_update_email_address
119 def test_update_email_address
120 log_user 'jsmith', 'jsmith'
120 log_user 'jsmith', 'jsmith'
121 get '/my/account'
121 get '/my/account'
122 assert_response :success
122 assert_response :success
123 post '/my/account', user: { mail: 'newmail@test.com' }
123 post '/my/account', user: { mail: 'newmail@test.com' }
124 assert_response :success
124 assert_response :success
125 assert_select 'h2', 'Confirm your password to continue'
125 assert_select 'h2', 'Confirm your password to continue'
126 assert_select 'form[action="/my/account"]'
126 assert_select 'form[action="/my/account"]'
127 assert_match /"newmail@test\.com"/, response.body
127 assert_match /"newmail@test\.com"/, response.body
128 assert assigns(:sudo_form).errors.blank?
128 assert assigns(:sudo_form).errors.blank?
129
129
130 # wrong password
130 # wrong password
131 post '/my/account', user: { mail: 'newmail@test.com' }, sudo_password: 'wrong'
131 post '/my/account', user: { mail: 'newmail@test.com' }, sudo_password: 'wrong'
132 assert_response :success
132 assert_response :success
133 assert_select 'h2', 'Confirm your password to continue'
133 assert_select 'h2', 'Confirm your password to continue'
134 assert_select 'form[action="/my/account"]'
134 assert_select 'form[action="/my/account"]'
135 assert_match /"newmail@test\.com"/, response.body
135 assert_match /"newmail@test\.com"/, response.body
136 assert assigns(:sudo_form).errors[:password].present?
136 assert assigns(:sudo_form).errors[:password].present?
137
137
138 # correct password
138 # correct password
139 post '/my/account', user: { mail: 'newmail@test.com' }, sudo_password: 'jsmith'
139 post '/my/account', user: { mail: 'newmail@test.com' }, sudo_password: 'jsmith'
140 assert_redirected_to '/my/account'
140 assert_redirected_to '/my/account'
141 assert_equal 'newmail@test.com', User.find_by_login('jsmith').mail
141 assert_equal 'newmail@test.com', User.find_by_login('jsmith').mail
142
142
143 # sudo mode should now be active and not require password again
143 # sudo mode should now be active and not require password again
144 post '/my/account', user: { mail: 'even.newer.mail@test.com' }
144 post '/my/account', user: { mail: 'even.newer.mail@test.com' }
145 assert_redirected_to '/my/account'
145 assert_redirected_to '/my/account'
146 assert_equal 'even.newer.mail@test.com', User.find_by_login('jsmith').mail
146 assert_equal 'even.newer.mail@test.com', User.find_by_login('jsmith').mail
147 end
147 end
148
148
149 def test_sudo_mode_should_skip_api_requests
149 def test_sudo_mode_should_skip_api_requests
150 with_settings :rest_api_enabled => '1' do
150 with_settings :rest_api_enabled => '1' do
151 assert_difference('User.count') do
151 assert_difference('User.count') do
152 post '/users.json', {
152 post '/users.json', {
153 :user => {
153 :user => {
154 :login => 'foo', :firstname => 'Firstname', :lastname => 'Lastname',
154 :login => 'foo', :firstname => 'Firstname', :lastname => 'Lastname',
155 :mail => 'foo@example.net', :password => 'secret123',
155 :mail => 'foo@example.net', :password => 'secret123',
156 :mail_notification => 'only_assigned'}
156 :mail_notification => 'only_assigned'}
157 },
157 },
158 credentials('admin')
158 credentials('admin')
159
159
160 assert_response :created
160 assert_response :created
161 end
161 end
162 end
162 end
163 end
163 end
164 end
164 end
General Comments 0
You need to be logged in to leave comments. Login now