3 class UserCreationTest < ActionDispatch::IntegrationTest
5 OmniAuth.config.test_mode = true
7 stub_request(:get, /.*gravatar.com.*d=404/).to_return(:status => 404)
11 OmniAuth.config.mock_auth[:openid] = nil
12 OmniAuth.config.mock_auth[:google] = nil
13 OmniAuth.config.mock_auth[:facebook] = nil
14 OmniAuth.config.mock_auth[:microsoft] = nil
15 OmniAuth.config.mock_auth[:github] = nil
16 OmniAuth.config.mock_auth[:wikipedia] = nil
17 OmniAuth.config.test_mode = false
20 def test_create_user_form
23 assert_response :success
24 assert_template "users/new"
27 def test_user_create_submit_duplicate_email
28 dup_email = create(:user).email
29 display_name = "new_tester"
30 assert_difference("User.count", 0) do
31 assert_difference("ActionMailer::Base.deliveries.size", 0) do
32 perform_enqueued_jobs do
34 :params => { :user => { :email => dup_email,
35 :display_name => display_name,
36 :pass_crypt => "testtest",
37 :pass_crypt_confirmation => "testtest",
38 :consider_pd => "1" } }
42 assert_response :success
43 assert_template "users/new"
45 assert_select "form > div > input.is-invalid#user_email"
48 def test_user_create_association_submit_duplicate_email
49 dup_email = create(:user).email
50 display_name = "new_tester"
51 assert_difference("User.count", 0) do
52 assert_no_difference("ActionMailer::Base.deliveries.size") do
53 perform_enqueued_jobs do
55 :params => { :user => { :email => dup_email,
56 :display_name => display_name,
57 :pass_crypt => "testtest",
58 :pass_crypt_confirmation => "testtest",
59 :auth_provider => "auth_provider",
60 :auth_uid => "123454321",
61 :consider_pd => "1" } }
65 assert_response :success
66 assert_template "users/new"
68 assert_select "form > div > input.is-invalid#user_email"
71 def test_user_create_submit_duplicate_username
72 dup_display_name = create(:user).display_name
74 assert_difference("User.count", 0) do
75 assert_difference("ActionMailer::Base.deliveries.size", 0) do
76 perform_enqueued_jobs do
78 :params => { :user => { :email => email,
79 :display_name => dup_display_name,
80 :pass_crypt => "testtest",
81 :pass_crypt_confirmation => "testtest" } }
85 assert_response :success
86 assert_template "users/new"
87 assert_select "form > div > input.is-invalid#user_display_name"
90 def test_user_create_submit_mismatched_passwords
91 email = "newtester@osm.org"
92 display_name = "new_tester"
93 assert_difference("User.count", 0) do
94 assert_difference("ActionMailer::Base.deliveries.size", 0) do
95 perform_enqueued_jobs do
97 :params => { :user => { :email => email,
98 :display_name => display_name,
99 :pass_crypt => "testtest",
100 :pass_crypt_confirmation => "blahblah",
101 :consider_pd => "1" } }
105 assert_response :success
106 assert_template "users/new"
107 assert_select "form > div > div > div > input.is-invalid#user_pass_crypt_confirmation"
110 def test_user_create_association_submit_duplicate_username
111 dup_display_name = create(:user).display_name
113 assert_difference("User.count", 0) do
114 assert_no_difference("ActionMailer::Base.deliveries.size") do
115 perform_enqueued_jobs do
117 :params => { :user => { :email => email,
118 :display_name => dup_display_name,
119 :auth_provider => "provider",
120 :auth_uid => "123454321",
121 :consider_pd => "1" } }
125 assert_response :success
126 assert_template "users/new"
127 assert_select "form > div > input.is-invalid#user_display_name"
130 def test_user_create_success
131 new_email = "newtester@osm.org"
132 display_name = "new_tester"
134 assert_difference("User.count", 1) do
135 assert_difference("ActionMailer::Base.deliveries.size", 1) do
136 perform_enqueued_jobs do
138 :params => { :user => { :email => new_email,
139 :display_name => display_name,
140 :pass_crypt => "testtest",
141 :pass_crypt_confirmation => "testtest",
142 :consider_pd => "1" } }
143 assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
149 assert_response :success
150 assert_template "confirmations/confirm"
152 user = User.find_by(:email => "newtester@osm.org")
154 assert_not_predicate user, :active?
156 register_email = ActionMailer::Base.deliveries.first
157 assert_equal register_email.to.first, new_email
158 found_confirmation_url = register_email.parts.first.parts.first.to_s =~ %r{\shttp://test.host(/\S+)\s}
159 assert found_confirmation_url
160 confirmation_url = Regexp.last_match(1)
161 ActionMailer::Base.deliveries.clear
163 post confirmation_url
165 assert_redirected_to welcome_path
168 assert_predicate user, :active?
170 assert_equal user, User.authenticate(:username => new_email, :password => "testtest")
173 # Check that the user can successfully recover their password
174 def test_lost_password_recovery_success
175 # Open the lost password form
176 # Submit the lost password form
178 # Submit the reset password token
179 # Check that the password has changed, and the user can login
182 def test_user_create_redirect
183 new_email = "redirect_tester@osm.org"
184 display_name = "redirect_tester"
185 password = "testtest"
186 # nothing special about this page, just need a protected page to redirect back to.
187 referer = "/traces/mine"
188 assert_difference("User.count") do
189 assert_difference("ActionMailer::Base.deliveries.size", 1) do
190 perform_enqueued_jobs do
192 :params => { :user => { :email => new_email,
193 :display_name => display_name,
194 :pass_crypt => password,
195 :pass_crypt_confirmation => password,
196 :consider_pd => "1" },
197 :referer => referer }
198 assert_response(:redirect)
199 assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
206 register_email = ActionMailer::Base.deliveries.first
208 assert_equal register_email.to.first, new_email
209 # Check that the confirm account url is correct
210 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
211 email_text_parts(register_email).each do |part|
212 assert_match confirm_regex, part.body.to_s
214 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
217 assert_response :success
218 assert_template "confirmations/confirm"
220 ActionMailer::Base.deliveries.clear
222 # Go to the confirmation page
223 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
224 assert_response :success
225 assert_template "confirmations/confirm"
227 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
228 assert_response :redirect
230 assert_response :success
231 assert_template "site/welcome"
234 def test_user_create_openid_success
235 new_email = "newtester-openid@osm.org"
236 display_name = "new_tester-openid"
237 auth_uid = "http://localhost:1123/new.tester"
239 OmniAuth.config.add_mock(:openid,
241 :info => { :email => new_email, :name => display_name })
243 assert_difference("User.count") do
244 assert_difference("ActionMailer::Base.deliveries.size", 1) do
245 perform_enqueued_jobs do
246 post auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
247 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
249 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => new_email,
250 :auth_provider => "openid", :auth_uid => auth_uid
253 :params => { :user => { :email => new_email,
254 :display_name => display_name,
255 :auth_provider => "openid",
256 :auth_uid => "http://localhost:1123/new.tester",
257 :consider_pd => "1" } }
263 assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
265 ActionMailer::Base.deliveries.clear
268 def test_user_create_openid_duplicate_email
269 dup_user = create(:user)
270 display_name = "new_tester-openid"
271 auth_uid = "123454321"
273 OmniAuth.config.add_mock(:openid,
275 :info => { :email => dup_user.email, :name => display_name })
277 post auth_path(:provider => "openid", :origin => "/user/new")
278 assert_redirected_to auth_success_path(:provider => "openid", :origin => "/user/new")
280 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
281 :auth_provider => "openid", :auth_uid => auth_uid
284 assert_response :success
285 assert_template "users/new"
286 assert_select "form > div > input.is-invalid#user_email"
288 ActionMailer::Base.deliveries.clear
291 def test_user_create_openid_failure
292 OmniAuth.config.mock_auth[:openid] = :connection_failed
294 assert_difference("User.count", 0) do
295 assert_difference("ActionMailer::Base.deliveries.size", 0) do
296 perform_enqueued_jobs do
297 post auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
299 assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/user/new")
301 assert_redirected_to "/user/new"
306 ActionMailer::Base.deliveries.clear
309 def test_user_create_openid_redirect
310 auth_uid = "12345654321"
311 new_email = "redirect_tester_openid@osm.org"
312 display_name = "redirect_tester_openid"
314 OmniAuth.config.add_mock(:openid,
316 :info => { :email => new_email, :name => display_name })
318 assert_difference("User.count") do
319 assert_difference("ActionMailer::Base.deliveries.size", 1) do
320 perform_enqueued_jobs do
321 post auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
322 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
324 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => new_email,
325 :auth_provider => "openid", :auth_uid => auth_uid
328 :params => { :user => { :email => new_email,
329 :display_name => display_name,
330 :auth_provider => "openid",
331 :auth_uid => auth_uid,
332 :consider_pd => "1" } }
339 register_email = ActionMailer::Base.deliveries.first
341 assert_equal register_email.to.first, new_email
342 # Check that the confirm account url is correct
343 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
344 email_text_parts(register_email).each do |part|
345 assert_match confirm_regex, part.body.to_s
347 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
350 assert_response :success
351 assert_template "confirmations/confirm"
353 ActionMailer::Base.deliveries.clear
355 # Go to the confirmation page
356 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
357 assert_response :success
358 assert_template "confirmations/confirm"
360 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
361 assert_response :redirect
363 assert_response :success
364 assert_template "site/welcome"
367 def test_user_create_google_success
368 new_email = "newtester-google@osm.org"
369 email_hmac = UsersController.message_hmac(new_email)
370 display_name = "new_tester-google"
371 auth_uid = "123454321"
373 OmniAuth.config.add_mock(:google,
375 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
376 :info => { :email => new_email, :name => display_name })
378 assert_difference("User.count") do
379 assert_no_difference("ActionMailer::Base.deliveries.size") do
380 perform_enqueued_jobs do
381 post auth_path(:provider => "google", :origin => "/user/new")
382 assert_redirected_to auth_success_path(:provider => "google")
384 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
385 :email => new_email, :email_hmac => email_hmac,
386 :auth_provider => "google", :auth_uid => auth_uid
390 :params => { :user => { :email => new_email,
391 :display_name => display_name,
392 :auth_provider => "google",
393 :auth_uid => auth_uid,
394 :consider_pd => "1" },
395 :email_hmac => email_hmac }
396 assert_redirected_to welcome_path
403 assert_response :success
404 assert_template "site/welcome"
406 ActionMailer::Base.deliveries.clear
409 def test_user_create_google_duplicate_email
410 dup_user = create(:user)
411 display_name = "new_tester-google"
412 auth_uid = "123454321"
414 OmniAuth.config.add_mock(:google,
416 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
417 :info => { :email => dup_user.email, :name => display_name })
419 post auth_path(:provider => "google", :origin => "/user/new")
420 assert_redirected_to auth_success_path(:provider => "google")
422 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
423 :email_hmac => UsersController.message_hmac(dup_user.email),
424 :auth_provider => "google", :auth_uid => auth_uid
427 assert_response :success
428 assert_template "users/new"
429 assert_select "form > div > input.is-invalid#user_email"
431 ActionMailer::Base.deliveries.clear
434 def test_user_create_google_failure
435 OmniAuth.config.mock_auth[:google] = :connection_failed
437 assert_difference("User.count", 0) do
438 assert_difference("ActionMailer::Base.deliveries.size", 0) do
439 perform_enqueued_jobs do
440 post auth_path(:provider => "google", :origin => "/user/new")
441 assert_response :redirect
443 assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
445 assert_redirected_to "/user/new"
450 ActionMailer::Base.deliveries.clear
453 def test_user_create_google_redirect
454 orig_email = "redirect_tester_google_orig@google.com"
455 email_hmac = UsersController.message_hmac(orig_email)
456 new_email = "redirect_tester_google@osm.org"
457 display_name = "redirect_tester_google"
458 auth_uid = "123454321"
460 OmniAuth.config.add_mock(:google,
462 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
463 :info => { :email => orig_email, :name => display_name })
465 assert_difference("User.count") do
466 assert_difference("ActionMailer::Base.deliveries.size", 1) do
467 perform_enqueued_jobs do
468 post auth_path(:provider => "google", :origin => "/user/new")
469 assert_redirected_to auth_success_path(:provider => "google")
471 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
472 :email => orig_email, :email_hmac => email_hmac,
473 :auth_provider => "google", :auth_uid => auth_uid
476 :params => { :user => { :email => new_email,
477 :email_hmac => email_hmac,
478 :display_name => display_name,
479 :auth_provider => "google",
480 :auth_uid => auth_uid,
481 :consider_pd => "1" } }
482 assert_response :redirect
489 register_email = ActionMailer::Base.deliveries.first
491 assert_equal register_email.to.first, new_email
492 # Check that the confirm account url is correct
493 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
494 email_text_parts(register_email).each do |part|
495 assert_match confirm_regex, part.body.to_s
497 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
500 assert_response :success
501 assert_template "confirmations/confirm"
503 ActionMailer::Base.deliveries.clear
505 # Go to the confirmation page
506 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
507 assert_response :success
508 assert_template "confirmations/confirm"
510 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
511 assert_response :redirect
513 assert_response :success
514 assert_template "site/welcome"
517 def test_user_create_facebook_success
518 new_email = "newtester-facebook@osm.org"
519 email_hmac = UsersController.message_hmac(new_email)
520 display_name = "new_tester-facebook"
521 auth_uid = "123454321"
523 OmniAuth.config.add_mock(:facebook,
525 :info => { "email" => new_email, :name => display_name })
527 assert_difference("User.count") do
528 assert_no_difference("ActionMailer::Base.deliveries.size") do
529 perform_enqueued_jobs do
530 post auth_path(:provider => "facebook", :origin => "/user/new")
531 assert_redirected_to auth_success_path(:provider => "facebook")
533 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
534 :email => new_email, :email_hmac => email_hmac,
535 :auth_provider => "facebook", :auth_uid => auth_uid
539 :params => { :user => { :email => new_email,
540 :display_name => display_name,
541 :auth_provider => "facebook",
542 :auth_uid => auth_uid,
543 :consider_pd => "1" },
544 :email_hmac => email_hmac }
545 assert_redirected_to welcome_path
552 assert_response :success
553 assert_template "site/welcome"
555 ActionMailer::Base.deliveries.clear
558 def test_user_create_facebook_duplicate_email
559 dup_user = create(:user)
560 display_name = "new_tester-facebook"
561 auth_uid = "123454321"
563 OmniAuth.config.add_mock(:facebook,
565 :info => { :email => dup_user.email, :name => display_name })
567 post auth_path(:provider => "facebook", :origin => "/user/new")
568 assert_redirected_to auth_success_path(:provider => "facebook")
570 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
571 :email_hmac => UsersController.message_hmac(dup_user.email),
572 :auth_provider => "facebook", :auth_uid => auth_uid
575 assert_response :success
576 assert_template "users/new"
577 assert_select "form > div > input.is-invalid#user_email"
579 ActionMailer::Base.deliveries.clear
582 def test_user_create_facebook_failure
583 OmniAuth.config.mock_auth[:facebook] = :connection_failed
585 assert_difference("User.count", 0) do
586 assert_difference("ActionMailer::Base.deliveries.size", 0) do
587 perform_enqueued_jobs do
588 post auth_path(:provider => "facebook", :origin => "/user/new")
589 assert_response :redirect
591 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
593 assert_redirected_to "/user/new"
598 ActionMailer::Base.deliveries.clear
601 def test_user_create_facebook_redirect
602 orig_email = "redirect_tester_facebook_orig@osm.org"
603 email_hmac = UsersController.message_hmac(orig_email)
604 new_email = "redirect_tester_facebook@osm.org"
605 display_name = "redirect_tester_facebook"
606 auth_uid = "123454321"
608 OmniAuth.config.add_mock(:facebook,
610 :info => { :email => orig_email, :name => display_name })
612 # nothing special about this page, just need a protected page to redirect back to.
613 assert_difference("User.count") do
614 assert_difference("ActionMailer::Base.deliveries.size", 1) do
615 perform_enqueued_jobs do
616 post auth_path(:provider => "facebook", :origin => "/user/new")
617 assert_redirected_to auth_success_path(:provider => "facebook")
619 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
620 :email => orig_email, :email_hmac => email_hmac,
621 :auth_provider => "facebook", :auth_uid => auth_uid
625 :params => { :user => { :email => new_email,
626 :email_hmac => email_hmac,
627 :display_name => display_name,
628 :auth_provider => "facebook",
629 :auth_uid => auth_uid,
630 :consider_pd => "1" } }
631 assert_response :redirect
638 register_email = ActionMailer::Base.deliveries.first
640 assert_equal register_email.to.first, new_email
641 # Check that the confirm account url is correct
642 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
643 email_text_parts(register_email).each do |part|
644 assert_match confirm_regex, part.body.to_s
646 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
649 assert_response :success
650 assert_template "confirmations/confirm"
652 ActionMailer::Base.deliveries.clear
654 # Go to the confirmation page
655 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
656 assert_response :success
657 assert_template "confirmations/confirm"
659 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
660 assert_response :redirect
662 assert_response :success
663 assert_template "site/welcome"
666 def test_user_create_microsoft_success
667 new_email = "newtester-microsoft@osm.org"
668 email_hmac = UsersController.message_hmac(new_email)
669 display_name = "new_tester-microsoft"
670 auth_uid = "123454321"
672 OmniAuth.config.add_mock(:microsoft,
674 :info => { "email" => new_email, :name => display_name })
676 assert_difference("User.count") do
677 assert_difference("ActionMailer::Base.deliveries.size", 0) do
678 perform_enqueued_jobs do
679 post auth_path(:provider => "microsoft", :origin => "/user/new")
680 assert_redirected_to auth_success_path(:provider => "microsoft")
682 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
683 :email => new_email, :email_hmac => email_hmac,
684 :auth_provider => "microsoft", :auth_uid => auth_uid
687 :params => { :user => { :email => new_email,
688 :display_name => display_name,
689 :auth_provider => "microsoft",
690 :auth_uid => auth_uid,
691 :consider_pd => "1" },
692 :email_hmac => email_hmac }
693 assert_redirected_to welcome_path
700 assert_response :success
701 assert_template "site/welcome"
703 ActionMailer::Base.deliveries.clear
706 def test_user_create_microsoft_duplicate_email
707 dup_user = create(:user)
708 display_name = "new_tester-microsoft"
709 auth_uid = "123454321"
711 OmniAuth.config.add_mock(:microsoft,
713 :info => { :email => dup_user.email, :name => display_name })
715 post auth_path(:provider => "microsoft", :origin => "/user/new")
716 assert_redirected_to auth_success_path(:provider => "microsoft")
718 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
719 :email_hmac => UsersController.message_hmac(dup_user.email),
720 :auth_provider => "microsoft", :auth_uid => auth_uid
723 assert_response :success
724 assert_template "users/new"
725 assert_select "form > div > input.is-invalid#user_email"
727 ActionMailer::Base.deliveries.clear
730 def test_user_create_microsoft_failure
731 OmniAuth.config.mock_auth[:microsoft] = :connection_failed
733 assert_difference("User.count", 0) do
734 assert_difference("ActionMailer::Base.deliveries.size", 0) do
735 perform_enqueued_jobs do
736 post auth_path(:provider => "microsoft", :origin => "/user/new")
737 assert_response :redirect
739 assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "connection_failed", :origin => "/user/new")
741 assert_redirected_to "/user/new"
746 ActionMailer::Base.deliveries.clear
749 def test_user_create_microsoft_redirect
750 orig_email = "redirect_tester_microsoft_orig@osm.org"
751 email_hmac = UsersController.message_hmac(orig_email)
752 new_email = "redirect_tester_microsoft@osm.org"
753 display_name = "redirect_tester_microsoft"
754 auth_uid = "123454321"
756 OmniAuth.config.add_mock(:microsoft,
758 :info => { :email => orig_email, :name => display_name })
760 assert_difference("User.count") do
761 assert_difference("ActionMailer::Base.deliveries.size", 1) do
762 perform_enqueued_jobs do
763 post auth_path(:provider => "microsoft", :origin => "/user/new")
764 assert_redirected_to auth_success_path(:provider => "microsoft")
766 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
767 :email => orig_email, :email_hmac => email_hmac,
768 :auth_provider => "microsoft", :auth_uid => auth_uid
772 :params => { :user => { :email => new_email,
773 :email_hmac => email_hmac,
774 :display_name => display_name,
775 :auth_provider => "microsoft",
776 :auth_uid => auth_uid,
777 :consider_pd => "1" } }
778 assert_response :redirect
785 register_email = ActionMailer::Base.deliveries.first
787 assert_equal register_email.to.first, new_email
788 # Check that the confirm account url is correct
789 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
790 email_text_parts(register_email).each do |part|
791 assert_match confirm_regex, part.body.to_s
793 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
796 assert_response :success
797 assert_template "confirmations/confirm"
799 ActionMailer::Base.deliveries.clear
801 # Go to the confirmation page
802 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
803 assert_response :success
804 assert_template "confirmations/confirm"
806 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
807 assert_response :redirect
809 assert_response :success
810 assert_template "site/welcome"
813 def test_user_create_github_success
814 new_email = "newtester-github@osm.org"
815 email_hmac = UsersController.message_hmac(new_email)
816 display_name = "new_tester-github"
817 password = "testtest"
818 auth_uid = "123454321"
820 OmniAuth.config.add_mock(:github,
822 :info => { "email" => new_email, :name => display_name })
824 assert_difference("User.count") do
825 assert_no_difference("ActionMailer::Base.deliveries.size") do
826 perform_enqueued_jobs do
827 post auth_path(:provider => "github", :origin => "/user/new")
828 assert_redirected_to auth_success_path(:provider => "github")
830 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
831 :email => new_email, :email_hmac => email_hmac,
832 :auth_provider => "github", :auth_uid => auth_uid
836 :params => { :user => { :email => new_email,
837 :display_name => display_name,
838 :auth_provider => "github",
839 :auth_uid => "123454321",
840 :pass_crypt => password,
841 :pass_crypt_confirmation => password },
844 :email_hmac => email_hmac }
845 assert_redirected_to welcome_path
852 assert_response :success
853 assert_template "site/welcome"
855 ActionMailer::Base.deliveries.clear
858 def test_user_create_github_duplicate_email
859 dup_user = create(:user)
860 display_name = "new_tester-github"
861 auth_uid = "123454321"
863 OmniAuth.config.add_mock(:github,
865 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
866 :info => { :email => dup_user.email, :name => display_name })
868 post auth_path(:provider => "github", :origin => "/user/new")
869 assert_redirected_to auth_success_path(:provider => "github")
871 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
872 :email => dup_user.email, :email_hmac => UsersController.message_hmac(dup_user.email),
873 :auth_provider => "github", :auth_uid => auth_uid
876 assert_response :success
877 assert_template "users/new"
878 assert_select "form > div > input.is-invalid#user_email"
880 ActionMailer::Base.deliveries.clear
883 def test_user_create_github_failure
884 OmniAuth.config.mock_auth[:github] = :connection_failed
886 assert_difference("User.count", 0) do
887 assert_difference("ActionMailer::Base.deliveries.size", 0) do
888 perform_enqueued_jobs do
889 post auth_path(:provider => "github", :origin => "/user/new")
891 assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/user/new")
893 assert_redirected_to "/user/new"
898 ActionMailer::Base.deliveries.clear
901 def test_user_create_github_redirect
902 orig_email = "redirect_tester_github_orig@osm.org"
903 email_hmac = UsersController.message_hmac(orig_email)
904 new_email = "redirect_tester_github@osm.org"
905 display_name = "redirect_tester_github"
906 auth_uid = "123454321"
908 OmniAuth.config.add_mock(:github,
910 :info => { :email => orig_email, :name => display_name })
912 assert_difference("User.count") do
913 assert_difference("ActionMailer::Base.deliveries.size", 1) do
914 perform_enqueued_jobs do
915 post auth_path(:provider => "github", :origin => "/user/new")
916 assert_redirected_to auth_success_path(:provider => "github")
918 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
919 :email => orig_email, :email_hmac => email_hmac,
920 :auth_provider => "github", :auth_uid => auth_uid
923 :params => { :user => { :email => new_email,
924 :email_hmac => email_hmac,
925 :display_name => display_name,
926 :auth_provider => "github",
927 :auth_uid => auth_uid,
928 :consider_pd => "1" } }
929 assert_response :redirect
936 register_email = ActionMailer::Base.deliveries.first
938 assert_equal register_email.to.first, new_email
939 # Check that the confirm account url is correct
940 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
941 email_text_parts(register_email).each do |part|
942 assert_match confirm_regex, part.body.to_s
944 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
947 assert_response :success
948 assert_template "confirmations/confirm"
950 ActionMailer::Base.deliveries.clear
952 # Go to the confirmation page
953 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
954 assert_response :success
955 assert_template "confirmations/confirm"
957 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
958 assert_response :redirect
960 assert_response :success
961 assert_template "site/welcome"
964 def test_user_create_wikipedia_success
965 new_email = "newtester-wikipedia@osm.org"
966 email_hmac = UsersController.message_hmac(new_email)
967 display_name = "new_tester-wikipedia"
968 password = "testtest"
969 auth_uid = "123454321"
971 OmniAuth.config.add_mock(:wikipedia,
973 :info => { :email => new_email, :name => display_name })
975 assert_difference("User.count") do
976 assert_no_difference("ActionMailer::Base.deliveries.size") do
977 perform_enqueued_jobs do
978 post auth_path(:provider => "wikipedia", :origin => "/user/new")
979 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
981 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
982 :email => new_email, :email_hmac => email_hmac,
983 :auth_provider => "wikipedia", :auth_uid => auth_uid
986 :params => { :user => { :email => new_email,
987 :display_name => display_name,
988 :auth_provider => "wikipedia",
989 :auth_uid => "123454321",
990 :pass_crypt => password,
991 :pass_crypt_confirmation => password },
994 :email_hmac => email_hmac }
995 assert_redirected_to welcome_path
1002 assert_response :success
1003 assert_template "site/welcome"
1006 def test_user_create_wikipedia_duplicate_email
1007 dup_user = create(:user)
1008 display_name = "new_tester-wikipedia"
1009 auth_uid = "123454321"
1011 OmniAuth.config.add_mock(:wikipedia,
1013 :info => { "email" => dup_user.email, :name => display_name })
1015 post auth_path(:provider => "wikipedia", :origin => "/user/new")
1016 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
1018 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
1019 :email => dup_user.email, :email_hmac => UsersController.message_hmac(dup_user.email),
1020 :auth_provider => "wikipedia", :auth_uid => auth_uid
1023 assert_response :success
1024 assert_template "users/new"
1025 assert_select "form > div > input.is-invalid#user_email"
1027 ActionMailer::Base.deliveries.clear
1030 def test_user_create_wikipedia_failure
1031 OmniAuth.config.mock_auth[:wikipedia] = :connection_failed
1033 assert_difference("User.count", 0) do
1034 assert_difference("ActionMailer::Base.deliveries.size", 0) do
1035 perform_enqueued_jobs do
1036 post auth_path(:provider => "wikipedia", :origin => "/user/new")
1037 assert_response :redirect
1039 assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/user/new")
1041 assert_redirected_to "/user/new"
1046 ActionMailer::Base.deliveries.clear
1049 def test_user_create_wikipedia_redirect
1050 orig_email = "redirect_tester_wikipedia_orig@osm.org"
1051 email_hmac = UsersController.message_hmac(orig_email)
1052 new_email = "redirect_tester_wikipedia@osm.org"
1053 display_name = "redirect_tester_wikipedia"
1054 auth_uid = "123454321"
1056 OmniAuth.config.add_mock(:wikipedia,
1058 :info => { :email => orig_email, :name => display_name })
1060 # nothing special about this page, just need a protected page to redirect back to.
1061 assert_difference("User.count") do
1062 assert_difference("ActionMailer::Base.deliveries.size", 1) do
1063 perform_enqueued_jobs do
1064 post auth_path(:provider => "wikipedia", :origin => "/user/new")
1065 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
1067 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
1068 :email => orig_email, :email_hmac => email_hmac,
1069 :auth_provider => "wikipedia", :auth_uid => auth_uid
1073 :params => { :user => { :email => new_email,
1074 :email_hmac => email_hmac,
1075 :display_name => display_name,
1076 :auth_provider => "wikipedia",
1077 :auth_uid => auth_uid,
1078 :consider_pd => "1" } }
1079 assert_response :redirect
1086 register_email = ActionMailer::Base.deliveries.first
1088 assert_equal register_email.to.first, new_email
1089 # Check that the confirm account url is correct
1090 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
1091 email_text_parts(register_email).each do |part|
1092 assert_match confirm_regex, part.body.to_s
1094 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
1097 assert_response :success
1098 assert_template "confirmations/confirm"
1100 ActionMailer::Base.deliveries.clear
1102 # Go to the confirmation page
1103 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
1104 assert_response :success
1105 assert_template "confirmations/confirm"
1107 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
1108 assert_response :redirect
1110 assert_response :success
1111 assert_template "site/welcome"