3 class UsersControllerTest < ActionDispatch::IntegrationTest
5 # test all routes which lead to this controller
8 { :path => "/user/new", :method => :get },
9 { :controller => "users", :action => "new" }
13 { :path => "/user", :method => :post },
14 { :controller => "users", :action => "create" }
18 { :path => "/user/go_public", :method => :post },
19 { :controller => "users", :action => "go_public" }
23 { :path => "/user/suspended", :method => :get },
24 { :controller => "users", :action => "suspended" }
28 { :path => "/user/username", :method => :get },
29 { :controller => "users", :action => "show", :display_name => "username" }
33 # The user creation page loads
36 assert_redirected_to new_user_path(:cookie_test => "true")
38 get new_user_path, :params => { :cookie_test => "true" }
39 assert_response :success
41 assert_no_match(/img-src \* data:;/, @response.headers["Content-Security-Policy-Report-Only"])
43 assert_select "html", :count => 1 do
44 assert_select "head", :count => 1 do
45 assert_select "title", :text => /Sign Up/, :count => 1
47 assert_select "body", :count => 1 do
48 assert_select "div#content", :count => 1 do
49 assert_select "form[action='/user'][method='post']", :count => 1 do
50 assert_select "input[id='user_email']", :count => 1
51 assert_select "input[id='user_display_name']", :count => 1
52 assert_select "input[id='user_pass_crypt'][type='password']", :count => 1
53 assert_select "input[id='user_pass_crypt_confirmation'][type='password']", :count => 1
54 assert_select "input[type='submit'][value='Sign Up']", :count => 1
61 def test_new_logged_in
62 session_for(create(:user))
65 assert_redirected_to root_path
67 get new_user_path, :params => { :referer => "/test" }
68 assert_redirected_to "/test"
71 def test_create_success
72 user = build(:user, :pending)
74 assert_difference "User.count", 1 do
75 assert_difference "ActionMailer::Base.deliveries.size", 1 do
76 perform_enqueued_jobs do
77 post users_path, :params => { :user => user.attributes }
83 register_email = ActionMailer::Base.deliveries.first
85 assert_equal register_email.to[0], user.email
86 assert_match(/#{@url}/, register_email.body.to_s)
89 assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => user.display_name
92 def test_create_duplicate_email
93 user = build(:user, :pending)
94 create(:user, :email => user.email)
96 assert_no_difference "User.count" do
97 assert_no_difference "ActionMailer::Base.deliveries.size" do
98 perform_enqueued_jobs do
99 post users_path, :params => { :user => user.attributes }
104 assert_response :success
105 assert_template "new"
106 assert_select "form > div > input.is-invalid#user_email"
109 def test_create_duplicate_email_uppercase
110 user = build(:user, :pending)
111 create(:user, :email => user.email.upcase)
113 assert_no_difference "User.count" do
114 assert_no_difference "ActionMailer::Base.deliveries.size" do
115 perform_enqueued_jobs do
116 post users_path, :params => { :user => user.attributes }
121 assert_response :success
122 assert_template "new"
123 assert_select "form > div > input.is-invalid#user_email"
126 def test_create_duplicate_name
127 user = build(:user, :pending)
128 create(:user, :display_name => user.display_name)
130 assert_no_difference "User.count" do
131 assert_no_difference "ActionMailer::Base.deliveries.size" do
132 perform_enqueued_jobs do
133 post users_path, :params => { :user => user.attributes }
138 assert_response :success
139 assert_template "new"
140 assert_select "form > div > input.is-invalid#user_display_name"
143 def test_create_duplicate_name_uppercase
144 user = build(:user, :pending)
145 create(:user, :display_name => user.display_name.upcase)
147 assert_no_difference "User.count" do
148 assert_no_difference "ActionMailer::Base.deliveries.size" do
149 perform_enqueued_jobs do
150 post users_path, :params => { :user => user.attributes }
155 assert_response :success
156 assert_template "new"
157 assert_select "form > div > input.is-invalid#user_display_name"
160 def test_create_blocked_domain
161 user = build(:user, :pending, :email => "user@example.net")
163 # Now block that domain
164 create(:acl, :domain => "example.net", :k => "no_account_creation")
166 # Check that the second half of registration fails
167 assert_no_difference "User.count" do
168 assert_no_difference "ActionMailer::Base.deliveries.size" do
169 perform_enqueued_jobs do
170 post users_path, :params => { :user => user.attributes }
175 assert_response :success
176 assert_template "blocked"
179 def test_create_referer_params
180 user = build(:user, :pending)
182 assert_difference "User.count", 1 do
183 assert_difference "ActionMailer::Base.deliveries.size", 1 do
184 post users_path, :params => { :user => user.attributes, :referer => "/edit?editor=id#map=1/2/3" }
185 assert_enqueued_with :job => ActionMailer::MailDeliveryJob,
186 :args => proc { |args| args[3][:args][2] == welcome_path(:editor => "id", :zoom => 1, :lat => 2, :lon => 3) }
187 perform_enqueued_jobs
193 user = create(:user, :data_public => false)
196 post user_go_public_path
198 assert_redirected_to account_path
199 assert User.find(user.id).data_public
202 # Check that the user account page will display and contains some relevant
203 # information for the user
205 # Test a non-existent user
206 get user_path("unknown")
207 assert_response :not_found
213 assert_response :success
214 assert_match(/img-src \* data:;/, @response.headers["Content-Security-Policy-Report-Only"])
215 assert_select "div.content-heading" do
216 assert_select "a[href^='/user/#{ERB::Util.u(user.display_name)}/history']", 1
217 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/traces']", 1
218 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary']", 1
219 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary_comments']", 1
220 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/account']", 0
221 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks']", 0
222 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks_by']", 0
223 assert_select "a[href='/user_blocks/new/#{ERB::Util.u(user.display_name)}']", 0
226 # Test a user who has been blocked
227 blocked_user = create(:user)
228 create(:user_block, :user => blocked_user)
229 get user_path(blocked_user)
230 assert_response :success
231 assert_select "div.content-heading" do
232 assert_select "a[href^='/user/#{ERB::Util.u(blocked_user.display_name)}/history']", 1
233 assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/traces']", 1
234 assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/diary']", 1
235 assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/diary_comments']", 1
236 assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/account']", 0
237 assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/blocks']", 1
238 assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/blocks_by']", 0
239 assert_select "a[href='/user_blocks/new/#{ERB::Util.u(blocked_user.display_name)}']", 0
242 # Test a moderator who has applied blocks
243 moderator_user = create(:moderator_user)
244 create(:user_block, :creator => moderator_user)
245 get user_path(moderator_user)
246 assert_response :success
247 assert_select "div.content-heading" do
248 assert_select "a[href^='/user/#{ERB::Util.u(moderator_user.display_name)}/history']", 1
249 assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/traces']", 1
250 assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/diary']", 1
251 assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/diary_comments']", 1
252 assert_select "a[href='/account']", 0
253 assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/blocks']", 0
254 assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/blocks_by']", 1
255 assert_select "a[href='/user_blocks/new/#{ERB::Util.u(moderator_user.display_name)}']", 0
258 # Login as a normal user
261 # Test the normal user
263 assert_response :success
264 assert_select "div.content-heading" do
265 assert_select "a[href^='/user/#{ERB::Util.u(user.display_name)}/history']", 1
266 assert_select "a[href='/traces/mine']", 1
267 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary']", 1
268 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary_comments']", 1
269 assert_select "a[href='/account']", 1
270 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks']", 0
271 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks_by']", 0
272 assert_select "a[href='/user_blocks/new/#{ERB::Util.u(user.display_name)}']", 0
273 assert_select "a[href='/api/0.6/user/#{ERB::Util.u(user.id)}']", 0
276 # Login as a moderator
277 session_for(create(:moderator_user))
279 # Test the normal user
281 assert_response :success
282 assert_select "div.content-heading" do
283 assert_select "a[href^='/user/#{ERB::Util.u(user.display_name)}/history']", 1
284 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/traces']", 1
285 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary']", 1
286 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary_comments']", 1
287 assert_select "a[href='/account']", 0
288 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks']", 0
289 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks_by']", 0
290 assert_select "a[href='/user_blocks/new/#{ERB::Util.u(user.display_name)}']", 1
291 assert_select "a[href='/api/0.6/user/#{ERB::Util.u(user.id)}']", 1
295 # Test whether information about contributor terms is shown for users who haven't agreed
296 def test_terms_not_agreed
297 agreed_user = create(:user, :terms_agreed => 3.days.ago)
298 seen_user = create(:user, :terms_seen => true, :terms_agreed => nil)
299 not_seen_user = create(:user, :terms_seen => false, :terms_agreed => nil)
301 get user_path(agreed_user)
302 assert_response :success
303 assert_select "div.content-heading" do
304 assert_select "dt", :count => 0, :text => /Contributor terms/
307 get user_path(seen_user)
308 assert_response :success
309 assert_select "div.content-heading" do
310 assert_select "dt", :count => 1, :text => /Contributor terms/
311 assert_select "dd", /Declined/
314 get user_path(not_seen_user)
315 assert_response :success
316 assert_select "div.content-heading" do
317 assert_select "dt", :count => 1, :text => /Contributor terms/
318 assert_select "dd", /Undecided/
322 def test_auth_failure_callback
323 get auth_failure_path
324 assert_redirected_to login_path
326 get auth_failure_path, :params => { :origin => "/" }
327 assert_redirected_to root_path
329 get auth_failure_path, :params => { :origin => "http://www.google.com" }
330 assert_redirected_to login_path