1 # frozen_string_literal: true
5 class UserCreationTest < ActionDispatch::IntegrationTest
7 OmniAuth.config.test_mode = true
9 stub_request(:get, /.*gravatar.com.*d=404/).to_return(:status => 404)
13 OmniAuth.config.mock_auth[:google] = nil
14 OmniAuth.config.mock_auth[:apple] = nil
15 OmniAuth.config.mock_auth[:facebook] = nil
16 OmniAuth.config.mock_auth[:microsoft] = nil
17 OmniAuth.config.mock_auth[:github] = nil
18 OmniAuth.config.mock_auth[:wikipedia] = nil
19 OmniAuth.config.test_mode = false
22 def test_create_user_form
25 assert_response :success
26 assert_template "users/new"
29 def test_user_create_submit_duplicate_email
30 dup_email = create(:user).email
31 display_name = "new_tester"
32 assert_difference("User.count", 0) do
33 assert_difference("ActionMailer::Base.deliveries.size", 0) do
34 perform_enqueued_jobs do
36 :params => { :user => { :email => dup_email,
37 :display_name => display_name,
38 :pass_crypt => "testtest",
39 :pass_crypt_confirmation => "testtest" } }
43 assert_response :success
44 assert_template "users/new"
46 assert_select "form > div > input.is-invalid#user_email"
49 def test_user_create_association_submit_duplicate_email
50 dup_email = create(:user).email
51 display_name = "new_tester"
52 assert_difference("User.count", 0) do
53 assert_no_difference("ActionMailer::Base.deliveries.size") do
54 perform_enqueued_jobs do
56 :params => { :user => { :email => dup_email,
57 :display_name => display_name,
58 :pass_crypt => "testtest",
59 :pass_crypt_confirmation => "testtest",
60 :auth_provider => "google",
61 :auth_uid => "123454321" } }
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" } }
104 assert_response :success
105 assert_template "users/new"
106 assert_select "form > div > div > div > input.is-invalid#user_pass_crypt_confirmation"
109 def test_user_create_association_submit_duplicate_username
110 dup_display_name = create(:user).display_name
112 assert_difference("User.count", 0) do
113 assert_no_difference("ActionMailer::Base.deliveries.size") do
114 perform_enqueued_jobs do
116 :params => { :user => { :email => email,
117 :display_name => dup_display_name,
118 :auth_provider => "google",
119 :auth_uid => "123454321" } }
123 assert_response :success
124 assert_template "users/new"
125 assert_select "form > div > input.is-invalid#user_display_name"
128 def test_user_create_success
129 new_email = "newtester@osm.org"
130 display_name = "new_tester"
132 assert_difference("User.count", 1) do
133 assert_difference("ActionMailer::Base.deliveries.size", 1) do
134 perform_enqueued_jobs do
136 :params => { :user => { :email => new_email,
137 :display_name => display_name,
138 :pass_crypt => "testtest",
139 :pass_crypt_confirmation => "testtest" } }
140 assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
146 assert_response :success
147 assert_template "confirmations/confirm"
149 user = User.find_by(:email => "newtester@osm.org")
151 assert_not_predicate user, :active?
153 register_email = ActionMailer::Base.deliveries.first
154 assert_equal register_email.to.first, new_email
155 found_confirmation_url = register_email.parts.first.parts.first.to_s =~ %r{\shttp://test.host(/\S+)\s}
156 assert found_confirmation_url
157 confirmation_url = Regexp.last_match(1)
159 post confirmation_url
161 assert_redirected_to welcome_path
164 assert_predicate user, :active?
166 assert_equal user, User.authenticate(:username => new_email, :password => "testtest")
169 # Check that the user can successfully recover their password
170 # def test_lost_password_recovery_success
171 # Open the lost password form
172 # Submit the lost password form
174 # Submit the reset password token
175 # Check that the password has changed, and the user can login
178 def test_user_create_redirect
179 new_email = "redirect_tester@osm.org"
180 display_name = "redirect_tester"
181 password = "testtest"
182 # nothing special about this page, just need a protected page to redirect back to.
183 referer = "/traces/mine"
184 assert_difference("User.count") do
185 assert_difference("ActionMailer::Base.deliveries.size", 1) do
186 perform_enqueued_jobs do
188 :params => { :user => { :email => new_email,
189 :display_name => display_name,
190 :pass_crypt => password,
191 :pass_crypt_confirmation => password },
192 :referer => referer }
193 assert_response(:redirect)
194 assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
201 register_email = ActionMailer::Base.deliveries.first
203 assert_equal register_email.to.first, new_email
204 # Check that the confirm account url is correct
205 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
206 email_text_parts(register_email).each do |part|
207 assert_match confirm_regex, part.body.to_s
209 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
212 assert_response :success
213 assert_template "confirmations/confirm"
215 # Go to the confirmation page
216 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
217 assert_response :success
218 assert_template "confirmations/confirm"
220 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
221 assert_response :redirect
223 assert_response :success
224 assert_template "site/welcome"
227 def test_user_create_google_success
228 new_email = "newtester-google@osm.org"
229 email_hmac = UsersController.message_hmac(new_email)
230 display_name = "new_tester-google"
231 auth_uid = "123454321"
233 OmniAuth.config.add_mock(:google,
235 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
236 :info => { :email => new_email, :name => display_name })
238 assert_difference("User.count") do
239 assert_no_difference("ActionMailer::Base.deliveries.size") do
240 perform_enqueued_jobs do
241 post auth_path(:provider => "google", :origin => "/user/new")
242 assert_redirected_to auth_success_path(:provider => "google")
244 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
245 :email => new_email, :email_hmac => email_hmac,
246 :auth_provider => "google", :auth_uid => auth_uid
250 :params => { :user => { :email => new_email,
251 :display_name => display_name,
252 :auth_provider => "google",
253 :auth_uid => auth_uid },
254 :email_hmac => email_hmac }
255 assert_redirected_to welcome_path
262 assert_response :success
263 assert_template "site/welcome"
266 def test_user_create_google_duplicate_email
267 dup_user = create(:user)
268 display_name = "new_tester-google"
269 auth_uid = "123454321"
271 OmniAuth.config.add_mock(:google,
273 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
274 :info => { :email => dup_user.email, :name => display_name })
276 post auth_path(:provider => "google", :origin => "/user/new")
277 assert_redirected_to auth_success_path(:provider => "google")
279 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
280 :email_hmac => UsersController.message_hmac(dup_user.email),
281 :auth_provider => "google", :auth_uid => auth_uid
284 assert_response :success
285 assert_template "users/new"
286 assert_select "form > div > input.is-invalid#user_email"
289 def test_user_create_google_failure
290 OmniAuth.config.mock_auth[:google] = :connection_failed
292 assert_difference("User.count", 0) do
293 assert_difference("ActionMailer::Base.deliveries.size", 0) do
294 perform_enqueued_jobs do
295 post auth_path(:provider => "google", :origin => "/user/new")
296 assert_response :redirect
298 assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
300 assert_redirected_to "/user/new"
306 def test_user_create_google_redirect
307 orig_email = "redirect_tester_google_orig@google.com"
308 email_hmac = UsersController.message_hmac(orig_email)
309 new_email = "redirect_tester_google@osm.org"
310 display_name = "redirect_tester_google"
311 auth_uid = "123454321"
313 OmniAuth.config.add_mock(:google,
315 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
316 :info => { :email => orig_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 => "google", :origin => "/user/new")
322 assert_redirected_to auth_success_path(:provider => "google")
324 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
325 :email => orig_email, :email_hmac => email_hmac,
326 :auth_provider => "google", :auth_uid => auth_uid
329 :params => { :user => { :email => new_email,
330 :email_hmac => email_hmac,
331 :display_name => display_name,
332 :auth_provider => "google",
333 :auth_uid => auth_uid } }
334 assert_response :redirect
341 register_email = ActionMailer::Base.deliveries.first
343 assert_equal register_email.to.first, new_email
344 # Check that the confirm account url is correct
345 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
346 email_text_parts(register_email).each do |part|
347 assert_match confirm_regex, part.body.to_s
349 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
352 assert_response :success
353 assert_template "confirmations/confirm"
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_apple_success
368 new_email = "newtester-apple@osm.org"
369 email_hmac = UsersController.message_hmac(new_email)
370 display_name = "new_tester-apple"
371 auth_uid = "123454321"
373 OmniAuth.config.add_mock(:apple,
375 :info => { :email => new_email, :name => display_name })
377 assert_difference("User.count") do
378 assert_no_difference("ActionMailer::Base.deliveries.size") do
379 perform_enqueued_jobs do
380 post auth_path(:provider => "apple", :origin => "/user/new")
381 assert_redirected_to auth_success_path(:provider => "apple")
383 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
384 :email => new_email, :email_hmac => email_hmac,
385 :auth_provider => "apple", :auth_uid => auth_uid
387 :params => { :user => { :email => new_email,
388 :display_name => display_name,
389 :auth_provider => "apple",
390 :auth_uid => auth_uid },
391 :email_hmac => email_hmac }
392 assert_redirected_to welcome_path
399 assert_response :success
400 assert_template "site/welcome"
402 ActionMailer::Base.deliveries.clear
405 def test_user_create_apple_duplicate_email
406 dup_user = create(:user)
407 display_name = "new_tester-apple"
408 auth_uid = "123454321"
410 OmniAuth.config.add_mock(:apple,
412 :info => { :email => dup_user.email, :name => display_name })
414 post auth_path(:provider => "apple", :origin => "/user/new")
415 assert_redirected_to auth_success_path(:provider => "apple")
417 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
418 :email_hmac => UsersController.message_hmac(dup_user.email),
419 :auth_provider => "apple", :auth_uid => auth_uid
422 assert_response :success
423 assert_template "users/new"
424 assert_select "form > div > input.is-invalid#user_email"
426 ActionMailer::Base.deliveries.clear
429 def test_user_create_apple_failure
430 OmniAuth.config.mock_auth[:apple] = :connection_failed
432 assert_difference("User.count", 0) do
433 assert_difference("ActionMailer::Base.deliveries.size", 0) do
434 perform_enqueued_jobs do
435 post auth_path(:provider => "apple", :origin => "/user/new")
436 assert_response :redirect
438 assert_redirected_to auth_failure_path(:strategy => "apple", :message => "connection_failed", :origin => "/user/new")
440 assert_redirected_to "/user/new"
445 ActionMailer::Base.deliveries.clear
448 def test_user_create_apple_redirect
449 orig_email = "redirect_tester_apple_orig@apple.com"
450 email_hmac = UsersController.message_hmac(orig_email)
451 new_email = "redirect_tester_apple@osm.org"
452 display_name = "redirect_tester_apple"
453 auth_uid = "123454321"
455 OmniAuth.config.add_mock(:apple,
457 :info => { :email => orig_email, :name => display_name })
459 assert_difference("User.count") do
460 assert_difference("ActionMailer::Base.deliveries.size", 1) do
461 perform_enqueued_jobs do
462 post auth_path(:provider => "apple", :origin => "/user/new")
463 assert_redirected_to auth_success_path(:provider => "apple")
465 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
466 :email => orig_email, :email_hmac => email_hmac,
467 :auth_provider => "apple", :auth_uid => auth_uid
470 :params => { :user => { :email => new_email,
471 :email_hmac => email_hmac,
472 :display_name => display_name,
473 :auth_provider => "apple",
474 :auth_uid => auth_uid } }
475 assert_response :redirect
482 register_email = ActionMailer::Base.deliveries.first
484 assert_equal register_email.to.first, new_email
485 # Check that the confirm account url is correct
486 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
487 email_text_parts(register_email).each do |part|
488 assert_match confirm_regex, part.body.to_s
490 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
493 assert_response :success
494 assert_template "confirmations/confirm"
496 ActionMailer::Base.deliveries.clear
498 # Go to the confirmation page
499 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
500 assert_response :success
501 assert_template "confirmations/confirm"
503 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
504 assert_response :redirect
506 assert_response :success
507 assert_template "site/welcome"
510 def test_user_create_facebook_success
511 new_email = "newtester-facebook@osm.org"
512 email_hmac = UsersController.message_hmac(new_email)
513 display_name = "new_tester-facebook"
514 auth_uid = "123454321"
516 OmniAuth.config.add_mock(:facebook,
518 :info => { "email" => new_email, :name => display_name })
520 assert_difference("User.count") do
521 assert_no_difference("ActionMailer::Base.deliveries.size") do
522 perform_enqueued_jobs do
523 post auth_path(:provider => "facebook", :origin => "/user/new")
524 assert_redirected_to auth_success_path(:provider => "facebook")
526 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
527 :email => new_email, :email_hmac => email_hmac,
528 :auth_provider => "facebook", :auth_uid => auth_uid
532 :params => { :user => { :email => new_email,
533 :display_name => display_name,
534 :auth_provider => "facebook",
535 :auth_uid => auth_uid },
536 :email_hmac => email_hmac }
537 assert_redirected_to welcome_path
544 assert_response :success
545 assert_template "site/welcome"
548 def test_user_create_facebook_duplicate_email
549 dup_user = create(:user)
550 display_name = "new_tester-facebook"
551 auth_uid = "123454321"
553 OmniAuth.config.add_mock(:facebook,
555 :info => { :email => dup_user.email, :name => display_name })
557 post auth_path(:provider => "facebook", :origin => "/user/new")
558 assert_redirected_to auth_success_path(:provider => "facebook")
560 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
561 :email_hmac => UsersController.message_hmac(dup_user.email),
562 :auth_provider => "facebook", :auth_uid => auth_uid
565 assert_response :success
566 assert_template "users/new"
567 assert_select "form > div > input.is-invalid#user_email"
570 def test_user_create_facebook_failure
571 OmniAuth.config.mock_auth[:facebook] = :connection_failed
573 assert_difference("User.count", 0) do
574 assert_difference("ActionMailer::Base.deliveries.size", 0) do
575 perform_enqueued_jobs do
576 post auth_path(:provider => "facebook", :origin => "/user/new")
577 assert_response :redirect
579 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
581 assert_redirected_to "/user/new"
587 def test_user_create_facebook_redirect
588 orig_email = "redirect_tester_facebook_orig@osm.org"
589 email_hmac = UsersController.message_hmac(orig_email)
590 new_email = "redirect_tester_facebook@osm.org"
591 display_name = "redirect_tester_facebook"
592 auth_uid = "123454321"
594 OmniAuth.config.add_mock(:facebook,
596 :info => { :email => orig_email, :name => display_name })
598 # nothing special about this page, just need a protected page to redirect back to.
599 assert_difference("User.count") do
600 assert_difference("ActionMailer::Base.deliveries.size", 1) do
601 perform_enqueued_jobs do
602 post auth_path(:provider => "facebook", :origin => "/user/new")
603 assert_redirected_to auth_success_path(:provider => "facebook")
605 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
606 :email => orig_email, :email_hmac => email_hmac,
607 :auth_provider => "facebook", :auth_uid => auth_uid
611 :params => { :user => { :email => new_email,
612 :email_hmac => email_hmac,
613 :display_name => display_name,
614 :auth_provider => "facebook",
615 :auth_uid => auth_uid } }
616 assert_response :redirect
623 register_email = ActionMailer::Base.deliveries.first
625 assert_equal register_email.to.first, new_email
626 # Check that the confirm account url is correct
627 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
628 email_text_parts(register_email).each do |part|
629 assert_match confirm_regex, part.body.to_s
631 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
634 assert_response :success
635 assert_template "confirmations/confirm"
637 # Go to the confirmation page
638 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
639 assert_response :success
640 assert_template "confirmations/confirm"
642 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
643 assert_response :redirect
645 assert_response :success
646 assert_template "site/welcome"
649 def test_user_create_microsoft_success
650 new_email = "newtester-microsoft@osm.org"
651 email_hmac = UsersController.message_hmac(new_email)
652 display_name = "new_tester-microsoft"
653 auth_uid = "123454321"
655 OmniAuth.config.add_mock(:microsoft,
657 :info => { "email" => new_email, :name => display_name })
659 assert_difference("User.count") do
660 assert_difference("ActionMailer::Base.deliveries.size", 0) do
661 perform_enqueued_jobs do
662 post auth_path(:provider => "microsoft", :origin => "/user/new")
663 assert_redirected_to auth_success_path(:provider => "microsoft")
665 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
666 :email => new_email, :email_hmac => email_hmac,
667 :auth_provider => "microsoft", :auth_uid => auth_uid
670 :params => { :user => { :email => new_email,
671 :display_name => display_name,
672 :auth_provider => "microsoft",
673 :auth_uid => auth_uid },
674 :email_hmac => email_hmac }
675 assert_redirected_to welcome_path
682 assert_response :success
683 assert_template "site/welcome"
686 def test_user_create_microsoft_duplicate_email
687 dup_user = create(:user)
688 display_name = "new_tester-microsoft"
689 auth_uid = "123454321"
691 OmniAuth.config.add_mock(:microsoft,
693 :info => { :email => dup_user.email, :name => display_name })
695 post auth_path(:provider => "microsoft", :origin => "/user/new")
696 assert_redirected_to auth_success_path(:provider => "microsoft")
698 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
699 :email_hmac => UsersController.message_hmac(dup_user.email),
700 :auth_provider => "microsoft", :auth_uid => auth_uid
703 assert_response :success
704 assert_template "users/new"
705 assert_select "form > div > input.is-invalid#user_email"
708 def test_user_create_microsoft_failure
709 OmniAuth.config.mock_auth[:microsoft] = :connection_failed
711 assert_difference("User.count", 0) do
712 assert_difference("ActionMailer::Base.deliveries.size", 0) do
713 perform_enqueued_jobs do
714 post auth_path(:provider => "microsoft", :origin => "/user/new")
715 assert_response :redirect
717 assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "connection_failed", :origin => "/user/new")
719 assert_redirected_to "/user/new"
725 def test_user_create_microsoft_redirect
726 orig_email = "redirect_tester_microsoft_orig@osm.org"
727 email_hmac = UsersController.message_hmac(orig_email)
728 new_email = "redirect_tester_microsoft@osm.org"
729 display_name = "redirect_tester_microsoft"
730 auth_uid = "123454321"
732 OmniAuth.config.add_mock(:microsoft,
734 :info => { :email => orig_email, :name => display_name })
736 assert_difference("User.count") do
737 assert_difference("ActionMailer::Base.deliveries.size", 1) do
738 perform_enqueued_jobs do
739 post auth_path(:provider => "microsoft", :origin => "/user/new")
740 assert_redirected_to auth_success_path(:provider => "microsoft")
742 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
743 :email => orig_email, :email_hmac => email_hmac,
744 :auth_provider => "microsoft", :auth_uid => auth_uid
748 :params => { :user => { :email => new_email,
749 :email_hmac => email_hmac,
750 :display_name => display_name,
751 :auth_provider => "microsoft",
752 :auth_uid => auth_uid } }
753 assert_response :redirect
760 register_email = ActionMailer::Base.deliveries.first
762 assert_equal register_email.to.first, new_email
763 # Check that the confirm account url is correct
764 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
765 email_text_parts(register_email).each do |part|
766 assert_match confirm_regex, part.body.to_s
768 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
771 assert_response :success
772 assert_template "confirmations/confirm"
774 # Go to the confirmation page
775 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
776 assert_response :success
777 assert_template "confirmations/confirm"
779 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
780 assert_response :redirect
782 assert_response :success
783 assert_template "site/welcome"
786 def test_user_create_github_success
787 new_email = "newtester-github@osm.org"
788 email_hmac = UsersController.message_hmac(new_email)
789 display_name = "new_tester-github"
790 password = "testtest"
791 auth_uid = "123454321"
793 OmniAuth.config.add_mock(:github,
795 :info => { "email" => new_email, :name => display_name })
797 assert_difference("User.count") do
798 assert_no_difference("ActionMailer::Base.deliveries.size") do
799 perform_enqueued_jobs do
800 post auth_path(:provider => "github", :origin => "/user/new")
801 assert_redirected_to auth_success_path(:provider => "github")
803 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
804 :email => new_email, :email_hmac => email_hmac,
805 :auth_provider => "github", :auth_uid => auth_uid
809 :params => { :user => { :email => new_email,
810 :display_name => display_name,
811 :auth_provider => "github",
812 :auth_uid => "123454321",
813 :pass_crypt => password,
814 :pass_crypt_confirmation => password },
817 :email_hmac => email_hmac }
818 assert_redirected_to welcome_path
825 assert_response :success
826 assert_template "site/welcome"
829 def test_user_create_github_duplicate_email
830 dup_user = create(:user)
831 display_name = "new_tester-github"
832 auth_uid = "123454321"
834 OmniAuth.config.add_mock(:github,
836 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
837 :info => { :email => dup_user.email, :name => display_name })
839 post auth_path(:provider => "github", :origin => "/user/new")
840 assert_redirected_to auth_success_path(:provider => "github")
842 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
843 :email => dup_user.email, :email_hmac => UsersController.message_hmac(dup_user.email),
844 :auth_provider => "github", :auth_uid => auth_uid
847 assert_response :success
848 assert_template "users/new"
849 assert_select "form > div > input.is-invalid#user_email"
852 def test_user_create_github_failure
853 OmniAuth.config.mock_auth[:github] = :connection_failed
855 assert_difference("User.count", 0) do
856 assert_difference("ActionMailer::Base.deliveries.size", 0) do
857 perform_enqueued_jobs do
858 post auth_path(:provider => "github", :origin => "/user/new")
860 assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/user/new")
862 assert_redirected_to "/user/new"
868 def test_user_create_github_redirect
869 orig_email = "redirect_tester_github_orig@osm.org"
870 email_hmac = UsersController.message_hmac(orig_email)
871 new_email = "redirect_tester_github@osm.org"
872 display_name = "redirect_tester_github"
873 auth_uid = "123454321"
875 OmniAuth.config.add_mock(:github,
877 :info => { :email => orig_email, :name => display_name })
879 assert_difference("User.count") do
880 assert_difference("ActionMailer::Base.deliveries.size", 1) do
881 perform_enqueued_jobs do
882 post auth_path(:provider => "github", :origin => "/user/new")
883 assert_redirected_to auth_success_path(:provider => "github")
885 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
886 :email => orig_email, :email_hmac => email_hmac,
887 :auth_provider => "github", :auth_uid => auth_uid
890 :params => { :user => { :email => new_email,
891 :email_hmac => email_hmac,
892 :display_name => display_name,
893 :auth_provider => "github",
894 :auth_uid => auth_uid } }
895 assert_response :redirect
902 register_email = ActionMailer::Base.deliveries.first
904 assert_equal register_email.to.first, new_email
905 # Check that the confirm account url is correct
906 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
907 email_text_parts(register_email).each do |part|
908 assert_match confirm_regex, part.body.to_s
910 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
913 assert_response :success
914 assert_template "confirmations/confirm"
916 # Go to the confirmation page
917 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
918 assert_response :success
919 assert_template "confirmations/confirm"
921 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
922 assert_response :redirect
924 assert_response :success
925 assert_template "site/welcome"
928 def test_user_create_wikipedia_success
929 new_email = "newtester-wikipedia@osm.org"
930 email_hmac = UsersController.message_hmac(new_email)
931 display_name = "new_tester-wikipedia"
932 password = "testtest"
933 auth_uid = "123454321"
935 OmniAuth.config.add_mock(:wikipedia,
937 :info => { :email => new_email, :name => display_name })
939 assert_difference("User.count") do
940 assert_no_difference("ActionMailer::Base.deliveries.size") do
941 perform_enqueued_jobs do
942 post auth_path(:provider => "wikipedia", :origin => "/user/new")
943 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
945 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
946 :email => new_email, :email_hmac => email_hmac,
947 :auth_provider => "wikipedia", :auth_uid => auth_uid
950 :params => { :user => { :email => new_email,
951 :display_name => display_name,
952 :auth_provider => "wikipedia",
953 :auth_uid => "123454321",
954 :pass_crypt => password,
955 :pass_crypt_confirmation => password },
958 :email_hmac => email_hmac }
959 assert_redirected_to welcome_path
966 assert_response :success
967 assert_template "site/welcome"
970 def test_user_create_wikipedia_duplicate_email
971 dup_user = create(:user)
972 display_name = "new_tester-wikipedia"
973 auth_uid = "123454321"
975 OmniAuth.config.add_mock(:wikipedia,
977 :info => { "email" => dup_user.email, :name => display_name })
979 post auth_path(:provider => "wikipedia", :origin => "/user/new")
980 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
982 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
983 :email => dup_user.email, :email_hmac => UsersController.message_hmac(dup_user.email),
984 :auth_provider => "wikipedia", :auth_uid => auth_uid
987 assert_response :success
988 assert_template "users/new"
989 assert_select "form > div > input.is-invalid#user_email"
992 def test_user_create_wikipedia_failure
993 OmniAuth.config.mock_auth[:wikipedia] = :connection_failed
995 assert_difference("User.count", 0) do
996 assert_difference("ActionMailer::Base.deliveries.size", 0) do
997 perform_enqueued_jobs do
998 post auth_path(:provider => "wikipedia", :origin => "/user/new")
999 assert_response :redirect
1001 assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/user/new")
1003 assert_redirected_to "/user/new"
1009 def test_user_create_wikipedia_redirect
1010 orig_email = "redirect_tester_wikipedia_orig@osm.org"
1011 email_hmac = UsersController.message_hmac(orig_email)
1012 new_email = "redirect_tester_wikipedia@osm.org"
1013 display_name = "redirect_tester_wikipedia"
1014 auth_uid = "123454321"
1016 OmniAuth.config.add_mock(:wikipedia,
1018 :info => { :email => orig_email, :name => display_name })
1020 # nothing special about this page, just need a protected page to redirect back to.
1021 assert_difference("User.count") do
1022 assert_difference("ActionMailer::Base.deliveries.size", 1) do
1023 perform_enqueued_jobs do
1024 post auth_path(:provider => "wikipedia", :origin => "/user/new")
1025 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
1027 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
1028 :email => orig_email, :email_hmac => email_hmac,
1029 :auth_provider => "wikipedia", :auth_uid => auth_uid
1033 :params => { :user => { :email => new_email,
1034 :email_hmac => email_hmac,
1035 :display_name => display_name,
1036 :auth_provider => "wikipedia",
1037 :auth_uid => auth_uid } }
1038 assert_response :redirect
1045 register_email = ActionMailer::Base.deliveries.first
1047 assert_equal register_email.to.first, new_email
1048 # Check that the confirm account url is correct
1049 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
1050 email_text_parts(register_email).each do |part|
1051 assert_match confirm_regex, part.body.to_s
1053 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
1056 assert_response :success
1057 assert_template "confirmations/confirm"
1059 # Go to the confirmation page
1060 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
1061 assert_response :success
1062 assert_template "confirmations/confirm"
1064 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
1065 assert_response :redirect
1067 assert_response :success
1068 assert_template "site/welcome"