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?
165 assert user.password_matches?("testtest")
168 # Check that the user can successfully recover their password
169 # def test_lost_password_recovery_success
170 # Open the lost password form
171 # Submit the lost password form
173 # Submit the reset password token
174 # Check that the password has changed, and the user can login
177 def test_user_create_redirect
178 new_email = "redirect_tester@osm.org"
179 display_name = "redirect_tester"
180 password = "testtest"
181 # nothing special about this page, just need a protected page to redirect back to.
182 referer = "/traces/mine"
183 assert_difference("User.count") do
184 assert_difference("ActionMailer::Base.deliveries.size", 1) do
185 perform_enqueued_jobs do
187 :params => { :user => { :email => new_email,
188 :display_name => display_name,
189 :pass_crypt => password,
190 :pass_crypt_confirmation => password },
191 :referer => referer }
192 assert_response(:redirect)
193 assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
200 register_email = ActionMailer::Base.deliveries.first
202 assert_equal register_email.to.first, new_email
203 # Check that the confirm account url is correct
204 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
205 email_text_parts(register_email).each do |part|
206 assert_match confirm_regex, part.body.to_s
208 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
211 assert_response :success
212 assert_template "confirmations/confirm"
214 # Go to the confirmation page
215 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
216 assert_response :success
217 assert_template "confirmations/confirm"
219 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
220 assert_response :redirect
222 assert_response :success
223 assert_template "site/welcome"
226 def test_user_create_google_success
227 new_email = "newtester-google@osm.org"
228 email_hmac = UsersController.message_hmac(new_email)
229 display_name = "new_tester-google"
230 auth_uid = "123454321"
232 OmniAuth.config.add_mock(:google,
234 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
235 :info => { :email => new_email, :name => display_name })
237 assert_difference("User.count") do
238 assert_no_difference("ActionMailer::Base.deliveries.size") do
239 perform_enqueued_jobs do
240 post auth_path(:provider => "google", :origin => "/user/new")
241 assert_redirected_to auth_success_path(:provider => "google")
243 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
244 :email => new_email, :email_hmac => email_hmac,
245 :auth_provider => "google", :auth_uid => auth_uid
249 :params => { :user => { :email => new_email,
250 :display_name => display_name,
251 :auth_provider => "google",
252 :auth_uid => auth_uid },
253 :email_hmac => email_hmac }
254 assert_redirected_to welcome_path
261 assert_response :success
262 assert_template "site/welcome"
265 def test_user_create_google_duplicate_email
266 dup_user = create(:user)
267 display_name = "new_tester-google"
268 auth_uid = "123454321"
270 OmniAuth.config.add_mock(:google,
272 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
273 :info => { :email => dup_user.email, :name => display_name })
275 post auth_path(:provider => "google", :origin => "/user/new")
276 assert_redirected_to auth_success_path(:provider => "google")
278 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
279 :email_hmac => UsersController.message_hmac(dup_user.email),
280 :auth_provider => "google", :auth_uid => auth_uid
283 assert_response :success
284 assert_template "users/new"
285 assert_select "form > div > input.is-invalid#user_email"
288 def test_user_create_google_failure
289 OmniAuth.config.mock_auth[:google] = :connection_failed
291 assert_difference("User.count", 0) do
292 assert_difference("ActionMailer::Base.deliveries.size", 0) do
293 perform_enqueued_jobs do
294 post auth_path(:provider => "google", :origin => "/user/new")
295 assert_response :redirect
297 assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
299 assert_redirected_to "/user/new"
305 def test_user_create_google_redirect
306 orig_email = "redirect_tester_google_orig@google.com"
307 email_hmac = UsersController.message_hmac(orig_email)
308 new_email = "redirect_tester_google@osm.org"
309 display_name = "redirect_tester_google"
310 auth_uid = "123454321"
312 OmniAuth.config.add_mock(:google,
314 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
315 :info => { :email => orig_email, :name => display_name })
317 assert_difference("User.count") do
318 assert_difference("ActionMailer::Base.deliveries.size", 1) do
319 perform_enqueued_jobs do
320 post auth_path(:provider => "google", :origin => "/user/new")
321 assert_redirected_to auth_success_path(:provider => "google")
323 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
324 :email => orig_email, :email_hmac => email_hmac,
325 :auth_provider => "google", :auth_uid => auth_uid
328 :params => { :user => { :email => new_email,
329 :email_hmac => email_hmac,
330 :display_name => display_name,
331 :auth_provider => "google",
332 :auth_uid => auth_uid } }
333 assert_response :redirect
340 register_email = ActionMailer::Base.deliveries.first
342 assert_equal register_email.to.first, new_email
343 # Check that the confirm account url is correct
344 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
345 email_text_parts(register_email).each do |part|
346 assert_match confirm_regex, part.body.to_s
348 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
351 assert_response :success
352 assert_template "confirmations/confirm"
354 # Go to the confirmation page
355 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
356 assert_response :success
357 assert_template "confirmations/confirm"
359 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
360 assert_response :redirect
362 assert_response :success
363 assert_template "site/welcome"
366 def test_user_create_apple_success
367 new_email = "newtester-apple@osm.org"
368 email_hmac = UsersController.message_hmac(new_email)
369 display_name = "new_tester-apple"
370 auth_uid = "123454321"
372 OmniAuth.config.add_mock(:apple,
374 :info => { :email => new_email, :name => display_name })
376 assert_difference("User.count") do
377 assert_no_difference("ActionMailer::Base.deliveries.size") do
378 perform_enqueued_jobs do
379 post auth_path(:provider => "apple", :origin => "/user/new")
380 assert_redirected_to auth_success_path(:provider => "apple")
382 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
383 :email => new_email, :email_hmac => email_hmac,
384 :auth_provider => "apple", :auth_uid => auth_uid
386 :params => { :user => { :email => new_email,
387 :display_name => display_name,
388 :auth_provider => "apple",
389 :auth_uid => auth_uid },
390 :email_hmac => email_hmac }
391 assert_redirected_to welcome_path
398 assert_response :success
399 assert_template "site/welcome"
401 ActionMailer::Base.deliveries.clear
404 def test_user_create_apple_duplicate_email
405 dup_user = create(:user)
406 display_name = "new_tester-apple"
407 auth_uid = "123454321"
409 OmniAuth.config.add_mock(:apple,
411 :info => { :email => dup_user.email, :name => display_name })
413 post auth_path(:provider => "apple", :origin => "/user/new")
414 assert_redirected_to auth_success_path(:provider => "apple")
416 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
417 :email_hmac => UsersController.message_hmac(dup_user.email),
418 :auth_provider => "apple", :auth_uid => auth_uid
421 assert_response :success
422 assert_template "users/new"
423 assert_select "form > div > input.is-invalid#user_email"
425 ActionMailer::Base.deliveries.clear
428 def test_user_create_apple_failure
429 OmniAuth.config.mock_auth[:apple] = :connection_failed
431 assert_difference("User.count", 0) do
432 assert_difference("ActionMailer::Base.deliveries.size", 0) do
433 perform_enqueued_jobs do
434 post auth_path(:provider => "apple", :origin => "/user/new")
435 assert_response :redirect
437 assert_redirected_to auth_failure_path(:strategy => "apple", :message => "connection_failed", :origin => "/user/new")
439 assert_redirected_to "/user/new"
444 ActionMailer::Base.deliveries.clear
447 def test_user_create_apple_redirect
448 orig_email = "redirect_tester_apple_orig@apple.com"
449 email_hmac = UsersController.message_hmac(orig_email)
450 new_email = "redirect_tester_apple@osm.org"
451 display_name = "redirect_tester_apple"
452 auth_uid = "123454321"
454 OmniAuth.config.add_mock(:apple,
456 :info => { :email => orig_email, :name => display_name })
458 assert_difference("User.count") do
459 assert_difference("ActionMailer::Base.deliveries.size", 1) do
460 perform_enqueued_jobs do
461 post auth_path(:provider => "apple", :origin => "/user/new")
462 assert_redirected_to auth_success_path(:provider => "apple")
464 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
465 :email => orig_email, :email_hmac => email_hmac,
466 :auth_provider => "apple", :auth_uid => auth_uid
469 :params => { :user => { :email => new_email,
470 :email_hmac => email_hmac,
471 :display_name => display_name,
472 :auth_provider => "apple",
473 :auth_uid => auth_uid } }
474 assert_response :redirect
481 register_email = ActionMailer::Base.deliveries.first
483 assert_equal register_email.to.first, new_email
484 # Check that the confirm account url is correct
485 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
486 email_text_parts(register_email).each do |part|
487 assert_match confirm_regex, part.body.to_s
489 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
492 assert_response :success
493 assert_template "confirmations/confirm"
495 ActionMailer::Base.deliveries.clear
497 # Go to the confirmation page
498 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
499 assert_response :success
500 assert_template "confirmations/confirm"
502 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
503 assert_response :redirect
505 assert_response :success
506 assert_template "site/welcome"
509 def test_user_create_facebook_success
510 new_email = "newtester-facebook@osm.org"
511 email_hmac = UsersController.message_hmac(new_email)
512 display_name = "new_tester-facebook"
513 auth_uid = "123454321"
515 OmniAuth.config.add_mock(:facebook,
517 :info => { "email" => new_email, :name => display_name })
519 assert_difference("User.count") do
520 assert_no_difference("ActionMailer::Base.deliveries.size") do
521 perform_enqueued_jobs do
522 post auth_path(:provider => "facebook", :origin => "/user/new")
523 assert_redirected_to auth_success_path(:provider => "facebook")
525 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
526 :email => new_email, :email_hmac => email_hmac,
527 :auth_provider => "facebook", :auth_uid => auth_uid
531 :params => { :user => { :email => new_email,
532 :display_name => display_name,
533 :auth_provider => "facebook",
534 :auth_uid => auth_uid },
535 :email_hmac => email_hmac }
536 assert_redirected_to welcome_path
543 assert_response :success
544 assert_template "site/welcome"
547 def test_user_create_facebook_duplicate_email
548 dup_user = create(:user)
549 display_name = "new_tester-facebook"
550 auth_uid = "123454321"
552 OmniAuth.config.add_mock(:facebook,
554 :info => { :email => dup_user.email, :name => display_name })
556 post auth_path(:provider => "facebook", :origin => "/user/new")
557 assert_redirected_to auth_success_path(:provider => "facebook")
559 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
560 :email_hmac => UsersController.message_hmac(dup_user.email),
561 :auth_provider => "facebook", :auth_uid => auth_uid
564 assert_response :success
565 assert_template "users/new"
566 assert_select "form > div > input.is-invalid#user_email"
569 def test_user_create_facebook_failure
570 OmniAuth.config.mock_auth[:facebook] = :connection_failed
572 assert_difference("User.count", 0) do
573 assert_difference("ActionMailer::Base.deliveries.size", 0) do
574 perform_enqueued_jobs do
575 post auth_path(:provider => "facebook", :origin => "/user/new")
576 assert_response :redirect
578 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
580 assert_redirected_to "/user/new"
586 def test_user_create_facebook_redirect
587 orig_email = "redirect_tester_facebook_orig@osm.org"
588 email_hmac = UsersController.message_hmac(orig_email)
589 new_email = "redirect_tester_facebook@osm.org"
590 display_name = "redirect_tester_facebook"
591 auth_uid = "123454321"
593 OmniAuth.config.add_mock(:facebook,
595 :info => { :email => orig_email, :name => display_name })
597 # nothing special about this page, just need a protected page to redirect back to.
598 assert_difference("User.count") do
599 assert_difference("ActionMailer::Base.deliveries.size", 1) do
600 perform_enqueued_jobs do
601 post auth_path(:provider => "facebook", :origin => "/user/new")
602 assert_redirected_to auth_success_path(:provider => "facebook")
604 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
605 :email => orig_email, :email_hmac => email_hmac,
606 :auth_provider => "facebook", :auth_uid => auth_uid
610 :params => { :user => { :email => new_email,
611 :email_hmac => email_hmac,
612 :display_name => display_name,
613 :auth_provider => "facebook",
614 :auth_uid => auth_uid } }
615 assert_response :redirect
622 register_email = ActionMailer::Base.deliveries.first
624 assert_equal register_email.to.first, new_email
625 # Check that the confirm account url is correct
626 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
627 email_text_parts(register_email).each do |part|
628 assert_match confirm_regex, part.body.to_s
630 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
633 assert_response :success
634 assert_template "confirmations/confirm"
636 # Go to the confirmation page
637 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
638 assert_response :success
639 assert_template "confirmations/confirm"
641 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
642 assert_response :redirect
644 assert_response :success
645 assert_template "site/welcome"
648 def test_user_create_microsoft_success
649 new_email = "newtester-microsoft@osm.org"
650 email_hmac = UsersController.message_hmac(new_email)
651 display_name = "new_tester-microsoft"
652 auth_uid = "123454321"
654 OmniAuth.config.add_mock(:microsoft,
656 :info => { "email" => new_email, :name => display_name })
658 assert_difference("User.count") do
659 assert_difference("ActionMailer::Base.deliveries.size", 0) do
660 perform_enqueued_jobs do
661 post auth_path(:provider => "microsoft", :origin => "/user/new")
662 assert_redirected_to auth_success_path(:provider => "microsoft")
664 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
665 :email => new_email, :email_hmac => email_hmac,
666 :auth_provider => "microsoft", :auth_uid => auth_uid
669 :params => { :user => { :email => new_email,
670 :display_name => display_name,
671 :auth_provider => "microsoft",
672 :auth_uid => auth_uid },
673 :email_hmac => email_hmac }
674 assert_redirected_to welcome_path
681 assert_response :success
682 assert_template "site/welcome"
685 def test_user_create_microsoft_duplicate_email
686 dup_user = create(:user)
687 display_name = "new_tester-microsoft"
688 auth_uid = "123454321"
690 OmniAuth.config.add_mock(:microsoft,
692 :info => { :email => dup_user.email, :name => display_name })
694 post auth_path(:provider => "microsoft", :origin => "/user/new")
695 assert_redirected_to auth_success_path(:provider => "microsoft")
697 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
698 :email_hmac => UsersController.message_hmac(dup_user.email),
699 :auth_provider => "microsoft", :auth_uid => auth_uid
702 assert_response :success
703 assert_template "users/new"
704 assert_select "form > div > input.is-invalid#user_email"
707 def test_user_create_microsoft_failure
708 OmniAuth.config.mock_auth[:microsoft] = :connection_failed
710 assert_difference("User.count", 0) do
711 assert_difference("ActionMailer::Base.deliveries.size", 0) do
712 perform_enqueued_jobs do
713 post auth_path(:provider => "microsoft", :origin => "/user/new")
714 assert_response :redirect
716 assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "connection_failed", :origin => "/user/new")
718 assert_redirected_to "/user/new"
724 def test_user_create_microsoft_redirect
725 orig_email = "redirect_tester_microsoft_orig@osm.org"
726 email_hmac = UsersController.message_hmac(orig_email)
727 new_email = "redirect_tester_microsoft@osm.org"
728 display_name = "redirect_tester_microsoft"
729 auth_uid = "123454321"
731 OmniAuth.config.add_mock(:microsoft,
733 :info => { :email => orig_email, :name => display_name })
735 assert_difference("User.count") do
736 assert_difference("ActionMailer::Base.deliveries.size", 1) do
737 perform_enqueued_jobs do
738 post auth_path(:provider => "microsoft", :origin => "/user/new")
739 assert_redirected_to auth_success_path(:provider => "microsoft")
741 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
742 :email => orig_email, :email_hmac => email_hmac,
743 :auth_provider => "microsoft", :auth_uid => auth_uid
747 :params => { :user => { :email => new_email,
748 :email_hmac => email_hmac,
749 :display_name => display_name,
750 :auth_provider => "microsoft",
751 :auth_uid => auth_uid } }
752 assert_response :redirect
759 register_email = ActionMailer::Base.deliveries.first
761 assert_equal register_email.to.first, new_email
762 # Check that the confirm account url is correct
763 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
764 email_text_parts(register_email).each do |part|
765 assert_match confirm_regex, part.body.to_s
767 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
770 assert_response :success
771 assert_template "confirmations/confirm"
773 # Go to the confirmation page
774 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
775 assert_response :success
776 assert_template "confirmations/confirm"
778 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
779 assert_response :redirect
781 assert_response :success
782 assert_template "site/welcome"
785 def test_user_create_github_success
786 new_email = "newtester-github@osm.org"
787 email_hmac = UsersController.message_hmac(new_email)
788 display_name = "new_tester-github"
789 password = "testtest"
790 auth_uid = "123454321"
792 OmniAuth.config.add_mock(:github,
794 :info => { "email" => new_email, :name => display_name })
796 assert_difference("User.count") do
797 assert_no_difference("ActionMailer::Base.deliveries.size") do
798 perform_enqueued_jobs do
799 post auth_path(:provider => "github", :origin => "/user/new")
800 assert_redirected_to auth_success_path(:provider => "github")
802 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
803 :email => new_email, :email_hmac => email_hmac,
804 :auth_provider => "github", :auth_uid => auth_uid
808 :params => { :user => { :email => new_email,
809 :display_name => display_name,
810 :auth_provider => "github",
811 :auth_uid => "123454321",
812 :pass_crypt => password,
813 :pass_crypt_confirmation => password },
816 :email_hmac => email_hmac }
817 assert_redirected_to welcome_path
824 assert_response :success
825 assert_template "site/welcome"
828 def test_user_create_github_duplicate_email
829 dup_user = create(:user)
830 display_name = "new_tester-github"
831 auth_uid = "123454321"
833 OmniAuth.config.add_mock(:github,
835 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
836 :info => { :email => dup_user.email, :name => display_name })
838 post auth_path(:provider => "github", :origin => "/user/new")
839 assert_redirected_to auth_success_path(:provider => "github")
841 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
842 :email => dup_user.email, :email_hmac => UsersController.message_hmac(dup_user.email),
843 :auth_provider => "github", :auth_uid => auth_uid
846 assert_response :success
847 assert_template "users/new"
848 assert_select "form > div > input.is-invalid#user_email"
851 def test_user_create_github_failure
852 OmniAuth.config.mock_auth[:github] = :connection_failed
854 assert_difference("User.count", 0) do
855 assert_difference("ActionMailer::Base.deliveries.size", 0) do
856 perform_enqueued_jobs do
857 post auth_path(:provider => "github", :origin => "/user/new")
859 assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/user/new")
861 assert_redirected_to "/user/new"
867 def test_user_create_github_redirect
868 orig_email = "redirect_tester_github_orig@osm.org"
869 email_hmac = UsersController.message_hmac(orig_email)
870 new_email = "redirect_tester_github@osm.org"
871 display_name = "redirect_tester_github"
872 auth_uid = "123454321"
874 OmniAuth.config.add_mock(:github,
876 :info => { :email => orig_email, :name => display_name })
878 assert_difference("User.count") do
879 assert_difference("ActionMailer::Base.deliveries.size", 1) do
880 perform_enqueued_jobs do
881 post auth_path(:provider => "github", :origin => "/user/new")
882 assert_redirected_to auth_success_path(:provider => "github")
884 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
885 :email => orig_email, :email_hmac => email_hmac,
886 :auth_provider => "github", :auth_uid => auth_uid
889 :params => { :user => { :email => new_email,
890 :email_hmac => email_hmac,
891 :display_name => display_name,
892 :auth_provider => "github",
893 :auth_uid => auth_uid } }
894 assert_response :redirect
901 register_email = ActionMailer::Base.deliveries.first
903 assert_equal register_email.to.first, new_email
904 # Check that the confirm account url is correct
905 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
906 email_text_parts(register_email).each do |part|
907 assert_match confirm_regex, part.body.to_s
909 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
912 assert_response :success
913 assert_template "confirmations/confirm"
915 # Go to the confirmation page
916 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
917 assert_response :success
918 assert_template "confirmations/confirm"
920 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
921 assert_response :redirect
923 assert_response :success
924 assert_template "site/welcome"
927 def test_user_create_wikipedia_success
928 new_email = "newtester-wikipedia@osm.org"
929 email_hmac = UsersController.message_hmac(new_email)
930 display_name = "new_tester-wikipedia"
931 password = "testtest"
932 auth_uid = "123454321"
934 OmniAuth.config.add_mock(:wikipedia,
936 :info => { :email => new_email, :name => display_name })
938 assert_difference("User.count") do
939 assert_no_difference("ActionMailer::Base.deliveries.size") do
940 perform_enqueued_jobs do
941 post auth_path(:provider => "wikipedia", :origin => "/user/new")
942 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
944 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
945 :email => new_email, :email_hmac => email_hmac,
946 :auth_provider => "wikipedia", :auth_uid => auth_uid
949 :params => { :user => { :email => new_email,
950 :display_name => display_name,
951 :auth_provider => "wikipedia",
952 :auth_uid => "123454321",
953 :pass_crypt => password,
954 :pass_crypt_confirmation => password },
957 :email_hmac => email_hmac }
958 assert_redirected_to welcome_path
965 assert_response :success
966 assert_template "site/welcome"
969 def test_user_create_wikipedia_duplicate_email
970 dup_user = create(:user)
971 display_name = "new_tester-wikipedia"
972 auth_uid = "123454321"
974 OmniAuth.config.add_mock(:wikipedia,
976 :info => { "email" => dup_user.email, :name => display_name })
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 => dup_user.email, :email_hmac => UsersController.message_hmac(dup_user.email),
983 :auth_provider => "wikipedia", :auth_uid => auth_uid
986 assert_response :success
987 assert_template "users/new"
988 assert_select "form > div > input.is-invalid#user_email"
991 def test_user_create_wikipedia_failure
992 OmniAuth.config.mock_auth[:wikipedia] = :connection_failed
994 assert_difference("User.count", 0) do
995 assert_difference("ActionMailer::Base.deliveries.size", 0) do
996 perform_enqueued_jobs do
997 post auth_path(:provider => "wikipedia", :origin => "/user/new")
998 assert_response :redirect
1000 assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/user/new")
1002 assert_redirected_to "/user/new"
1008 def test_user_create_wikipedia_redirect
1009 orig_email = "redirect_tester_wikipedia_orig@osm.org"
1010 email_hmac = UsersController.message_hmac(orig_email)
1011 new_email = "redirect_tester_wikipedia@osm.org"
1012 display_name = "redirect_tester_wikipedia"
1013 auth_uid = "123454321"
1015 OmniAuth.config.add_mock(:wikipedia,
1017 :info => { :email => orig_email, :name => display_name })
1019 # nothing special about this page, just need a protected page to redirect back to.
1020 assert_difference("User.count") do
1021 assert_difference("ActionMailer::Base.deliveries.size", 1) do
1022 perform_enqueued_jobs do
1023 post auth_path(:provider => "wikipedia", :origin => "/user/new")
1024 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
1026 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
1027 :email => orig_email, :email_hmac => email_hmac,
1028 :auth_provider => "wikipedia", :auth_uid => auth_uid
1032 :params => { :user => { :email => new_email,
1033 :email_hmac => email_hmac,
1034 :display_name => display_name,
1035 :auth_provider => "wikipedia",
1036 :auth_uid => auth_uid } }
1037 assert_response :redirect
1044 register_email = ActionMailer::Base.deliveries.first
1046 assert_equal register_email.to.first, new_email
1047 # Check that the confirm account url is correct
1048 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
1049 email_text_parts(register_email).each do |part|
1050 assert_match confirm_regex, part.body.to_s
1052 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
1055 assert_response :success
1056 assert_template "confirmations/confirm"
1058 # Go to the confirmation page
1059 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
1060 assert_response :success
1061 assert_template "confirmations/confirm"
1063 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
1064 assert_response :redirect
1066 assert_response :success
1067 assert_template "site/welcome"