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[:google] = nil
12 OmniAuth.config.mock_auth[:apple] = 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" } }
41 assert_response :success
42 assert_template "users/new"
44 assert_select "form > div > input.is-invalid#user_email"
47 def test_user_create_association_submit_duplicate_email
48 dup_email = create(:user).email
49 display_name = "new_tester"
50 assert_difference("User.count", 0) do
51 assert_no_difference("ActionMailer::Base.deliveries.size") do
52 perform_enqueued_jobs do
54 :params => { :user => { :email => dup_email,
55 :display_name => display_name,
56 :pass_crypt => "testtest",
57 :pass_crypt_confirmation => "testtest",
58 :auth_provider => "google",
59 :auth_uid => "123454321" } }
63 assert_response :success
64 assert_template "users/new"
66 assert_select "form > div > input.is-invalid#user_email"
69 def test_user_create_submit_duplicate_username
70 dup_display_name = create(:user).display_name
72 assert_difference("User.count", 0) do
73 assert_difference("ActionMailer::Base.deliveries.size", 0) do
74 perform_enqueued_jobs do
76 :params => { :user => { :email => email,
77 :display_name => dup_display_name,
78 :pass_crypt => "testtest",
79 :pass_crypt_confirmation => "testtest" } }
83 assert_response :success
84 assert_template "users/new"
85 assert_select "form > div > input.is-invalid#user_display_name"
88 def test_user_create_submit_mismatched_passwords
89 email = "newtester@osm.org"
90 display_name = "new_tester"
91 assert_difference("User.count", 0) do
92 assert_difference("ActionMailer::Base.deliveries.size", 0) do
93 perform_enqueued_jobs do
95 :params => { :user => { :email => email,
96 :display_name => display_name,
97 :pass_crypt => "testtest",
98 :pass_crypt_confirmation => "blahblah" } }
102 assert_response :success
103 assert_template "users/new"
104 assert_select "form > div > div > div > input.is-invalid#user_pass_crypt_confirmation"
107 def test_user_create_association_submit_duplicate_username
108 dup_display_name = create(:user).display_name
110 assert_difference("User.count", 0) do
111 assert_no_difference("ActionMailer::Base.deliveries.size") do
112 perform_enqueued_jobs do
114 :params => { :user => { :email => email,
115 :display_name => dup_display_name,
116 :auth_provider => "google",
117 :auth_uid => "123454321" } }
121 assert_response :success
122 assert_template "users/new"
123 assert_select "form > div > input.is-invalid#user_display_name"
126 def test_user_create_success
127 new_email = "newtester@osm.org"
128 display_name = "new_tester"
130 assert_difference("User.count", 1) do
131 assert_difference("ActionMailer::Base.deliveries.size", 1) do
132 perform_enqueued_jobs do
134 :params => { :user => { :email => new_email,
135 :display_name => display_name,
136 :pass_crypt => "testtest",
137 :pass_crypt_confirmation => "testtest" } }
138 assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
144 assert_response :success
145 assert_template "confirmations/confirm"
147 user = User.find_by(:email => "newtester@osm.org")
149 assert_not_predicate user, :active?
151 register_email = ActionMailer::Base.deliveries.first
152 assert_equal register_email.to.first, new_email
153 found_confirmation_url = register_email.parts.first.parts.first.to_s =~ %r{\shttp://test.host(/\S+)\s}
154 assert found_confirmation_url
155 confirmation_url = Regexp.last_match(1)
157 post confirmation_url
159 assert_redirected_to welcome_path
162 assert_predicate user, :active?
164 assert_equal user, User.authenticate(:username => new_email, :password => "testtest")
167 # Check that the user can successfully recover their password
168 # def test_lost_password_recovery_success
169 # Open the lost password form
170 # Submit the lost password form
172 # Submit the reset password token
173 # Check that the password has changed, and the user can login
176 def test_user_create_redirect
177 new_email = "redirect_tester@osm.org"
178 display_name = "redirect_tester"
179 password = "testtest"
180 # nothing special about this page, just need a protected page to redirect back to.
181 referer = "/traces/mine"
182 assert_difference("User.count") do
183 assert_difference("ActionMailer::Base.deliveries.size", 1) do
184 perform_enqueued_jobs do
186 :params => { :user => { :email => new_email,
187 :display_name => display_name,
188 :pass_crypt => password,
189 :pass_crypt_confirmation => password },
190 :referer => referer }
191 assert_response(:redirect)
192 assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
199 register_email = ActionMailer::Base.deliveries.first
201 assert_equal register_email.to.first, new_email
202 # Check that the confirm account url is correct
203 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
204 email_text_parts(register_email).each do |part|
205 assert_match confirm_regex, part.body.to_s
207 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
210 assert_response :success
211 assert_template "confirmations/confirm"
213 # Go to the confirmation page
214 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
215 assert_response :success
216 assert_template "confirmations/confirm"
218 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
219 assert_response :redirect
221 assert_response :success
222 assert_template "site/welcome"
225 def test_user_create_google_success
226 new_email = "newtester-google@osm.org"
227 email_hmac = UsersController.message_hmac(new_email)
228 display_name = "new_tester-google"
229 auth_uid = "123454321"
231 OmniAuth.config.add_mock(:google,
233 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
234 :info => { :email => new_email, :name => display_name })
236 assert_difference("User.count") do
237 assert_no_difference("ActionMailer::Base.deliveries.size") do
238 perform_enqueued_jobs do
239 post auth_path(:provider => "google", :origin => "/user/new")
240 assert_redirected_to auth_success_path(:provider => "google")
242 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
243 :email => new_email, :email_hmac => email_hmac,
244 :auth_provider => "google", :auth_uid => auth_uid
248 :params => { :user => { :email => new_email,
249 :display_name => display_name,
250 :auth_provider => "google",
251 :auth_uid => auth_uid },
252 :email_hmac => email_hmac }
253 assert_redirected_to welcome_path
260 assert_response :success
261 assert_template "site/welcome"
264 def test_user_create_google_duplicate_email
265 dup_user = create(:user)
266 display_name = "new_tester-google"
267 auth_uid = "123454321"
269 OmniAuth.config.add_mock(:google,
271 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
272 :info => { :email => dup_user.email, :name => display_name })
274 post auth_path(:provider => "google", :origin => "/user/new")
275 assert_redirected_to auth_success_path(:provider => "google")
277 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
278 :email_hmac => UsersController.message_hmac(dup_user.email),
279 :auth_provider => "google", :auth_uid => auth_uid
282 assert_response :success
283 assert_template "users/new"
284 assert_select "form > div > input.is-invalid#user_email"
287 def test_user_create_google_failure
288 OmniAuth.config.mock_auth[:google] = :connection_failed
290 assert_difference("User.count", 0) do
291 assert_difference("ActionMailer::Base.deliveries.size", 0) do
292 perform_enqueued_jobs do
293 post auth_path(:provider => "google", :origin => "/user/new")
294 assert_response :redirect
296 assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
298 assert_redirected_to "/user/new"
304 def test_user_create_google_redirect
305 orig_email = "redirect_tester_google_orig@google.com"
306 email_hmac = UsersController.message_hmac(orig_email)
307 new_email = "redirect_tester_google@osm.org"
308 display_name = "redirect_tester_google"
309 auth_uid = "123454321"
311 OmniAuth.config.add_mock(:google,
313 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
314 :info => { :email => orig_email, :name => display_name })
316 assert_difference("User.count") do
317 assert_difference("ActionMailer::Base.deliveries.size", 1) do
318 perform_enqueued_jobs do
319 post auth_path(:provider => "google", :origin => "/user/new")
320 assert_redirected_to auth_success_path(:provider => "google")
322 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
323 :email => orig_email, :email_hmac => email_hmac,
324 :auth_provider => "google", :auth_uid => auth_uid
327 :params => { :user => { :email => new_email,
328 :email_hmac => email_hmac,
329 :display_name => display_name,
330 :auth_provider => "google",
331 :auth_uid => auth_uid } }
332 assert_response :redirect
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 # Go to the confirmation page
354 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
355 assert_response :success
356 assert_template "confirmations/confirm"
358 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
359 assert_response :redirect
361 assert_response :success
362 assert_template "site/welcome"
365 def test_user_create_apple_success
366 new_email = "newtester-apple@osm.org"
367 email_hmac = UsersController.message_hmac(new_email)
368 display_name = "new_tester-apple"
369 auth_uid = "123454321"
371 OmniAuth.config.add_mock(:apple,
373 :info => { :email => new_email, :name => display_name })
375 assert_difference("User.count") do
376 assert_no_difference("ActionMailer::Base.deliveries.size") do
377 perform_enqueued_jobs do
378 post auth_path(:provider => "apple", :origin => "/user/new")
379 assert_redirected_to auth_success_path(:provider => "apple")
381 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
382 :email => new_email, :email_hmac => email_hmac,
383 :auth_provider => "apple", :auth_uid => auth_uid
385 :params => { :user => { :email => new_email,
386 :display_name => display_name,
387 :auth_provider => "apple",
388 :auth_uid => auth_uid },
389 :email_hmac => email_hmac }
390 assert_redirected_to welcome_path
397 assert_response :success
398 assert_template "site/welcome"
400 ActionMailer::Base.deliveries.clear
403 def test_user_create_apple_duplicate_email
404 dup_user = create(:user)
405 display_name = "new_tester-apple"
406 auth_uid = "123454321"
408 OmniAuth.config.add_mock(:apple,
410 :info => { :email => dup_user.email, :name => display_name })
412 post auth_path(:provider => "apple", :origin => "/user/new")
413 assert_redirected_to auth_success_path(:provider => "apple")
415 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
416 :email_hmac => UsersController.message_hmac(dup_user.email),
417 :auth_provider => "apple", :auth_uid => auth_uid
420 assert_response :success
421 assert_template "users/new"
422 assert_select "form > div > input.is-invalid#user_email"
424 ActionMailer::Base.deliveries.clear
427 def test_user_create_apple_failure
428 OmniAuth.config.mock_auth[:apple] = :connection_failed
430 assert_difference("User.count", 0) do
431 assert_difference("ActionMailer::Base.deliveries.size", 0) do
432 perform_enqueued_jobs do
433 post auth_path(:provider => "apple", :origin => "/user/new")
434 assert_response :redirect
436 assert_redirected_to auth_failure_path(:strategy => "apple", :message => "connection_failed", :origin => "/user/new")
438 assert_redirected_to "/user/new"
443 ActionMailer::Base.deliveries.clear
446 def test_user_create_apple_redirect
447 orig_email = "redirect_tester_apple_orig@apple.com"
448 email_hmac = UsersController.message_hmac(orig_email)
449 new_email = "redirect_tester_apple@osm.org"
450 display_name = "redirect_tester_apple"
451 auth_uid = "123454321"
453 OmniAuth.config.add_mock(:apple,
455 :info => { :email => orig_email, :name => display_name })
457 assert_difference("User.count") do
458 assert_difference("ActionMailer::Base.deliveries.size", 1) do
459 perform_enqueued_jobs do
460 post auth_path(:provider => "apple", :origin => "/user/new")
461 assert_redirected_to auth_success_path(:provider => "apple")
463 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
464 :email => orig_email, :email_hmac => email_hmac,
465 :auth_provider => "apple", :auth_uid => auth_uid
468 :params => { :user => { :email => new_email,
469 :email_hmac => email_hmac,
470 :display_name => display_name,
471 :auth_provider => "apple",
472 :auth_uid => auth_uid } }
473 assert_response :redirect
480 register_email = ActionMailer::Base.deliveries.first
482 assert_equal register_email.to.first, new_email
483 # Check that the confirm account url is correct
484 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
485 email_text_parts(register_email).each do |part|
486 assert_match confirm_regex, part.body.to_s
488 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
491 assert_response :success
492 assert_template "confirmations/confirm"
494 ActionMailer::Base.deliveries.clear
496 # Go to the confirmation page
497 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
498 assert_response :success
499 assert_template "confirmations/confirm"
501 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
502 assert_response :redirect
504 assert_response :success
505 assert_template "site/welcome"
508 def test_user_create_facebook_success
509 new_email = "newtester-facebook@osm.org"
510 email_hmac = UsersController.message_hmac(new_email)
511 display_name = "new_tester-facebook"
512 auth_uid = "123454321"
514 OmniAuth.config.add_mock(:facebook,
516 :info => { "email" => new_email, :name => display_name })
518 assert_difference("User.count") do
519 assert_no_difference("ActionMailer::Base.deliveries.size") do
520 perform_enqueued_jobs do
521 post auth_path(:provider => "facebook", :origin => "/user/new")
522 assert_redirected_to auth_success_path(:provider => "facebook")
524 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
525 :email => new_email, :email_hmac => email_hmac,
526 :auth_provider => "facebook", :auth_uid => auth_uid
530 :params => { :user => { :email => new_email,
531 :display_name => display_name,
532 :auth_provider => "facebook",
533 :auth_uid => auth_uid },
534 :email_hmac => email_hmac }
535 assert_redirected_to welcome_path
542 assert_response :success
543 assert_template "site/welcome"
546 def test_user_create_facebook_duplicate_email
547 dup_user = create(:user)
548 display_name = "new_tester-facebook"
549 auth_uid = "123454321"
551 OmniAuth.config.add_mock(:facebook,
553 :info => { :email => dup_user.email, :name => display_name })
555 post auth_path(:provider => "facebook", :origin => "/user/new")
556 assert_redirected_to auth_success_path(:provider => "facebook")
558 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
559 :email_hmac => UsersController.message_hmac(dup_user.email),
560 :auth_provider => "facebook", :auth_uid => auth_uid
563 assert_response :success
564 assert_template "users/new"
565 assert_select "form > div > input.is-invalid#user_email"
568 def test_user_create_facebook_failure
569 OmniAuth.config.mock_auth[:facebook] = :connection_failed
571 assert_difference("User.count", 0) do
572 assert_difference("ActionMailer::Base.deliveries.size", 0) do
573 perform_enqueued_jobs do
574 post auth_path(:provider => "facebook", :origin => "/user/new")
575 assert_response :redirect
577 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
579 assert_redirected_to "/user/new"
585 def test_user_create_facebook_redirect
586 orig_email = "redirect_tester_facebook_orig@osm.org"
587 email_hmac = UsersController.message_hmac(orig_email)
588 new_email = "redirect_tester_facebook@osm.org"
589 display_name = "redirect_tester_facebook"
590 auth_uid = "123454321"
592 OmniAuth.config.add_mock(:facebook,
594 :info => { :email => orig_email, :name => display_name })
596 # nothing special about this page, just need a protected page to redirect back to.
597 assert_difference("User.count") do
598 assert_difference("ActionMailer::Base.deliveries.size", 1) do
599 perform_enqueued_jobs do
600 post auth_path(:provider => "facebook", :origin => "/user/new")
601 assert_redirected_to auth_success_path(:provider => "facebook")
603 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
604 :email => orig_email, :email_hmac => email_hmac,
605 :auth_provider => "facebook", :auth_uid => auth_uid
609 :params => { :user => { :email => new_email,
610 :email_hmac => email_hmac,
611 :display_name => display_name,
612 :auth_provider => "facebook",
613 :auth_uid => auth_uid } }
614 assert_response :redirect
621 register_email = ActionMailer::Base.deliveries.first
623 assert_equal register_email.to.first, new_email
624 # Check that the confirm account url is correct
625 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
626 email_text_parts(register_email).each do |part|
627 assert_match confirm_regex, part.body.to_s
629 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
632 assert_response :success
633 assert_template "confirmations/confirm"
635 # Go to the confirmation page
636 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
637 assert_response :success
638 assert_template "confirmations/confirm"
640 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
641 assert_response :redirect
643 assert_response :success
644 assert_template "site/welcome"
647 def test_user_create_microsoft_success
648 new_email = "newtester-microsoft@osm.org"
649 email_hmac = UsersController.message_hmac(new_email)
650 display_name = "new_tester-microsoft"
651 auth_uid = "123454321"
653 OmniAuth.config.add_mock(:microsoft,
655 :info => { "email" => new_email, :name => display_name })
657 assert_difference("User.count") do
658 assert_difference("ActionMailer::Base.deliveries.size", 0) do
659 perform_enqueued_jobs do
660 post auth_path(:provider => "microsoft", :origin => "/user/new")
661 assert_redirected_to auth_success_path(:provider => "microsoft")
663 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
664 :email => new_email, :email_hmac => email_hmac,
665 :auth_provider => "microsoft", :auth_uid => auth_uid
668 :params => { :user => { :email => new_email,
669 :display_name => display_name,
670 :auth_provider => "microsoft",
671 :auth_uid => auth_uid },
672 :email_hmac => email_hmac }
673 assert_redirected_to welcome_path
680 assert_response :success
681 assert_template "site/welcome"
684 def test_user_create_microsoft_duplicate_email
685 dup_user = create(:user)
686 display_name = "new_tester-microsoft"
687 auth_uid = "123454321"
689 OmniAuth.config.add_mock(:microsoft,
691 :info => { :email => dup_user.email, :name => display_name })
693 post auth_path(:provider => "microsoft", :origin => "/user/new")
694 assert_redirected_to auth_success_path(:provider => "microsoft")
696 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
697 :email_hmac => UsersController.message_hmac(dup_user.email),
698 :auth_provider => "microsoft", :auth_uid => auth_uid
701 assert_response :success
702 assert_template "users/new"
703 assert_select "form > div > input.is-invalid#user_email"
706 def test_user_create_microsoft_failure
707 OmniAuth.config.mock_auth[:microsoft] = :connection_failed
709 assert_difference("User.count", 0) do
710 assert_difference("ActionMailer::Base.deliveries.size", 0) do
711 perform_enqueued_jobs do
712 post auth_path(:provider => "microsoft", :origin => "/user/new")
713 assert_response :redirect
715 assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "connection_failed", :origin => "/user/new")
717 assert_redirected_to "/user/new"
723 def test_user_create_microsoft_redirect
724 orig_email = "redirect_tester_microsoft_orig@osm.org"
725 email_hmac = UsersController.message_hmac(orig_email)
726 new_email = "redirect_tester_microsoft@osm.org"
727 display_name = "redirect_tester_microsoft"
728 auth_uid = "123454321"
730 OmniAuth.config.add_mock(:microsoft,
732 :info => { :email => orig_email, :name => display_name })
734 assert_difference("User.count") do
735 assert_difference("ActionMailer::Base.deliveries.size", 1) do
736 perform_enqueued_jobs do
737 post auth_path(:provider => "microsoft", :origin => "/user/new")
738 assert_redirected_to auth_success_path(:provider => "microsoft")
740 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
741 :email => orig_email, :email_hmac => email_hmac,
742 :auth_provider => "microsoft", :auth_uid => auth_uid
746 :params => { :user => { :email => new_email,
747 :email_hmac => email_hmac,
748 :display_name => display_name,
749 :auth_provider => "microsoft",
750 :auth_uid => auth_uid } }
751 assert_response :redirect
758 register_email = ActionMailer::Base.deliveries.first
760 assert_equal register_email.to.first, new_email
761 # Check that the confirm account url is correct
762 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
763 email_text_parts(register_email).each do |part|
764 assert_match confirm_regex, part.body.to_s
766 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
769 assert_response :success
770 assert_template "confirmations/confirm"
772 # Go to the confirmation page
773 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
774 assert_response :success
775 assert_template "confirmations/confirm"
777 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
778 assert_response :redirect
780 assert_response :success
781 assert_template "site/welcome"
784 def test_user_create_github_success
785 new_email = "newtester-github@osm.org"
786 email_hmac = UsersController.message_hmac(new_email)
787 display_name = "new_tester-github"
788 password = "testtest"
789 auth_uid = "123454321"
791 OmniAuth.config.add_mock(:github,
793 :info => { "email" => new_email, :name => display_name })
795 assert_difference("User.count") do
796 assert_no_difference("ActionMailer::Base.deliveries.size") do
797 perform_enqueued_jobs do
798 post auth_path(:provider => "github", :origin => "/user/new")
799 assert_redirected_to auth_success_path(:provider => "github")
801 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
802 :email => new_email, :email_hmac => email_hmac,
803 :auth_provider => "github", :auth_uid => auth_uid
807 :params => { :user => { :email => new_email,
808 :display_name => display_name,
809 :auth_provider => "github",
810 :auth_uid => "123454321",
811 :pass_crypt => password,
812 :pass_crypt_confirmation => password },
815 :email_hmac => email_hmac }
816 assert_redirected_to welcome_path
823 assert_response :success
824 assert_template "site/welcome"
827 def test_user_create_github_duplicate_email
828 dup_user = create(:user)
829 display_name = "new_tester-github"
830 auth_uid = "123454321"
832 OmniAuth.config.add_mock(:github,
834 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
835 :info => { :email => dup_user.email, :name => display_name })
837 post auth_path(:provider => "github", :origin => "/user/new")
838 assert_redirected_to auth_success_path(:provider => "github")
840 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
841 :email => dup_user.email, :email_hmac => UsersController.message_hmac(dup_user.email),
842 :auth_provider => "github", :auth_uid => auth_uid
845 assert_response :success
846 assert_template "users/new"
847 assert_select "form > div > input.is-invalid#user_email"
850 def test_user_create_github_failure
851 OmniAuth.config.mock_auth[:github] = :connection_failed
853 assert_difference("User.count", 0) do
854 assert_difference("ActionMailer::Base.deliveries.size", 0) do
855 perform_enqueued_jobs do
856 post auth_path(:provider => "github", :origin => "/user/new")
858 assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/user/new")
860 assert_redirected_to "/user/new"
866 def test_user_create_github_redirect
867 orig_email = "redirect_tester_github_orig@osm.org"
868 email_hmac = UsersController.message_hmac(orig_email)
869 new_email = "redirect_tester_github@osm.org"
870 display_name = "redirect_tester_github"
871 auth_uid = "123454321"
873 OmniAuth.config.add_mock(:github,
875 :info => { :email => orig_email, :name => display_name })
877 assert_difference("User.count") do
878 assert_difference("ActionMailer::Base.deliveries.size", 1) do
879 perform_enqueued_jobs do
880 post auth_path(:provider => "github", :origin => "/user/new")
881 assert_redirected_to auth_success_path(:provider => "github")
883 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
884 :email => orig_email, :email_hmac => email_hmac,
885 :auth_provider => "github", :auth_uid => auth_uid
888 :params => { :user => { :email => new_email,
889 :email_hmac => email_hmac,
890 :display_name => display_name,
891 :auth_provider => "github",
892 :auth_uid => auth_uid } }
893 assert_response :redirect
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("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 = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
911 assert_response :success
912 assert_template "confirmations/confirm"
914 # Go to the confirmation page
915 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
916 assert_response :success
917 assert_template "confirmations/confirm"
919 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
920 assert_response :redirect
922 assert_response :success
923 assert_template "site/welcome"
926 def test_user_create_wikipedia_success
927 new_email = "newtester-wikipedia@osm.org"
928 email_hmac = UsersController.message_hmac(new_email)
929 display_name = "new_tester-wikipedia"
930 password = "testtest"
931 auth_uid = "123454321"
933 OmniAuth.config.add_mock(:wikipedia,
935 :info => { :email => new_email, :name => display_name })
937 assert_difference("User.count") do
938 assert_no_difference("ActionMailer::Base.deliveries.size") do
939 perform_enqueued_jobs do
940 post auth_path(:provider => "wikipedia", :origin => "/user/new")
941 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
943 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
944 :email => new_email, :email_hmac => email_hmac,
945 :auth_provider => "wikipedia", :auth_uid => auth_uid
948 :params => { :user => { :email => new_email,
949 :display_name => display_name,
950 :auth_provider => "wikipedia",
951 :auth_uid => "123454321",
952 :pass_crypt => password,
953 :pass_crypt_confirmation => password },
956 :email_hmac => email_hmac }
957 assert_redirected_to welcome_path
964 assert_response :success
965 assert_template "site/welcome"
968 def test_user_create_wikipedia_duplicate_email
969 dup_user = create(:user)
970 display_name = "new_tester-wikipedia"
971 auth_uid = "123454321"
973 OmniAuth.config.add_mock(:wikipedia,
975 :info => { "email" => dup_user.email, :name => display_name })
977 post auth_path(:provider => "wikipedia", :origin => "/user/new")
978 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
980 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
981 :email => dup_user.email, :email_hmac => UsersController.message_hmac(dup_user.email),
982 :auth_provider => "wikipedia", :auth_uid => auth_uid
985 assert_response :success
986 assert_template "users/new"
987 assert_select "form > div > input.is-invalid#user_email"
990 def test_user_create_wikipedia_failure
991 OmniAuth.config.mock_auth[:wikipedia] = :connection_failed
993 assert_difference("User.count", 0) do
994 assert_difference("ActionMailer::Base.deliveries.size", 0) do
995 perform_enqueued_jobs do
996 post auth_path(:provider => "wikipedia", :origin => "/user/new")
997 assert_response :redirect
999 assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/user/new")
1001 assert_redirected_to "/user/new"
1007 def test_user_create_wikipedia_redirect
1008 orig_email = "redirect_tester_wikipedia_orig@osm.org"
1009 email_hmac = UsersController.message_hmac(orig_email)
1010 new_email = "redirect_tester_wikipedia@osm.org"
1011 display_name = "redirect_tester_wikipedia"
1012 auth_uid = "123454321"
1014 OmniAuth.config.add_mock(:wikipedia,
1016 :info => { :email => orig_email, :name => display_name })
1018 # nothing special about this page, just need a protected page to redirect back to.
1019 assert_difference("User.count") do
1020 assert_difference("ActionMailer::Base.deliveries.size", 1) do
1021 perform_enqueued_jobs do
1022 post auth_path(:provider => "wikipedia", :origin => "/user/new")
1023 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
1025 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
1026 :email => orig_email, :email_hmac => email_hmac,
1027 :auth_provider => "wikipedia", :auth_uid => auth_uid
1031 :params => { :user => { :email => new_email,
1032 :email_hmac => email_hmac,
1033 :display_name => display_name,
1034 :auth_provider => "wikipedia",
1035 :auth_uid => auth_uid } }
1036 assert_response :redirect
1043 register_email = ActionMailer::Base.deliveries.first
1045 assert_equal register_email.to.first, new_email
1046 # Check that the confirm account url is correct
1047 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
1048 email_text_parts(register_email).each do |part|
1049 assert_match confirm_regex, part.body.to_s
1051 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
1054 assert_response :success
1055 assert_template "confirmations/confirm"
1057 # Go to the confirmation page
1058 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
1059 assert_response :success
1060 assert_template "confirmations/confirm"
1062 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
1063 assert_response :redirect
1065 assert_response :success
1066 assert_template "site/welcome"