3 class UserCreationTest < ActionDispatch::IntegrationTest
9 OmniAuth.config.test_mode = true
15 OmniAuth.config.mock_auth[:openid] = nil
16 OmniAuth.config.mock_auth[:google] = nil
17 OmniAuth.config.mock_auth[:facebook] = nil
18 OmniAuth.config.test_mode = false
21 def test_create_user_form
22 I18n.available_locales.each do |locale|
23 get_via_redirect "/user/new", {}, { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
24 assert_response :success
25 assert_template "user/new"
29 def test_user_create_submit_duplicate_email
30 I18n.available_locales.each do |locale|
31 dup_email = users(:public_user).email
32 display_name = "#{locale}_new_tester"
33 assert_difference("User.count", 0) do
34 assert_difference("ActionMailer::Base.deliveries.size", 0) do
36 { :user => { :email => dup_email, :email_confirmation => dup_email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } },
37 { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
40 assert_response :success
41 assert_template "user/new"
42 assert_equal response.headers["Content-Language"][0..1], locale.to_s[0..1] unless locale == :root
43 assert_select "form > fieldset > div.form-row > input.field_with_errors#user_email"
44 assert_no_missing_translations
48 def test_user_create_submit_duplicate_username
49 I18n.available_locales.each do |locale|
50 dup_display_name = users(:public_user).display_name
51 email = "#{locale}_new_tester"
52 assert_difference("User.count", 0) do
53 assert_difference("ActionMailer::Base.deliveries.size", 0) do
55 { :user => { :email => email, :email_confirmation => email, :display_name => dup_display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } },
56 { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
59 assert_response :success
60 assert_template "user/new"
61 assert_select "form > fieldset > div.form-row > input.field_with_errors#user_display_name"
62 assert_no_missing_translations
66 def test_user_create_success
67 I18n.available_locales.each do |locale|
68 new_email = "#{locale}newtester@osm.org"
69 display_name = "#{locale}_new_tester"
71 assert_difference("User.count", 0) do
72 assert_difference("ActionMailer::Base.deliveries.size", 0) do
74 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" }
78 assert_redirected_to "/user/terms"
80 assert_difference("User.count") do
81 assert_difference("ActionMailer::Base.deliveries.size", 1) do
82 post_via_redirect "/user/save", {},
83 { "HTTP_ACCEPT_LANGUAGE" => "#{locale}" }
88 register_email = ActionMailer::Base.deliveries.first
90 assert_equal register_email.to[0], new_email
91 # Check that the confirm account url is correct
92 assert_match /#{@url}/, register_email.body.to_s
95 assert_response :success
96 assert_template "user/confirm"
98 ActionMailer::Base.deliveries.clear
102 # Check that the user can successfully recover their password
103 def lost_password_recovery_success
104 # Open the lost password form
105 # Submit the lost password form
107 # Submit the reset password token
108 # Check that the password has changed, and the user can login
111 def test_user_create_redirect
112 new_email = "redirect_tester@osm.org"
113 display_name = "redirect_tester"
114 password = "testtest"
115 # nothing special about this page, just need a protected page to redirect back to.
116 referer = "/traces/mine"
117 assert_difference("User.count") do
118 assert_difference("ActionMailer::Base.deliveries.size", 1) do
120 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => password, :pass_crypt_confirmation => password }, :referer => referer
121 assert_redirected_to "/user/terms"
122 post_via_redirect "/user/save",
123 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => password, :pass_crypt_confirmation => password }
128 register_email = ActionMailer::Base.deliveries.first
130 assert_equal register_email.to[0], new_email
131 # Check that the confirm account url is correct
132 confirm_regex = Regexp.new("/user/redirect_tester/confirm\\?confirm_string=([a-zA-Z0-9]*)")
133 register_email.parts.each do |part|
134 assert_match confirm_regex, part.body.to_s
136 confirm_string = register_email.parts[0].body.match(confirm_regex)[1]
139 assert_response :success
140 assert_template "user/confirm"
142 ActionMailer::Base.deliveries.clear
144 # Go to the confirmation page
145 get "/user/#{display_name}/confirm", :confirm_string => confirm_string
146 assert_response :success
147 assert_template "user/confirm"
149 post "/user/#{display_name}/confirm", :confirm_string => confirm_string
150 assert_response :redirect
152 assert_response :success
153 assert_template "site/welcome"
156 def test_user_create_openid_success
157 OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/new.tester")
159 new_email = "newtester-openid@osm.org"
160 display_name = "new_tester-openid"
161 password = "testtest"
162 assert_difference("User.count") do
163 assert_difference("ActionMailer::Base.deliveries.size", 1) do
165 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "", :pass_crypt_confirmation => "" }
166 assert_response :redirect
167 assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
169 assert_response :redirect
170 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
172 assert_response :redirect
173 assert_redirected_to "/user/terms"
175 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => password, :pass_crypt_confirmation => password }
176 assert_response :redirect
182 assert_response :success
183 assert_template "user/confirm"
185 ActionMailer::Base.deliveries.clear
188 def test_user_create_openid_failure
189 OmniAuth.config.mock_auth[:openid] = :connection_failed
191 new_email = "newtester-openid2@osm.org"
192 display_name = "new_tester-openid2"
193 assert_difference("User.count", 0) do
194 assert_difference("ActionMailer::Base.deliveries.size", 0) do
196 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "", :pass_crypt_confirmation => "" }
197 assert_response :redirect
198 assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
200 assert_response :redirect
201 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
203 assert_response :redirect
204 assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/user/new")
206 assert_response :redirect
208 assert_response :success
209 assert_template "user/new"
213 ActionMailer::Base.deliveries.clear
216 def test_user_create_openid_redirect
217 OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/new.tester")
219 new_email = "redirect_tester_openid@osm.org"
220 display_name = "redirect_tester_openid"
221 # nothing special about this page, just need a protected page to redirect back to.
222 referer = "/traces/mine"
223 assert_difference("User.count") do
224 assert_difference("ActionMailer::Base.deliveries.size", 1) do
226 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer
227 assert_response :redirect
228 assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
230 assert_response :redirect
231 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
233 assert_response :redirect
234 assert_redirected_to "/user/terms"
235 post_via_redirect "/user/save",
236 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" }
241 register_email = ActionMailer::Base.deliveries.first
243 assert_equal register_email.to[0], new_email
244 # Check that the confirm account url is correct
245 confirm_regex = Regexp.new("/user/redirect_tester_openid/confirm\\?confirm_string=([a-zA-Z0-9]*)")
246 register_email.parts.each do |part|
247 assert_match confirm_regex, part.body.to_s
249 confirm_string = register_email.parts[0].body.match(confirm_regex)[1]
252 assert_response :success
253 assert_template "user/confirm"
255 ActionMailer::Base.deliveries.clear
257 # Go to the confirmation page
258 get "/user/#{display_name}/confirm", :confirm_string => confirm_string
259 assert_response :success
260 assert_template "user/confirm"
262 post "/user/#{display_name}/confirm", :confirm_string => confirm_string
263 assert_response :redirect
265 assert_response :success
266 assert_template "site/welcome"
269 def test_user_create_google_success
270 OmniAuth.config.add_mock(:google, :uid => "123454321", :extra => {
271 :id_info => { "openid_id" => "http://localhost:1123/new.tester" }
274 new_email = "newtester-google@osm.org"
275 display_name = "new_tester-google"
276 password = "testtest"
277 assert_difference("User.count") do
278 assert_difference("ActionMailer::Base.deliveries.size", 1) do
280 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :pass_crypt => "", :pass_crypt_confirmation => "" }
281 assert_response :redirect
282 assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
284 assert_response :redirect
285 assert_redirected_to auth_success_path(:provider => "google")
287 assert_response :redirect
288 assert_redirected_to "/user/terms"
290 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password }
291 assert_response :redirect
297 assert_response :success
298 assert_template "user/confirm"
300 ActionMailer::Base.deliveries.clear
303 def test_user_create_google_failure
304 OmniAuth.config.mock_auth[:google] = :connection_failed
306 new_email = "newtester-google2@osm.org"
307 display_name = "new_tester-google2"
308 assert_difference("User.count", 0) do
309 assert_difference("ActionMailer::Base.deliveries.size", 0) do
311 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :pass_crypt => "", :pass_crypt_confirmation => "" }
312 assert_response :redirect
313 assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
315 assert_response :redirect
316 assert_redirected_to auth_success_path(:provider => "google")
318 assert_response :redirect
319 assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
321 assert_response :redirect
323 assert_response :success
324 assert_template "user/new"
328 ActionMailer::Base.deliveries.clear
331 def test_user_create_google_redirect
332 OmniAuth.config.add_mock(:google, :uid => "123454321", :extra => {
333 :id_info => { "openid_id" => "http://localhost:1123/new.tester" }
336 new_email = "redirect_tester_google@osm.org"
337 display_name = "redirect_tester_google"
338 # nothing special about this page, just need a protected page to redirect back to.
339 referer = "/traces/mine"
340 assert_difference("User.count") do
341 assert_difference("ActionMailer::Base.deliveries.size", 1) do
343 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer
344 assert_response :redirect
345 assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
347 assert_response :redirect
348 assert_redirected_to auth_success_path(:provider => "google")
350 assert_response :redirect
351 assert_redirected_to "/user/terms"
352 post_via_redirect "/user/save",
353 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" }
358 register_email = ActionMailer::Base.deliveries.first
360 assert_equal register_email.to[0], new_email
361 # Check that the confirm account url is correct
362 confirm_regex = Regexp.new("/user/redirect_tester_google/confirm\\?confirm_string=([a-zA-Z0-9]*)")
363 register_email.parts.each do |part|
364 assert_match confirm_regex, part.body.to_s
366 confirm_string = register_email.parts[0].body.match(confirm_regex)[1]
369 assert_response :success
370 assert_template "user/confirm"
372 ActionMailer::Base.deliveries.clear
374 # Go to the confirmation page
375 get "/user/#{display_name}/confirm", :confirm_string => confirm_string
376 assert_response :success
377 assert_template "user/confirm"
379 post "/user/#{display_name}/confirm", :confirm_string => confirm_string
380 assert_response :redirect
382 assert_response :success
383 assert_template "site/welcome"
386 def test_user_create_facebook_success
387 OmniAuth.config.add_mock(:facebook, :uid => "123454321", :extra => {
388 :id_info => { "openid_id" => "http://localhost:1123/new.tester" }
391 new_email = "newtester-facebook@osm.org"
392 display_name = "new_tester-facebook"
393 password = "testtest"
394 assert_difference("User.count") do
395 assert_difference("ActionMailer::Base.deliveries.size", 1) do
397 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" }
398 assert_response :redirect
399 assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
401 assert_response :redirect
402 assert_redirected_to auth_success_path(:provider => "facebook")
404 assert_response :redirect
405 assert_redirected_to "/user/terms"
407 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password }
408 assert_response :redirect
414 assert_response :success
415 assert_template "user/confirm"
417 ActionMailer::Base.deliveries.clear
420 def test_user_create_facebook_failure
421 OmniAuth.config.mock_auth[:facebook] = :connection_failed
423 new_email = "newtester-facebook2@osm.org"
424 display_name = "new_tester-facebook2"
425 assert_difference("User.count", 0) do
426 assert_difference("ActionMailer::Base.deliveries.size", 0) do
428 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" }
429 assert_response :redirect
430 assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
432 assert_response :redirect
433 assert_redirected_to auth_success_path(:provider => "facebook")
435 assert_response :redirect
436 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
438 assert_response :redirect
440 assert_response :success
441 assert_template "user/new"
445 ActionMailer::Base.deliveries.clear
448 def test_user_create_facebook_redirect
449 OmniAuth.config.add_mock(:facebook, :uid => "123454321", :extra => {
450 :id_info => { "openid_id" => "http://localhost:1123/new.tester" }
453 new_email = "redirect_tester_facebook@osm.org"
454 display_name = "redirect_tester_facebook"
455 # nothing special about this page, just need a protected page to redirect back to.
456 referer = "/traces/mine"
457 assert_difference("User.count") do
458 assert_difference("ActionMailer::Base.deliveries.size", 1) do
460 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer
461 assert_response :redirect
462 assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
464 assert_response :redirect
465 assert_redirected_to auth_success_path(:provider => "facebook")
467 assert_response :redirect
468 assert_redirected_to "/user/terms"
469 post_via_redirect "/user/save",
470 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" }
475 register_email = ActionMailer::Base.deliveries.first
477 assert_equal register_email.to[0], new_email
478 # Check that the confirm account url is correct
479 confirm_regex = Regexp.new("/user/redirect_tester_facebook/confirm\\?confirm_string=([a-zA-Z0-9]*)")
480 register_email.parts.each do |part|
481 assert_match confirm_regex, part.body.to_s
483 confirm_string = register_email.parts[0].body.match(confirm_regex)[1]
486 assert_response :success
487 assert_template "user/confirm"
489 ActionMailer::Base.deliveries.clear
491 # Go to the confirmation page
492 get "/user/#{display_name}/confirm", :confirm_string => confirm_string
493 assert_response :success
494 assert_template "user/confirm"
496 post "/user/#{display_name}/confirm", :confirm_string => confirm_string
497 assert_response :redirect
499 assert_response :success
500 assert_template "site/welcome"