##// 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 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 4 <%= hidden_field_tag '_method', request.request_method %>
5 5 <%= hash_to_hidden_fields @sudo_form.original_fields %>
6 6
7 7 <div class="box">
8 8 <p>
9 9 <label for="sudo_password"><%= l :field_password %><span class="required">*</span></label>
10 10 <%= password_field_tag :sudo_password, nil, size: 25 %>
11 11 </p>
12 12 </div>
13 13 <%= submit_tag l(:button_submit) %>
14 14 <% end %>
15 15 <%= javascript_tag "$('#sudo_password').focus();" %>
16 16
17 17
@@ -1,164 +1,164
1 1 require File.expand_path('../../test_helper', __FILE__)
2 2
3 class SudoTest < Redmine::IntegrationTest
4 fixtures :projects, :members, :member_roles, :roles, :users
3 class SudoModeTest < Redmine::IntegrationTest
4 fixtures :projects, :members, :member_roles, :roles, :users, :email_addresses
5 5
6 6 def setup
7 7 Redmine::SudoMode.stubs(:enabled?).returns(true)
8 8 end
9 9
10 10 def test_add_user
11 11 log_user("admin", "admin")
12 12 get "/users/new"
13 13 assert_response :success
14 14 post "/users",
15 15 :user => { :login => "psmith", :firstname => "Paul",
16 16 :lastname => "Smith", :mail => "psmith@somenet.foo",
17 17 :language => "en", :password => "psmith09",
18 18 :password_confirmation => "psmith09" }
19 19 assert_response :success
20 20 assert_nil User.find_by_login("psmith")
21 21
22 22 assert_select 'input[name=?][value=?]', 'user[login]', 'psmith'
23 23 assert_select 'input[name=?][value=?]', 'user[firstname]', 'Paul'
24 24
25 25 post "/users",
26 26 :user => { :login => "psmith", :firstname => "Paul",
27 27 :lastname => "Smith", :mail => "psmith@somenet.foo",
28 28 :language => "en", :password => "psmith09",
29 29 :password_confirmation => "psmith09" },
30 30 :sudo_password => 'admin'
31 31 assert_response 302
32 32
33 33 user = User.find_by_login("psmith")
34 34 assert_kind_of User, user
35 35 end
36 36
37 37 def test_create_member_xhr
38 38 log_user 'admin', 'admin'
39 39 get '/projects/ecookbook/settings/members'
40 40 assert_response :success
41 41
42 42 assert_no_difference 'Member.count' do
43 43 xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}
44 44 end
45 45
46 46 assert_no_difference 'Member.count' do
47 47 xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: ''
48 48 end
49 49
50 50 assert_no_difference 'Member.count' do
51 51 xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'wrong'
52 52 end
53 53
54 54 assert_difference 'Member.count' do
55 55 xhr :post, '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'admin'
56 56 end
57 57 assert User.find(7).member_of?(Project.find(1))
58 58 end
59 59
60 60 def test_create_member
61 61 log_user 'admin', 'admin'
62 62 get '/projects/ecookbook/settings/members'
63 63 assert_response :success
64 64
65 65 assert_no_difference 'Member.count' do
66 66 post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}
67 67 end
68 68
69 69 assert_no_difference 'Member.count' do
70 70 post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: ''
71 71 end
72 72
73 73 assert_no_difference 'Member.count' do
74 74 post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'wrong'
75 75 end
76 76
77 77 assert_difference 'Member.count' do
78 78 post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}, sudo_password: 'admin'
79 79 end
80 80
81 81 assert_redirected_to '/projects/ecookbook/settings/members'
82 82 assert User.find(7).member_of?(Project.find(1))
83 83 end
84 84
85 85 def test_create_role
86 86 log_user 'admin', 'admin'
87 87 get '/roles'
88 88 assert_response :success
89 89
90 90 get '/roles/new'
91 91 assert_response :success
92 92
93 93 post '/roles', role: { }
94 94 assert_response :success
95 95 assert_select 'h2', 'Confirm your password to continue'
96 96 assert_select 'form[action="/roles"]'
97 97 assert assigns(:sudo_form).errors.blank?
98 98
99 99 post '/roles', role: { name: 'new role', issues_visibility: 'all' }
100 100 assert_response :success
101 101 assert_select 'h2', 'Confirm your password to continue'
102 102 assert_select 'form[action="/roles"]'
103 103 assert_match /"new role"/, response.body
104 104 assert assigns(:sudo_form).errors.blank?
105 105
106 106 post '/roles', role: { name: 'new role', issues_visibility: 'all' }, sudo_password: 'wrong'
107 107 assert_response :success
108 108 assert_select 'h2', 'Confirm your password to continue'
109 109 assert_select 'form[action="/roles"]'
110 110 assert_match /"new role"/, response.body
111 111 assert assigns(:sudo_form).errors[:password].present?
112 112
113 113 assert_difference 'Role.count' do
114 114 post '/roles', role: { name: 'new role', issues_visibility: 'all', assignable: '1', permissions: %w(view_calendar) }, sudo_password: 'admin'
115 115 end
116 116 assert_redirected_to '/roles'
117 117 end
118 118
119 119 def test_update_email_address
120 120 log_user 'jsmith', 'jsmith'
121 121 get '/my/account'
122 122 assert_response :success
123 123 post '/my/account', user: { mail: 'newmail@test.com' }
124 124 assert_response :success
125 125 assert_select 'h2', 'Confirm your password to continue'
126 126 assert_select 'form[action="/my/account"]'
127 127 assert_match /"newmail@test\.com"/, response.body
128 128 assert assigns(:sudo_form).errors.blank?
129 129
130 130 # wrong password
131 131 post '/my/account', user: { mail: 'newmail@test.com' }, sudo_password: 'wrong'
132 132 assert_response :success
133 133 assert_select 'h2', 'Confirm your password to continue'
134 134 assert_select 'form[action="/my/account"]'
135 135 assert_match /"newmail@test\.com"/, response.body
136 136 assert assigns(:sudo_form).errors[:password].present?
137 137
138 138 # correct password
139 139 post '/my/account', user: { mail: 'newmail@test.com' }, sudo_password: 'jsmith'
140 140 assert_redirected_to '/my/account'
141 141 assert_equal 'newmail@test.com', User.find_by_login('jsmith').mail
142 142
143 143 # sudo mode should now be active and not require password again
144 144 post '/my/account', user: { mail: 'even.newer.mail@test.com' }
145 145 assert_redirected_to '/my/account'
146 146 assert_equal 'even.newer.mail@test.com', User.find_by_login('jsmith').mail
147 147 end
148 148
149 149 def test_sudo_mode_should_skip_api_requests
150 150 with_settings :rest_api_enabled => '1' do
151 151 assert_difference('User.count') do
152 152 post '/users.json', {
153 153 :user => {
154 154 :login => 'foo', :firstname => 'Firstname', :lastname => 'Lastname',
155 155 :mail => 'foo@example.net', :password => 'secret123',
156 156 :mail_notification => 'only_assigned'}
157 157 },
158 158 credentials('admin')
159 159
160 160 assert_response :created
161 161 end
162 162 end
163 163 end
164 164 end
General Comments 0
You need to be logged in to leave comments. Login now