3 class UserCreationTest < ActionDispatch::IntegrationTest
5 OmniAuth.config.test_mode = true
7 stub_request(:get, /.*gravatar.com.*d=404/).to_return(:status => 404)
11 OmniAuth.config.mock_auth[:openid] = nil
12 OmniAuth.config.mock_auth[:google] = nil
13 OmniAuth.config.mock_auth[:facebook] = nil
14 OmniAuth.config.mock_auth[:microsoft] = nil
15 OmniAuth.config.mock_auth[:github] = nil
16 OmniAuth.config.mock_auth[:wikipedia] = nil
17 OmniAuth.config.test_mode = false
20 def test_create_user_form
23 assert_response :success
24 assert_template "users/new"
27 def test_user_create_submit_duplicate_email
28 dup_email = create(:user).email
29 display_name = "new_tester"
30 assert_difference("User.count", 0) do
31 assert_difference("ActionMailer::Base.deliveries.size", 0) do
32 perform_enqueued_jobs do
34 :params => { :user => { :email => dup_email,
35 :display_name => display_name,
36 :pass_crypt => "testtest",
37 :pass_crypt_confirmation => "testtest" } }
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_openid_success
226 new_email = "newtester-openid@osm.org"
227 display_name = "new_tester-openid"
228 openid_url = "http://localhost:1000/new.tester"
229 auth_uid = "http://localhost:1123/new.tester"
231 OmniAuth.config.add_mock(:openid,
233 :info => { :email => new_email, :name => display_name })
235 assert_difference("User.count") do
236 assert_difference("ActionMailer::Base.deliveries.size", 1) do
237 perform_enqueued_jobs do
238 post auth_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
239 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
241 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => new_email,
242 :auth_provider => "openid", :auth_uid => auth_uid
245 :params => { :user => { :email => new_email,
246 :display_name => display_name,
247 :auth_provider => "openid",
248 :auth_uid => auth_uid } }
254 assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
257 def test_user_create_openid_duplicate_email
258 dup_user = create(:user)
259 display_name = "new_tester-openid"
260 auth_uid = "123454321"
262 OmniAuth.config.add_mock(:openid,
264 :info => { :email => dup_user.email, :name => display_name })
266 post auth_path(:provider => "openid", :origin => "/user/new")
267 assert_redirected_to auth_success_path(:provider => "openid", :origin => "/user/new")
269 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
270 :auth_provider => "openid", :auth_uid => auth_uid
273 assert_response :success
274 assert_template "users/new"
275 assert_select "form > div > input.is-invalid#user_email"
278 def test_user_create_openid_failure
279 OmniAuth.config.mock_auth[:openid] = :connection_failed
281 assert_difference("User.count", 0) do
282 assert_difference("ActionMailer::Base.deliveries.size", 0) do
283 perform_enqueued_jobs do
284 post auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
286 assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/user/new")
288 assert_redirected_to "/user/new"
294 def test_user_create_openid_redirect
295 openid_url = "http://localhost:1000/new.tester"
296 auth_uid = "http://localhost:1123/new.tester"
297 new_email = "redirect_tester_openid@osm.org"
298 display_name = "redirect_tester_openid"
300 OmniAuth.config.add_mock(:openid,
302 :info => { :email => new_email, :name => display_name })
304 assert_difference("User.count") do
305 assert_difference("ActionMailer::Base.deliveries.size", 1) do
306 perform_enqueued_jobs do
307 post auth_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
308 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
310 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => new_email,
311 :auth_provider => "openid", :auth_uid => auth_uid
314 :params => { :user => { :email => new_email,
315 :display_name => display_name,
316 :auth_provider => "openid",
317 :auth_uid => auth_uid } }
324 register_email = ActionMailer::Base.deliveries.first
326 assert_equal register_email.to.first, new_email
327 # Check that the confirm account url is correct
328 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
329 email_text_parts(register_email).each do |part|
330 assert_match confirm_regex, part.body.to_s
332 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
335 assert_response :success
336 assert_template "confirmations/confirm"
338 # Go to the confirmation page
339 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
340 assert_response :success
341 assert_template "confirmations/confirm"
343 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
344 assert_response :redirect
346 assert_response :success
347 assert_template "site/welcome"
350 def test_user_create_google_success
351 new_email = "newtester-google@osm.org"
352 email_hmac = UsersController.message_hmac(new_email)
353 display_name = "new_tester-google"
354 auth_uid = "123454321"
356 OmniAuth.config.add_mock(:google,
358 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
359 :info => { :email => new_email, :name => display_name })
361 assert_difference("User.count") do
362 assert_no_difference("ActionMailer::Base.deliveries.size") do
363 perform_enqueued_jobs do
364 post auth_path(:provider => "google", :origin => "/user/new")
365 assert_redirected_to auth_success_path(:provider => "google")
367 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
368 :email => new_email, :email_hmac => email_hmac,
369 :auth_provider => "google", :auth_uid => auth_uid
373 :params => { :user => { :email => new_email,
374 :display_name => display_name,
375 :auth_provider => "google",
376 :auth_uid => auth_uid },
377 :email_hmac => email_hmac }
378 assert_redirected_to welcome_path
385 assert_response :success
386 assert_template "site/welcome"
389 def test_user_create_google_duplicate_email
390 dup_user = create(:user)
391 display_name = "new_tester-google"
392 auth_uid = "123454321"
394 OmniAuth.config.add_mock(:google,
396 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
397 :info => { :email => dup_user.email, :name => display_name })
399 post auth_path(:provider => "google", :origin => "/user/new")
400 assert_redirected_to auth_success_path(:provider => "google")
402 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
403 :email_hmac => UsersController.message_hmac(dup_user.email),
404 :auth_provider => "google", :auth_uid => auth_uid
407 assert_response :success
408 assert_template "users/new"
409 assert_select "form > div > input.is-invalid#user_email"
412 def test_user_create_google_failure
413 OmniAuth.config.mock_auth[:google] = :connection_failed
415 assert_difference("User.count", 0) do
416 assert_difference("ActionMailer::Base.deliveries.size", 0) do
417 perform_enqueued_jobs do
418 post auth_path(:provider => "google", :origin => "/user/new")
419 assert_response :redirect
421 assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
423 assert_redirected_to "/user/new"
429 def test_user_create_google_redirect
430 orig_email = "redirect_tester_google_orig@google.com"
431 email_hmac = UsersController.message_hmac(orig_email)
432 new_email = "redirect_tester_google@osm.org"
433 display_name = "redirect_tester_google"
434 auth_uid = "123454321"
436 OmniAuth.config.add_mock(:google,
438 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
439 :info => { :email => orig_email, :name => display_name })
441 assert_difference("User.count") do
442 assert_difference("ActionMailer::Base.deliveries.size", 1) do
443 perform_enqueued_jobs do
444 post auth_path(:provider => "google", :origin => "/user/new")
445 assert_redirected_to auth_success_path(:provider => "google")
447 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
448 :email => orig_email, :email_hmac => email_hmac,
449 :auth_provider => "google", :auth_uid => auth_uid
452 :params => { :user => { :email => new_email,
453 :email_hmac => email_hmac,
454 :display_name => display_name,
455 :auth_provider => "google",
456 :auth_uid => auth_uid } }
457 assert_response :redirect
464 register_email = ActionMailer::Base.deliveries.first
466 assert_equal register_email.to.first, new_email
467 # Check that the confirm account url is correct
468 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
469 email_text_parts(register_email).each do |part|
470 assert_match confirm_regex, part.body.to_s
472 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
475 assert_response :success
476 assert_template "confirmations/confirm"
478 # Go to the confirmation page
479 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
480 assert_response :success
481 assert_template "confirmations/confirm"
483 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
484 assert_response :redirect
486 assert_response :success
487 assert_template "site/welcome"
490 def test_user_create_facebook_success
491 new_email = "newtester-facebook@osm.org"
492 email_hmac = UsersController.message_hmac(new_email)
493 display_name = "new_tester-facebook"
494 auth_uid = "123454321"
496 OmniAuth.config.add_mock(:facebook,
498 :info => { "email" => new_email, :name => display_name })
500 assert_difference("User.count") do
501 assert_no_difference("ActionMailer::Base.deliveries.size") do
502 perform_enqueued_jobs do
503 post auth_path(:provider => "facebook", :origin => "/user/new")
504 assert_redirected_to auth_success_path(:provider => "facebook")
506 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
507 :email => new_email, :email_hmac => email_hmac,
508 :auth_provider => "facebook", :auth_uid => auth_uid
512 :params => { :user => { :email => new_email,
513 :display_name => display_name,
514 :auth_provider => "facebook",
515 :auth_uid => auth_uid },
516 :email_hmac => email_hmac }
517 assert_redirected_to welcome_path
524 assert_response :success
525 assert_template "site/welcome"
528 def test_user_create_facebook_duplicate_email
529 dup_user = create(:user)
530 display_name = "new_tester-facebook"
531 auth_uid = "123454321"
533 OmniAuth.config.add_mock(:facebook,
535 :info => { :email => dup_user.email, :name => display_name })
537 post auth_path(:provider => "facebook", :origin => "/user/new")
538 assert_redirected_to auth_success_path(:provider => "facebook")
540 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
541 :email_hmac => UsersController.message_hmac(dup_user.email),
542 :auth_provider => "facebook", :auth_uid => auth_uid
545 assert_response :success
546 assert_template "users/new"
547 assert_select "form > div > input.is-invalid#user_email"
550 def test_user_create_facebook_failure
551 OmniAuth.config.mock_auth[:facebook] = :connection_failed
553 assert_difference("User.count", 0) do
554 assert_difference("ActionMailer::Base.deliveries.size", 0) do
555 perform_enqueued_jobs do
556 post auth_path(:provider => "facebook", :origin => "/user/new")
557 assert_response :redirect
559 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
561 assert_redirected_to "/user/new"
567 def test_user_create_facebook_redirect
568 orig_email = "redirect_tester_facebook_orig@osm.org"
569 email_hmac = UsersController.message_hmac(orig_email)
570 new_email = "redirect_tester_facebook@osm.org"
571 display_name = "redirect_tester_facebook"
572 auth_uid = "123454321"
574 OmniAuth.config.add_mock(:facebook,
576 :info => { :email => orig_email, :name => display_name })
578 # nothing special about this page, just need a protected page to redirect back to.
579 assert_difference("User.count") do
580 assert_difference("ActionMailer::Base.deliveries.size", 1) do
581 perform_enqueued_jobs do
582 post auth_path(:provider => "facebook", :origin => "/user/new")
583 assert_redirected_to auth_success_path(:provider => "facebook")
585 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
586 :email => orig_email, :email_hmac => email_hmac,
587 :auth_provider => "facebook", :auth_uid => auth_uid
591 :params => { :user => { :email => new_email,
592 :email_hmac => email_hmac,
593 :display_name => display_name,
594 :auth_provider => "facebook",
595 :auth_uid => auth_uid } }
596 assert_response :redirect
603 register_email = ActionMailer::Base.deliveries.first
605 assert_equal register_email.to.first, new_email
606 # Check that the confirm account url is correct
607 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
608 email_text_parts(register_email).each do |part|
609 assert_match confirm_regex, part.body.to_s
611 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
614 assert_response :success
615 assert_template "confirmations/confirm"
617 # Go to the confirmation page
618 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
619 assert_response :success
620 assert_template "confirmations/confirm"
622 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
623 assert_response :redirect
625 assert_response :success
626 assert_template "site/welcome"
629 def test_user_create_microsoft_success
630 new_email = "newtester-microsoft@osm.org"
631 email_hmac = UsersController.message_hmac(new_email)
632 display_name = "new_tester-microsoft"
633 auth_uid = "123454321"
635 OmniAuth.config.add_mock(:microsoft,
637 :info => { "email" => new_email, :name => display_name })
639 assert_difference("User.count") do
640 assert_difference("ActionMailer::Base.deliveries.size", 0) do
641 perform_enqueued_jobs do
642 post auth_path(:provider => "microsoft", :origin => "/user/new")
643 assert_redirected_to auth_success_path(:provider => "microsoft")
645 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
646 :email => new_email, :email_hmac => email_hmac,
647 :auth_provider => "microsoft", :auth_uid => auth_uid
650 :params => { :user => { :email => new_email,
651 :display_name => display_name,
652 :auth_provider => "microsoft",
653 :auth_uid => auth_uid },
654 :email_hmac => email_hmac }
655 assert_redirected_to welcome_path
662 assert_response :success
663 assert_template "site/welcome"
666 def test_user_create_microsoft_duplicate_email
667 dup_user = create(:user)
668 display_name = "new_tester-microsoft"
669 auth_uid = "123454321"
671 OmniAuth.config.add_mock(:microsoft,
673 :info => { :email => dup_user.email, :name => display_name })
675 post auth_path(:provider => "microsoft", :origin => "/user/new")
676 assert_redirected_to auth_success_path(:provider => "microsoft")
678 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
679 :email_hmac => UsersController.message_hmac(dup_user.email),
680 :auth_provider => "microsoft", :auth_uid => auth_uid
683 assert_response :success
684 assert_template "users/new"
685 assert_select "form > div > input.is-invalid#user_email"
688 def test_user_create_microsoft_failure
689 OmniAuth.config.mock_auth[:microsoft] = :connection_failed
691 assert_difference("User.count", 0) do
692 assert_difference("ActionMailer::Base.deliveries.size", 0) do
693 perform_enqueued_jobs do
694 post auth_path(:provider => "microsoft", :origin => "/user/new")
695 assert_response :redirect
697 assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "connection_failed", :origin => "/user/new")
699 assert_redirected_to "/user/new"
705 def test_user_create_microsoft_redirect
706 orig_email = "redirect_tester_microsoft_orig@osm.org"
707 email_hmac = UsersController.message_hmac(orig_email)
708 new_email = "redirect_tester_microsoft@osm.org"
709 display_name = "redirect_tester_microsoft"
710 auth_uid = "123454321"
712 OmniAuth.config.add_mock(:microsoft,
714 :info => { :email => orig_email, :name => display_name })
716 assert_difference("User.count") do
717 assert_difference("ActionMailer::Base.deliveries.size", 1) do
718 perform_enqueued_jobs do
719 post auth_path(:provider => "microsoft", :origin => "/user/new")
720 assert_redirected_to auth_success_path(:provider => "microsoft")
722 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
723 :email => orig_email, :email_hmac => email_hmac,
724 :auth_provider => "microsoft", :auth_uid => auth_uid
728 :params => { :user => { :email => new_email,
729 :email_hmac => email_hmac,
730 :display_name => display_name,
731 :auth_provider => "microsoft",
732 :auth_uid => auth_uid } }
733 assert_response :redirect
740 register_email = ActionMailer::Base.deliveries.first
742 assert_equal register_email.to.first, new_email
743 # Check that the confirm account url is correct
744 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
745 email_text_parts(register_email).each do |part|
746 assert_match confirm_regex, part.body.to_s
748 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
751 assert_response :success
752 assert_template "confirmations/confirm"
754 # Go to the confirmation page
755 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
756 assert_response :success
757 assert_template "confirmations/confirm"
759 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
760 assert_response :redirect
762 assert_response :success
763 assert_template "site/welcome"
766 def test_user_create_github_success
767 new_email = "newtester-github@osm.org"
768 email_hmac = UsersController.message_hmac(new_email)
769 display_name = "new_tester-github"
770 password = "testtest"
771 auth_uid = "123454321"
773 OmniAuth.config.add_mock(:github,
775 :info => { "email" => new_email, :name => display_name })
777 assert_difference("User.count") do
778 assert_no_difference("ActionMailer::Base.deliveries.size") do
779 perform_enqueued_jobs do
780 post auth_path(:provider => "github", :origin => "/user/new")
781 assert_redirected_to auth_success_path(:provider => "github")
783 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
784 :email => new_email, :email_hmac => email_hmac,
785 :auth_provider => "github", :auth_uid => auth_uid
789 :params => { :user => { :email => new_email,
790 :display_name => display_name,
791 :auth_provider => "github",
792 :auth_uid => "123454321",
793 :pass_crypt => password,
794 :pass_crypt_confirmation => password },
797 :email_hmac => email_hmac }
798 assert_redirected_to welcome_path
805 assert_response :success
806 assert_template "site/welcome"
809 def test_user_create_github_duplicate_email
810 dup_user = create(:user)
811 display_name = "new_tester-github"
812 auth_uid = "123454321"
814 OmniAuth.config.add_mock(:github,
816 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
817 :info => { :email => dup_user.email, :name => display_name })
819 post auth_path(:provider => "github", :origin => "/user/new")
820 assert_redirected_to auth_success_path(:provider => "github")
822 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
823 :email => dup_user.email, :email_hmac => UsersController.message_hmac(dup_user.email),
824 :auth_provider => "github", :auth_uid => auth_uid
827 assert_response :success
828 assert_template "users/new"
829 assert_select "form > div > input.is-invalid#user_email"
832 def test_user_create_github_failure
833 OmniAuth.config.mock_auth[:github] = :connection_failed
835 assert_difference("User.count", 0) do
836 assert_difference("ActionMailer::Base.deliveries.size", 0) do
837 perform_enqueued_jobs do
838 post auth_path(:provider => "github", :origin => "/user/new")
840 assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/user/new")
842 assert_redirected_to "/user/new"
848 def test_user_create_github_redirect
849 orig_email = "redirect_tester_github_orig@osm.org"
850 email_hmac = UsersController.message_hmac(orig_email)
851 new_email = "redirect_tester_github@osm.org"
852 display_name = "redirect_tester_github"
853 auth_uid = "123454321"
855 OmniAuth.config.add_mock(:github,
857 :info => { :email => orig_email, :name => display_name })
859 assert_difference("User.count") do
860 assert_difference("ActionMailer::Base.deliveries.size", 1) do
861 perform_enqueued_jobs do
862 post auth_path(:provider => "github", :origin => "/user/new")
863 assert_redirected_to auth_success_path(:provider => "github")
865 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
866 :email => orig_email, :email_hmac => email_hmac,
867 :auth_provider => "github", :auth_uid => auth_uid
870 :params => { :user => { :email => new_email,
871 :email_hmac => email_hmac,
872 :display_name => display_name,
873 :auth_provider => "github",
874 :auth_uid => auth_uid } }
875 assert_response :redirect
882 register_email = ActionMailer::Base.deliveries.first
884 assert_equal register_email.to.first, new_email
885 # Check that the confirm account url is correct
886 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
887 email_text_parts(register_email).each do |part|
888 assert_match confirm_regex, part.body.to_s
890 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
893 assert_response :success
894 assert_template "confirmations/confirm"
896 # Go to the confirmation page
897 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
898 assert_response :success
899 assert_template "confirmations/confirm"
901 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
902 assert_response :redirect
904 assert_response :success
905 assert_template "site/welcome"
908 def test_user_create_wikipedia_success
909 new_email = "newtester-wikipedia@osm.org"
910 email_hmac = UsersController.message_hmac(new_email)
911 display_name = "new_tester-wikipedia"
912 password = "testtest"
913 auth_uid = "123454321"
915 OmniAuth.config.add_mock(:wikipedia,
917 :info => { :email => new_email, :name => display_name })
919 assert_difference("User.count") do
920 assert_no_difference("ActionMailer::Base.deliveries.size") do
921 perform_enqueued_jobs do
922 post auth_path(:provider => "wikipedia", :origin => "/user/new")
923 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
925 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
926 :email => new_email, :email_hmac => email_hmac,
927 :auth_provider => "wikipedia", :auth_uid => auth_uid
930 :params => { :user => { :email => new_email,
931 :display_name => display_name,
932 :auth_provider => "wikipedia",
933 :auth_uid => "123454321",
934 :pass_crypt => password,
935 :pass_crypt_confirmation => password },
938 :email_hmac => email_hmac }
939 assert_redirected_to welcome_path
946 assert_response :success
947 assert_template "site/welcome"
950 def test_user_create_wikipedia_duplicate_email
951 dup_user = create(:user)
952 display_name = "new_tester-wikipedia"
953 auth_uid = "123454321"
955 OmniAuth.config.add_mock(:wikipedia,
957 :info => { "email" => dup_user.email, :name => display_name })
959 post auth_path(:provider => "wikipedia", :origin => "/user/new")
960 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
962 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
963 :email => dup_user.email, :email_hmac => UsersController.message_hmac(dup_user.email),
964 :auth_provider => "wikipedia", :auth_uid => auth_uid
967 assert_response :success
968 assert_template "users/new"
969 assert_select "form > div > input.is-invalid#user_email"
972 def test_user_create_wikipedia_failure
973 OmniAuth.config.mock_auth[:wikipedia] = :connection_failed
975 assert_difference("User.count", 0) do
976 assert_difference("ActionMailer::Base.deliveries.size", 0) do
977 perform_enqueued_jobs do
978 post auth_path(:provider => "wikipedia", :origin => "/user/new")
979 assert_response :redirect
981 assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/user/new")
983 assert_redirected_to "/user/new"
989 def test_user_create_wikipedia_redirect
990 orig_email = "redirect_tester_wikipedia_orig@osm.org"
991 email_hmac = UsersController.message_hmac(orig_email)
992 new_email = "redirect_tester_wikipedia@osm.org"
993 display_name = "redirect_tester_wikipedia"
994 auth_uid = "123454321"
996 OmniAuth.config.add_mock(:wikipedia,
998 :info => { :email => orig_email, :name => display_name })
1000 # nothing special about this page, just need a protected page to redirect back to.
1001 assert_difference("User.count") do
1002 assert_difference("ActionMailer::Base.deliveries.size", 1) do
1003 perform_enqueued_jobs do
1004 post auth_path(:provider => "wikipedia", :origin => "/user/new")
1005 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
1007 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
1008 :email => orig_email, :email_hmac => email_hmac,
1009 :auth_provider => "wikipedia", :auth_uid => auth_uid
1013 :params => { :user => { :email => new_email,
1014 :email_hmac => email_hmac,
1015 :display_name => display_name,
1016 :auth_provider => "wikipedia",
1017 :auth_uid => auth_uid } }
1018 assert_response :redirect
1025 register_email = ActionMailer::Base.deliveries.first
1027 assert_equal register_email.to.first, new_email
1028 # Check that the confirm account url is correct
1029 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
1030 email_text_parts(register_email).each do |part|
1031 assert_match confirm_regex, part.body.to_s
1033 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
1036 assert_response :success
1037 assert_template "confirmations/confirm"
1039 # Go to the confirmation page
1040 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
1041 assert_response :success
1042 assert_template "confirmations/confirm"
1044 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
1045 assert_response :redirect
1047 assert_response :success
1048 assert_template "site/welcome"