3 class UserCreationTest < ActionDispatch::IntegrationTest
7 OmniAuth.config.test_mode = true
9 stub_request(:get, /.*gravatar.com.*d=404/).to_return(:status => 404)
10 stub_request(:get, "https://api.hostip.info/country.php?ip=127.0.0.1").
11 to_return(status: 200, body: "", headers: {})
18 OmniAuth.config.mock_auth[:openid] = nil
19 OmniAuth.config.mock_auth[:google] = nil
20 OmniAuth.config.mock_auth[:facebook] = nil
21 OmniAuth.config.mock_auth[:windowslive] = nil
22 OmniAuth.config.mock_auth[:github] = nil
23 OmniAuth.config.mock_auth[:wikipedia] = nil
24 OmniAuth.config.test_mode = false
27 def test_create_user_form
28 I18n.available_locales.each do |locale|
30 get "/user/new", :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
32 assert_response :success
33 assert_template "users/new"
37 def test_user_create_submit_duplicate_email
38 I18n.available_locales.each do |locale|
39 dup_email = create(:user).email
40 display_name = "#{locale}_new_tester"
41 assert_difference("User.count", 0) do
42 assert_difference("ActionMailer::Base.deliveries.size", 0) do
43 perform_enqueued_jobs do
45 :params => { :user => { :email => dup_email, :email_confirmation => dup_email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } },
46 :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
50 assert_response :success
51 assert_template "users/new"
52 assert_equal locale.to_s, response.headers["Content-Language"] unless locale == :root
53 assert_select "form > fieldset > div.form-row > input.field_with_errors#user_email"
54 assert_no_missing_translations
58 def test_user_create_submit_duplicate_username
59 I18n.available_locales.each do |locale|
60 dup_display_name = create(:user).display_name
61 email = "#{locale}_new_tester"
62 assert_difference("User.count", 0) do
63 assert_difference("ActionMailer::Base.deliveries.size", 0) do
64 perform_enqueued_jobs do
66 :params => { :user => { :email => email, :email_confirmation => email, :display_name => dup_display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } },
67 :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
71 assert_response :success
72 assert_template "users/new"
73 assert_select "form > fieldset > div.form-row > input.field_with_errors#user_display_name"
74 assert_no_missing_translations
78 def test_user_create_success
79 I18n.available_locales.each do |locale|
80 new_email = "#{locale}newtester@osm.org"
81 display_name = "#{locale}_new_tester"
83 assert_difference("User.count", 0) do
84 assert_difference("ActionMailer::Base.deliveries.size", 0) do
85 perform_enqueued_jobs do
87 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
92 assert_redirected_to "/user/terms"
94 assert_difference("User.count") do
95 assert_difference("ActionMailer::Base.deliveries.size", 1) do
96 perform_enqueued_jobs do
98 :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s },
99 :params => { :read_tou => 1 }
106 register_email = ActionMailer::Base.deliveries.first
108 assert_equal register_email.to.first, new_email
109 # Check that the confirm account url is correct
110 assert_match(/#{@url}/, register_email.body.to_s)
113 assert_response :success
114 assert_template "users/confirm"
116 ActionMailer::Base.deliveries.clear
120 def test_user_create_no_tou_failure
121 I18n.available_locales.each do |locale|
122 new_email = "#{locale}newtester@osm.org"
123 display_name = "#{locale}_new_tester"
125 assert_difference("User.count", 0) do
126 assert_difference("ActionMailer::Base.deliveries.size", 0) do
127 perform_enqueued_jobs do
129 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
134 assert_redirected_to "/user/terms"
136 perform_enqueued_jobs do
138 :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
139 assert_redirected_to "/user/terms"
142 ActionMailer::Base.deliveries.clear
147 # Check that the user can successfully recover their password
148 def lost_password_recovery_success
149 # Open the lost password form
150 # Submit the lost password form
152 # Submit the reset password token
153 # Check that the password has changed, and the user can login
156 def test_user_create_redirect
157 new_email = "redirect_tester@osm.org"
158 display_name = "redirect_tester"
159 password = "testtest"
160 # nothing special about this page, just need a protected page to redirect back to.
161 referer = "/traces/mine"
162 assert_difference("User.count") do
163 assert_difference("ActionMailer::Base.deliveries.size", 1) do
164 perform_enqueued_jobs do
166 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => password, :pass_crypt_confirmation => password }, :referer => referer }
167 assert_redirected_to "/user/terms"
169 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => password, :pass_crypt_confirmation => password }, :read_tou => 1 }
176 register_email = ActionMailer::Base.deliveries.first
178 assert_equal register_email.to.first, new_email
179 # Check that the confirm account url is correct
180 confirm_regex = Regexp.new("/user/redirect_tester/confirm\\?confirm_string=([a-zA-Z0-9]*)")
181 email_text_parts(register_email).each do |part|
182 assert_match confirm_regex, part.body.to_s
184 confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
187 assert_response :success
188 assert_template "users/confirm"
190 ActionMailer::Base.deliveries.clear
192 # Go to the confirmation page
193 get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
194 assert_response :success
195 assert_template "users/confirm"
197 post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
198 assert_response :redirect
200 assert_response :success
201 assert_template "site/welcome"
204 def test_user_create_openid_success
205 OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/new.tester")
207 new_email = "newtester-openid@osm.org"
208 display_name = "new_tester-openid"
209 password = "testtest"
210 assert_difference("User.count") do
211 assert_difference("ActionMailer::Base.deliveries.size", 1) do
212 perform_enqueued_jobs do
214 :params => { :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 => "" } }
215 assert_response :redirect
216 assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
218 assert_response :redirect
219 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
221 assert_response :redirect
222 assert_redirected_to "/user/terms"
224 :params => { :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 }, :read_tou => 1}
225 assert_response :redirect
232 assert_response :success
233 assert_template "users/confirm"
235 ActionMailer::Base.deliveries.clear
238 def test_user_create_openid_failure
239 OmniAuth.config.mock_auth[:openid] = :connection_failed
241 new_email = "newtester-openid2@osm.org"
242 display_name = "new_tester-openid2"
243 assert_difference("User.count", 0) do
244 assert_difference("ActionMailer::Base.deliveries.size", 0) do
245 perform_enqueued_jobs do
247 :params => { :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 => "" } }
248 assert_response :redirect
249 assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
251 assert_response :redirect
252 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
254 assert_response :redirect
255 assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/user/new")
257 assert_response :redirect
259 assert_response :success
260 assert_template "users/new"
265 ActionMailer::Base.deliveries.clear
268 def test_user_create_openid_redirect
269 OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/new.tester")
271 new_email = "redirect_tester_openid@osm.org"
272 display_name = "redirect_tester_openid"
273 # nothing special about this page, just need a protected page to redirect back to.
274 referer = "/traces/mine"
275 assert_difference("User.count") do
276 assert_difference("ActionMailer::Base.deliveries.size", 1) do
277 perform_enqueued_jobs do
279 :params => { :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 }
280 assert_response :redirect
281 assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
283 assert_response :redirect
284 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
286 assert_response :redirect
287 assert_redirected_to "/user/terms"
289 :params => { :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" }, :read_tou => 1 }
296 register_email = ActionMailer::Base.deliveries.first
298 assert_equal register_email.to.first, new_email
299 # Check that the confirm account url is correct
300 confirm_regex = Regexp.new("/user/redirect_tester_openid/confirm\\?confirm_string=([a-zA-Z0-9]*)")
301 email_text_parts(register_email).each do |part|
302 assert_match confirm_regex, part.body.to_s
304 confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
307 assert_response :success
308 assert_template "users/confirm"
310 ActionMailer::Base.deliveries.clear
312 # Go to the confirmation page
313 get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
314 assert_response :success
315 assert_template "users/confirm"
317 post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
318 assert_response :redirect
320 assert_response :success
321 assert_template "site/welcome"
324 def test_user_create_google_success
325 OmniAuth.config.add_mock(:google, :uid => "123454321", :extra => {
326 :id_info => { "openid_id" => "http://localhost:1123/new.tester" }
329 new_email = "newtester-google@osm.org"
330 display_name = "new_tester-google"
331 password = "testtest"
332 assert_difference("User.count") do
333 assert_difference("ActionMailer::Base.deliveries.size", 1) do
334 perform_enqueued_jobs do
336 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :pass_crypt => "", :pass_crypt_confirmation => "" } }
337 assert_response :redirect
338 assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
340 assert_response :redirect
341 assert_redirected_to auth_success_path(:provider => "google")
343 assert_response :redirect
344 assert_redirected_to "/user/terms"
346 :params => { :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 }, :read_tou => 1 }
347 assert_response :redirect
354 assert_response :success
355 assert_template "users/confirm"
357 ActionMailer::Base.deliveries.clear
360 def test_user_create_google_failure
361 OmniAuth.config.mock_auth[:google] = :connection_failed
363 new_email = "newtester-google2@osm.org"
364 display_name = "new_tester-google2"
365 assert_difference("User.count", 0) do
366 assert_difference("ActionMailer::Base.deliveries.size", 0) do
367 perform_enqueued_jobs do
369 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :pass_crypt => "", :pass_crypt_confirmation => "" } }
370 assert_response :redirect
371 assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
373 assert_response :redirect
374 assert_redirected_to auth_success_path(:provider => "google")
376 assert_response :redirect
377 assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
379 assert_response :redirect
381 assert_response :success
382 assert_template "users/new"
387 ActionMailer::Base.deliveries.clear
390 def test_user_create_google_redirect
391 OmniAuth.config.add_mock(:google, :uid => "123454321", :extra => {
392 :id_info => { "openid_id" => "http://localhost:1123/new.tester" }
395 new_email = "redirect_tester_google@osm.org"
396 display_name = "redirect_tester_google"
397 # nothing special about this page, just need a protected page to redirect back to.
398 referer = "/traces/mine"
399 assert_difference("User.count") do
400 assert_difference("ActionMailer::Base.deliveries.size", 1) do
401 perform_enqueued_jobs do
403 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
404 assert_response :redirect
405 assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
407 assert_response :redirect
408 assert_redirected_to auth_success_path(:provider => "google")
410 assert_response :redirect
411 assert_redirected_to "/user/terms"
413 :params => { :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" }, :read_tou => 1 }
420 register_email = ActionMailer::Base.deliveries.first
422 assert_equal register_email.to.first, new_email
423 # Check that the confirm account url is correct
424 confirm_regex = Regexp.new("/user/redirect_tester_google/confirm\\?confirm_string=([a-zA-Z0-9]*)")
425 email_text_parts(register_email).each do |part|
426 assert_match confirm_regex, part.body.to_s
428 confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
431 assert_response :success
432 assert_template "users/confirm"
434 ActionMailer::Base.deliveries.clear
436 # Go to the confirmation page
437 get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
438 assert_response :success
439 assert_template "users/confirm"
441 post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
442 assert_response :redirect
444 assert_response :success
445 assert_template "site/welcome"
448 def test_user_create_facebook_success
449 OmniAuth.config.add_mock(:facebook, :uid => "123454321")
451 new_email = "newtester-facebook@osm.org"
452 display_name = "new_tester-facebook"
453 password = "testtest"
454 assert_difference("User.count") do
455 assert_difference("ActionMailer::Base.deliveries.size", 1) do
456 perform_enqueued_jobs do
458 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" } }
459 assert_response :redirect
460 assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
462 assert_response :redirect
463 assert_redirected_to auth_success_path(:provider => "facebook")
465 assert_response :redirect
466 assert_redirected_to "/user/terms"
468 :params => { :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 }, :read_tou => 1 }
469 assert_response :redirect
476 assert_response :success
477 assert_template "users/confirm"
479 ActionMailer::Base.deliveries.clear
482 def test_user_create_facebook_failure
483 OmniAuth.config.mock_auth[:facebook] = :connection_failed
485 new_email = "newtester-facebook2@osm.org"
486 display_name = "new_tester-facebook2"
487 assert_difference("User.count", 0) do
488 assert_difference("ActionMailer::Base.deliveries.size", 0) do
489 perform_enqueued_jobs do
491 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" } }
492 assert_response :redirect
493 assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
495 assert_response :redirect
496 assert_redirected_to auth_success_path(:provider => "facebook")
498 assert_response :redirect
499 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
501 assert_response :redirect
503 assert_response :success
504 assert_template "users/new"
509 ActionMailer::Base.deliveries.clear
512 def test_user_create_facebook_redirect
513 OmniAuth.config.add_mock(:facebook, :uid => "123454321")
515 new_email = "redirect_tester_facebook@osm.org"
516 display_name = "redirect_tester_facebook"
517 # nothing special about this page, just need a protected page to redirect back to.
518 referer = "/traces/mine"
519 assert_difference("User.count") do
520 assert_difference("ActionMailer::Base.deliveries.size", 1) do
521 perform_enqueued_jobs do
523 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
524 assert_response :redirect
525 assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
527 assert_response :redirect
528 assert_redirected_to auth_success_path(:provider => "facebook")
530 assert_response :redirect
531 assert_redirected_to "/user/terms"
533 :params => { :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" }, :read_tou => 1 }
540 register_email = ActionMailer::Base.deliveries.first
542 assert_equal register_email.to.first, new_email
543 # Check that the confirm account url is correct
544 confirm_regex = Regexp.new("/user/redirect_tester_facebook/confirm\\?confirm_string=([a-zA-Z0-9]*)")
545 email_text_parts(register_email).each do |part|
546 assert_match confirm_regex, part.body.to_s
548 confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
551 assert_response :success
552 assert_template "users/confirm"
554 ActionMailer::Base.deliveries.clear
556 # Go to the confirmation page
557 get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
558 assert_response :success
559 assert_template "users/confirm"
561 post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
562 assert_response :redirect
564 assert_response :success
565 assert_template "site/welcome"
568 def test_user_create_windowslive_success
569 OmniAuth.config.add_mock(:windowslive, :uid => "123454321")
571 new_email = "newtester-windowslive@osm.org"
572 display_name = "new_tester-windowslive"
573 password = "testtest"
574 assert_difference("User.count") do
575 assert_difference("ActionMailer::Base.deliveries.size", 1) do
576 perform_enqueued_jobs do
578 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :pass_crypt => "", :pass_crypt_confirmation => "" } }
579 assert_response :redirect
580 assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
582 assert_response :redirect
583 assert_redirected_to auth_success_path(:provider => "windowslive")
585 assert_response :redirect
586 assert_redirected_to "/user/terms"
588 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password }, :read_tou => 1 }
589 assert_response :redirect
596 assert_response :success
597 assert_template "users/confirm"
599 ActionMailer::Base.deliveries.clear
602 def test_user_create_windowslive_failure
603 OmniAuth.config.mock_auth[:windowslive] = :connection_failed
605 new_email = "newtester-windowslive2@osm.org"
606 display_name = "new_tester-windowslive2"
607 assert_difference("User.count", 0) do
608 assert_difference("ActionMailer::Base.deliveries.size", 0) do
609 perform_enqueued_jobs do
611 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :pass_crypt => "", :pass_crypt_confirmation => "" } }
612 assert_response :redirect
613 assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
615 assert_response :redirect
616 assert_redirected_to auth_success_path(:provider => "windowslive")
618 assert_response :redirect
619 assert_redirected_to auth_failure_path(:strategy => "windowslive", :message => "connection_failed", :origin => "/user/new")
621 assert_response :redirect
623 assert_response :success
624 assert_template "users/new"
629 ActionMailer::Base.deliveries.clear
632 def test_user_create_windowslive_redirect
633 OmniAuth.config.add_mock(:windowslive, :uid => "123454321")
635 new_email = "redirect_tester_windowslive@osm.org"
636 display_name = "redirect_tester_windowslive"
637 # nothing special about this page, just need a protected page to redirect back to.
638 referer = "/traces/mine"
639 assert_difference("User.count") do
640 assert_difference("ActionMailer::Base.deliveries.size", 1) do
641 perform_enqueued_jobs do
643 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
644 assert_response :redirect
645 assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
647 assert_response :redirect
648 assert_redirected_to auth_success_path(:provider => "windowslive")
650 assert_response :redirect
651 assert_redirected_to "/user/terms"
653 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" }, :read_tou => 1 }
660 register_email = ActionMailer::Base.deliveries.first
662 assert_equal register_email.to.first, new_email
663 # Check that the confirm account url is correct
664 confirm_regex = Regexp.new("/user/redirect_tester_windowslive/confirm\\?confirm_string=([a-zA-Z0-9]*)")
665 email_text_parts(register_email).each do |part|
666 assert_match confirm_regex, part.body.to_s
668 confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
671 assert_response :success
672 assert_template "users/confirm"
674 ActionMailer::Base.deliveries.clear
676 # Go to the confirmation page
677 get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
678 assert_response :success
679 assert_template "users/confirm"
681 post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
682 assert_response :redirect
684 assert_response :success
685 assert_template "site/welcome"
688 def test_user_create_github_success
689 OmniAuth.config.add_mock(:github, :uid => "123454321")
691 new_email = "newtester-github@osm.org"
692 display_name = "new_tester-github"
693 password = "testtest"
694 assert_difference("User.count") do
695 assert_difference("ActionMailer::Base.deliveries.size", 1) do
696 perform_enqueued_jobs do
698 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "github", :pass_crypt => "", :pass_crypt_confirmation => "" } }
699 assert_response :redirect
700 assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
702 assert_response :redirect
703 assert_redirected_to auth_success_path(:provider => "github")
705 assert_response :redirect
706 assert_redirected_to "/user/terms"
708 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "github", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password }, :read_tou => 1 }
709 assert_response :redirect
716 assert_response :success
717 assert_template "users/confirm"
719 ActionMailer::Base.deliveries.clear
722 def test_user_create_github_failure
723 OmniAuth.config.mock_auth[:github] = :connection_failed
725 new_email = "newtester-github2@osm.org"
726 display_name = "new_tester-github2"
727 assert_difference("User.count", 0) do
728 assert_difference("ActionMailer::Base.deliveries.size", 0) do
729 perform_enqueued_jobs do
731 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "github", :pass_crypt => "", :pass_crypt_confirmation => "" } }
732 assert_response :redirect
733 assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
735 assert_response :redirect
736 assert_redirected_to auth_success_path(:provider => "github")
738 assert_response :redirect
739 assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/user/new")
741 assert_response :redirect
743 assert_response :success
744 assert_template "users/new"
749 ActionMailer::Base.deliveries.clear
752 def test_user_create_github_redirect
753 OmniAuth.config.add_mock(:github, :uid => "123454321")
755 new_email = "redirect_tester_github@osm.org"
756 display_name = "redirect_tester_github"
757 # nothing special about this page, just need a protected page to redirect back to.
758 referer = "/traces/mine"
759 assert_difference("User.count") do
760 assert_difference("ActionMailer::Base.deliveries.size", 1) do
761 perform_enqueued_jobs do
763 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "github", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
764 assert_response :redirect
765 assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
767 assert_response :redirect
768 assert_redirected_to auth_success_path(:provider => "github")
770 assert_response :redirect
771 assert_redirected_to "/user/terms"
773 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "github", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" }, :read_tou => 1 }
780 register_email = ActionMailer::Base.deliveries.first
782 assert_equal register_email.to.first, new_email
783 # Check that the confirm account url is correct
784 confirm_regex = Regexp.new("/user/redirect_tester_github/confirm\\?confirm_string=([a-zA-Z0-9]*)")
785 email_text_parts(register_email).each do |part|
786 assert_match confirm_regex, part.body.to_s
788 confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
791 assert_response :success
792 assert_template "users/confirm"
794 ActionMailer::Base.deliveries.clear
796 # Go to the confirmation page
797 get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
798 assert_response :success
799 assert_template "users/confirm"
801 post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
802 assert_response :redirect
804 assert_response :success
805 assert_template "site/welcome"
808 def test_user_create_wikipedia_success
809 OmniAuth.config.add_mock(:wikipedia, :uid => "123454321")
811 new_email = "newtester-wikipedia@osm.org"
812 display_name = "new_tester-wikipedia"
813 password = "testtest"
814 assert_difference("User.count") do
815 assert_difference("ActionMailer::Base.deliveries.size", 1) do
816 perform_enqueued_jobs do
818 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "wikipedia", :pass_crypt => "", :pass_crypt_confirmation => "" } }
819 assert_response :redirect
820 assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
822 assert_response :redirect
823 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
825 assert_response :redirect
826 assert_redirected_to "/user/terms"
828 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "wikipedia", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password }, :read_tou => 1 }
829 assert_response :redirect
836 assert_response :success
837 assert_template "users/confirm"
839 ActionMailer::Base.deliveries.clear
842 def test_user_create_wikipedia_failure
843 OmniAuth.config.mock_auth[:wikipedia] = :connection_failed
845 new_email = "newtester-wikipedia2@osm.org"
846 display_name = "new_tester-wikipedia2"
847 assert_difference("User.count", 0) do
848 assert_difference("ActionMailer::Base.deliveries.size", 0) do
849 perform_enqueued_jobs do
851 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "wikipedia", :pass_crypt => "", :pass_crypt_confirmation => "" } }
852 assert_response :redirect
853 assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
855 assert_response :redirect
856 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
858 assert_response :redirect
859 assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/user/new")
861 assert_response :redirect
863 assert_response :success
864 assert_template "users/new"
869 ActionMailer::Base.deliveries.clear
872 def test_user_create_wikipedia_redirect
873 OmniAuth.config.add_mock(:wikipedia, :uid => "123454321")
875 new_email = "redirect_tester_wikipedia@osm.org"
876 display_name = "redirect_tester_wikipedia"
877 # nothing special about this page, just need a protected page to redirect back to.
878 referer = "/traces/mine"
879 assert_difference("User.count") do
880 assert_difference("ActionMailer::Base.deliveries.size", 1) do
881 perform_enqueued_jobs do
883 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "wikipedia", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
884 assert_response :redirect
885 assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
887 assert_response :redirect
888 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
890 assert_response :redirect
891 assert_redirected_to "/user/terms"
893 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "wikipedia", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" }, :read_tou => 1 }
900 register_email = ActionMailer::Base.deliveries.first
902 assert_equal register_email.to.first, new_email
903 # Check that the confirm account url is correct
904 confirm_regex = Regexp.new("/user/redirect_tester_wikipedia/confirm\\?confirm_string=([a-zA-Z0-9]*)")
905 email_text_parts(register_email).each do |part|
906 assert_match confirm_regex, part.body.to_s
908 confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
911 assert_response :success
912 assert_template "users/confirm"
914 ActionMailer::Base.deliveries.clear
916 # Go to the confirmation page
917 get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
918 assert_response :success
919 assert_template "users/confirm"
921 post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
922 assert_response :redirect
924 assert_response :success
925 assert_template "site/welcome"