##// END OF EJS Templates
Tests that submitted data is present in the sudo form (#19851)....
Jean-Philippe Lang -
r13962:4229fafc8f1e
parent child
Show More
@@ -1,161 +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 SudoTest < Redmine::IntegrationTest
4 fixtures :projects, :members, :member_roles, :roles, :users
4 fixtures :projects, :members, :member_roles, :roles, :users
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'
23 assert_select 'input[name=?][value=?]', 'user[firstname]', 'Paul'
24
22 post "/users",
25 post "/users",
23 :user => { :login => "psmith", :firstname => "Paul",
26 :user => { :login => "psmith", :firstname => "Paul",
24 :lastname => "Smith", :mail => "psmith@somenet.foo",
27 :lastname => "Smith", :mail => "psmith@somenet.foo",
25 :language => "en", :password => "psmith09",
28 :language => "en", :password => "psmith09",
26 :password_confirmation => "psmith09" },
29 :password_confirmation => "psmith09" },
27 :sudo_password => 'admin'
30 :sudo_password => 'admin'
28 assert_response 302
31 assert_response 302
29
32
30 user = User.find_by_login("psmith")
33 user = User.find_by_login("psmith")
31 assert_kind_of User, user
34 assert_kind_of User, user
32 end
35 end
33
36
34 def test_create_member_xhr
37 def test_create_member_xhr
35 log_user 'admin', 'admin'
38 log_user 'admin', 'admin'
36 get '/projects/ecookbook/settings/members'
39 get '/projects/ecookbook/settings/members'
37 assert_response :success
40 assert_response :success
38
41
39 assert_no_difference 'Member.count' do
42 assert_no_difference 'Member.count' do
40 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}
41 end
44 end
42
45
43 assert_no_difference 'Member.count' do
46 assert_no_difference 'Member.count' do
44 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: ''
45 end
48 end
46
49
47 assert_no_difference 'Member.count' do
50 assert_no_difference 'Member.count' do
48 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'
49 end
52 end
50
53
51 assert_difference 'Member.count' do
54 assert_difference 'Member.count' do
52 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'
53 end
56 end
54 assert User.find(7).member_of?(Project.find(1))
57 assert User.find(7).member_of?(Project.find(1))
55 end
58 end
56
59
57 def test_create_member
60 def test_create_member
58 log_user 'admin', 'admin'
61 log_user 'admin', 'admin'
59 get '/projects/ecookbook/settings/members'
62 get '/projects/ecookbook/settings/members'
60 assert_response :success
63 assert_response :success
61
64
62 assert_no_difference 'Member.count' do
65 assert_no_difference 'Member.count' do
63 post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}
66 post '/projects/ecookbook/memberships', membership: {role_ids: [1], user_id: 7}
64 end
67 end
65
68
66 assert_no_difference 'Member.count' do
69 assert_no_difference 'Member.count' do
67 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: ''
68 end
71 end
69
72
70 assert_no_difference 'Member.count' do
73 assert_no_difference 'Member.count' do
71 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'
72 end
75 end
73
76
74 assert_difference 'Member.count' do
77 assert_difference 'Member.count' do
75 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'
76 end
79 end
77
80
78 assert_redirected_to '/projects/ecookbook/settings/members'
81 assert_redirected_to '/projects/ecookbook/settings/members'
79 assert User.find(7).member_of?(Project.find(1))
82 assert User.find(7).member_of?(Project.find(1))
80 end
83 end
81
84
82 def test_create_role
85 def test_create_role
83 log_user 'admin', 'admin'
86 log_user 'admin', 'admin'
84 get '/roles'
87 get '/roles'
85 assert_response :success
88 assert_response :success
86
89
87 get '/roles/new'
90 get '/roles/new'
88 assert_response :success
91 assert_response :success
89
92
90 post '/roles', role: { }
93 post '/roles', role: { }
91 assert_response :success
94 assert_response :success
92 assert_select 'h2', 'Confirm your password to continue'
95 assert_select 'h2', 'Confirm your password to continue'
93 assert_select 'form[action="/roles"]'
96 assert_select 'form[action="/roles"]'
94 assert assigns(:sudo_form).errors.blank?
97 assert assigns(:sudo_form).errors.blank?
95
98
96 post '/roles', role: { name: 'new role', issues_visibility: 'all' }
99 post '/roles', role: { name: 'new role', issues_visibility: 'all' }
97 assert_response :success
100 assert_response :success
98 assert_select 'h2', 'Confirm your password to continue'
101 assert_select 'h2', 'Confirm your password to continue'
99 assert_select 'form[action="/roles"]'
102 assert_select 'form[action="/roles"]'
100 assert_match /"new role"/, response.body
103 assert_match /"new role"/, response.body
101 assert assigns(:sudo_form).errors.blank?
104 assert assigns(:sudo_form).errors.blank?
102
105
103 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'
104 assert_response :success
107 assert_response :success
105 assert_select 'h2', 'Confirm your password to continue'
108 assert_select 'h2', 'Confirm your password to continue'
106 assert_select 'form[action="/roles"]'
109 assert_select 'form[action="/roles"]'
107 assert_match /"new role"/, response.body
110 assert_match /"new role"/, response.body
108 assert assigns(:sudo_form).errors[:password].present?
111 assert assigns(:sudo_form).errors[:password].present?
109
112
110 assert_difference 'Role.count' do
113 assert_difference 'Role.count' do
111 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'
112 end
115 end
113 assert_redirected_to '/roles'
116 assert_redirected_to '/roles'
114 end
117 end
115
118
116 def test_update_email_address
119 def test_update_email_address
117 log_user 'jsmith', 'jsmith'
120 log_user 'jsmith', 'jsmith'
118 get '/my/account'
121 get '/my/account'
119 assert_response :success
122 assert_response :success
120 post '/my/account', user: { mail: 'newmail@test.com' }
123 post '/my/account', user: { mail: 'newmail@test.com' }
121 assert_response :success
124 assert_response :success
122 assert_select 'h2', 'Confirm your password to continue'
125 assert_select 'h2', 'Confirm your password to continue'
123 assert_select 'form[action="/my/account"]'
126 assert_select 'form[action="/my/account"]'
124 assert_match /"newmail@test\.com"/, response.body
127 assert_match /"newmail@test\.com"/, response.body
125 assert assigns(:sudo_form).errors.blank?
128 assert assigns(:sudo_form).errors.blank?
126
129
127 # wrong password
130 # wrong password
128 post '/my/account', user: { mail: 'newmail@test.com' }, sudo_password: 'wrong'
131 post '/my/account', user: { mail: 'newmail@test.com' }, sudo_password: 'wrong'
129 assert_response :success
132 assert_response :success
130 assert_select 'h2', 'Confirm your password to continue'
133 assert_select 'h2', 'Confirm your password to continue'
131 assert_select 'form[action="/my/account"]'
134 assert_select 'form[action="/my/account"]'
132 assert_match /"newmail@test\.com"/, response.body
135 assert_match /"newmail@test\.com"/, response.body
133 assert assigns(:sudo_form).errors[:password].present?
136 assert assigns(:sudo_form).errors[:password].present?
134
137
135 # correct password
138 # correct password
136 post '/my/account', user: { mail: 'newmail@test.com' }, sudo_password: 'jsmith'
139 post '/my/account', user: { mail: 'newmail@test.com' }, sudo_password: 'jsmith'
137 assert_redirected_to '/my/account'
140 assert_redirected_to '/my/account'
138 assert_equal 'newmail@test.com', User.find_by_login('jsmith').mail
141 assert_equal 'newmail@test.com', User.find_by_login('jsmith').mail
139
142
140 # sudo mode should now be active and not require password again
143 # sudo mode should now be active and not require password again
141 post '/my/account', user: { mail: 'even.newer.mail@test.com' }
144 post '/my/account', user: { mail: 'even.newer.mail@test.com' }
142 assert_redirected_to '/my/account'
145 assert_redirected_to '/my/account'
143 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
144 end
147 end
145
148
146 def test_sudo_mode_should_skip_api_requests
149 def test_sudo_mode_should_skip_api_requests
147 with_settings :rest_api_enabled => '1' do
150 with_settings :rest_api_enabled => '1' do
148 assert_difference('User.count') do
151 assert_difference('User.count') do
149 post '/users.json', {
152 post '/users.json', {
150 :user => {
153 :user => {
151 :login => 'foo', :firstname => 'Firstname', :lastname => 'Lastname',
154 :login => 'foo', :firstname => 'Firstname', :lastname => 'Lastname',
152 :mail => 'foo@example.net', :password => 'secret123',
155 :mail => 'foo@example.net', :password => 'secret123',
153 :mail_notification => 'only_assigned'}
156 :mail_notification => 'only_assigned'}
154 },
157 },
155 credentials('admin')
158 credentials('admin')
156
159
157 assert_response :created
160 assert_response :created
158 end
161 end
159 end
162 end
160 end
163 end
161 end
164 end
General Comments 0
You need to be logged in to leave comments. Login now