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)
156 ActionMailer::Base.deliveries.clear
158 post confirmation_url
160 assert_redirected_to welcome_path
163 assert_predicate user, :active?
165 assert_equal user, User.authenticate(:username => new_email, :password => "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 ActionMailer::Base.deliveries.clear
216 # Go to the confirmation page
217 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
218 assert_response :success
219 assert_template "confirmations/confirm"
221 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
222 assert_response :redirect
224 assert_response :success
225 assert_template "site/welcome"
228 def test_user_create_openid_success
229 new_email = "newtester-openid@osm.org"
230 display_name = "new_tester-openid"
231 openid_url = "http://localhost:1000/new.tester"
232 auth_uid = "http://localhost:1123/new.tester"
234 OmniAuth.config.add_mock(:openid,
236 :info => { :email => new_email, :name => display_name })
238 assert_difference("User.count") do
239 assert_difference("ActionMailer::Base.deliveries.size", 1) do
240 perform_enqueued_jobs do
241 post auth_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
242 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
244 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => new_email,
245 :auth_provider => "openid", :auth_uid => auth_uid
248 :params => { :user => { :email => new_email,
249 :display_name => display_name,
250 :auth_provider => "openid",
251 :auth_uid => auth_uid } }
257 assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
259 ActionMailer::Base.deliveries.clear
262 def test_user_create_openid_duplicate_email
263 dup_user = create(:user)
264 display_name = "new_tester-openid"
265 auth_uid = "123454321"
267 OmniAuth.config.add_mock(:openid,
269 :info => { :email => dup_user.email, :name => display_name })
271 post auth_path(:provider => "openid", :origin => "/user/new")
272 assert_redirected_to auth_success_path(:provider => "openid", :origin => "/user/new")
274 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
275 :auth_provider => "openid", :auth_uid => auth_uid
278 assert_response :success
279 assert_template "users/new"
280 assert_select "form > div > input.is-invalid#user_email"
282 ActionMailer::Base.deliveries.clear
285 def test_user_create_openid_failure
286 OmniAuth.config.mock_auth[:openid] = :connection_failed
288 assert_difference("User.count", 0) do
289 assert_difference("ActionMailer::Base.deliveries.size", 0) do
290 perform_enqueued_jobs do
291 post auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
293 assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/user/new")
295 assert_redirected_to "/user/new"
300 ActionMailer::Base.deliveries.clear
303 def test_user_create_openid_redirect
304 openid_url = "http://localhost:1000/new.tester"
305 auth_uid = "http://localhost:1123/new.tester"
306 new_email = "redirect_tester_openid@osm.org"
307 display_name = "redirect_tester_openid"
309 OmniAuth.config.add_mock(:openid,
311 :info => { :email => new_email, :name => display_name })
313 assert_difference("User.count") do
314 assert_difference("ActionMailer::Base.deliveries.size", 1) do
315 perform_enqueued_jobs do
316 post auth_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
317 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
319 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => new_email,
320 :auth_provider => "openid", :auth_uid => auth_uid
323 :params => { :user => { :email => new_email,
324 :display_name => display_name,
325 :auth_provider => "openid",
326 :auth_uid => auth_uid } }
333 register_email = ActionMailer::Base.deliveries.first
335 assert_equal register_email.to.first, new_email
336 # Check that the confirm account url is correct
337 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
338 email_text_parts(register_email).each do |part|
339 assert_match confirm_regex, part.body.to_s
341 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
344 assert_response :success
345 assert_template "confirmations/confirm"
347 ActionMailer::Base.deliveries.clear
349 # Go to the confirmation page
350 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
351 assert_response :success
352 assert_template "confirmations/confirm"
354 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
355 assert_response :redirect
357 assert_response :success
358 assert_template "site/welcome"
361 def test_user_create_google_success
362 new_email = "newtester-google@osm.org"
363 email_hmac = UsersController.message_hmac(new_email)
364 display_name = "new_tester-google"
365 auth_uid = "123454321"
367 OmniAuth.config.add_mock(:google,
369 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
370 :info => { :email => new_email, :name => display_name })
372 assert_difference("User.count") do
373 assert_no_difference("ActionMailer::Base.deliveries.size") do
374 perform_enqueued_jobs do
375 post auth_path(:provider => "google", :origin => "/user/new")
376 assert_redirected_to auth_success_path(:provider => "google")
378 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
379 :email => new_email, :email_hmac => email_hmac,
380 :auth_provider => "google", :auth_uid => auth_uid
384 :params => { :user => { :email => new_email,
385 :display_name => display_name,
386 :auth_provider => "google",
387 :auth_uid => auth_uid },
388 :email_hmac => email_hmac }
389 assert_redirected_to welcome_path
396 assert_response :success
397 assert_template "site/welcome"
399 ActionMailer::Base.deliveries.clear
402 def test_user_create_google_duplicate_email
403 dup_user = create(:user)
404 display_name = "new_tester-google"
405 auth_uid = "123454321"
407 OmniAuth.config.add_mock(:google,
409 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
410 :info => { :email => dup_user.email, :name => display_name })
412 post auth_path(:provider => "google", :origin => "/user/new")
413 assert_redirected_to auth_success_path(:provider => "google")
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 => "google", :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_google_failure
428 OmniAuth.config.mock_auth[:google] = :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 => "google", :origin => "/user/new")
434 assert_response :redirect
436 assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
438 assert_redirected_to "/user/new"
443 ActionMailer::Base.deliveries.clear
446 def test_user_create_google_redirect
447 orig_email = "redirect_tester_google_orig@google.com"
448 email_hmac = UsersController.message_hmac(orig_email)
449 new_email = "redirect_tester_google@osm.org"
450 display_name = "redirect_tester_google"
451 auth_uid = "123454321"
453 OmniAuth.config.add_mock(:google,
455 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
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 => "google", :origin => "/user/new")
462 assert_redirected_to auth_success_path(:provider => "google")
464 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
465 :email => orig_email, :email_hmac => email_hmac,
466 :auth_provider => "google", :auth_uid => auth_uid
469 :params => { :user => { :email => new_email,
470 :email_hmac => email_hmac,
471 :display_name => display_name,
472 :auth_provider => "google",
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"
546 ActionMailer::Base.deliveries.clear
549 def test_user_create_facebook_duplicate_email
550 dup_user = create(:user)
551 display_name = "new_tester-facebook"
552 auth_uid = "123454321"
554 OmniAuth.config.add_mock(:facebook,
556 :info => { :email => dup_user.email, :name => display_name })
558 post auth_path(:provider => "facebook", :origin => "/user/new")
559 assert_redirected_to auth_success_path(:provider => "facebook")
561 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
562 :email_hmac => UsersController.message_hmac(dup_user.email),
563 :auth_provider => "facebook", :auth_uid => auth_uid
566 assert_response :success
567 assert_template "users/new"
568 assert_select "form > div > input.is-invalid#user_email"
570 ActionMailer::Base.deliveries.clear
573 def test_user_create_facebook_failure
574 OmniAuth.config.mock_auth[:facebook] = :connection_failed
576 assert_difference("User.count", 0) do
577 assert_difference("ActionMailer::Base.deliveries.size", 0) do
578 perform_enqueued_jobs do
579 post auth_path(:provider => "facebook", :origin => "/user/new")
580 assert_response :redirect
582 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
584 assert_redirected_to "/user/new"
589 ActionMailer::Base.deliveries.clear
592 def test_user_create_facebook_redirect
593 orig_email = "redirect_tester_facebook_orig@osm.org"
594 email_hmac = UsersController.message_hmac(orig_email)
595 new_email = "redirect_tester_facebook@osm.org"
596 display_name = "redirect_tester_facebook"
597 auth_uid = "123454321"
599 OmniAuth.config.add_mock(:facebook,
601 :info => { :email => orig_email, :name => display_name })
603 # nothing special about this page, just need a protected page to redirect back to.
604 assert_difference("User.count") do
605 assert_difference("ActionMailer::Base.deliveries.size", 1) do
606 perform_enqueued_jobs do
607 post auth_path(:provider => "facebook", :origin => "/user/new")
608 assert_redirected_to auth_success_path(:provider => "facebook")
610 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
611 :email => orig_email, :email_hmac => email_hmac,
612 :auth_provider => "facebook", :auth_uid => auth_uid
616 :params => { :user => { :email => new_email,
617 :email_hmac => email_hmac,
618 :display_name => display_name,
619 :auth_provider => "facebook",
620 :auth_uid => auth_uid } }
621 assert_response :redirect
628 register_email = ActionMailer::Base.deliveries.first
630 assert_equal register_email.to.first, new_email
631 # Check that the confirm account url is correct
632 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
633 email_text_parts(register_email).each do |part|
634 assert_match confirm_regex, part.body.to_s
636 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
639 assert_response :success
640 assert_template "confirmations/confirm"
642 ActionMailer::Base.deliveries.clear
644 # Go to the confirmation page
645 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
646 assert_response :success
647 assert_template "confirmations/confirm"
649 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
650 assert_response :redirect
652 assert_response :success
653 assert_template "site/welcome"
656 def test_user_create_microsoft_success
657 new_email = "newtester-microsoft@osm.org"
658 email_hmac = UsersController.message_hmac(new_email)
659 display_name = "new_tester-microsoft"
660 auth_uid = "123454321"
662 OmniAuth.config.add_mock(:microsoft,
664 :info => { "email" => new_email, :name => display_name })
666 assert_difference("User.count") do
667 assert_difference("ActionMailer::Base.deliveries.size", 0) do
668 perform_enqueued_jobs do
669 post auth_path(:provider => "microsoft", :origin => "/user/new")
670 assert_redirected_to auth_success_path(:provider => "microsoft")
672 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
673 :email => new_email, :email_hmac => email_hmac,
674 :auth_provider => "microsoft", :auth_uid => auth_uid
677 :params => { :user => { :email => new_email,
678 :display_name => display_name,
679 :auth_provider => "microsoft",
680 :auth_uid => auth_uid },
681 :email_hmac => email_hmac }
682 assert_redirected_to welcome_path
689 assert_response :success
690 assert_template "site/welcome"
692 ActionMailer::Base.deliveries.clear
695 def test_user_create_microsoft_duplicate_email
696 dup_user = create(:user)
697 display_name = "new_tester-microsoft"
698 auth_uid = "123454321"
700 OmniAuth.config.add_mock(:microsoft,
702 :info => { :email => dup_user.email, :name => display_name })
704 post auth_path(:provider => "microsoft", :origin => "/user/new")
705 assert_redirected_to auth_success_path(:provider => "microsoft")
707 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
708 :email_hmac => UsersController.message_hmac(dup_user.email),
709 :auth_provider => "microsoft", :auth_uid => auth_uid
712 assert_response :success
713 assert_template "users/new"
714 assert_select "form > div > input.is-invalid#user_email"
716 ActionMailer::Base.deliveries.clear
719 def test_user_create_microsoft_failure
720 OmniAuth.config.mock_auth[:microsoft] = :connection_failed
722 assert_difference("User.count", 0) do
723 assert_difference("ActionMailer::Base.deliveries.size", 0) do
724 perform_enqueued_jobs do
725 post auth_path(:provider => "microsoft", :origin => "/user/new")
726 assert_response :redirect
728 assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "connection_failed", :origin => "/user/new")
730 assert_redirected_to "/user/new"
735 ActionMailer::Base.deliveries.clear
738 def test_user_create_microsoft_redirect
739 orig_email = "redirect_tester_microsoft_orig@osm.org"
740 email_hmac = UsersController.message_hmac(orig_email)
741 new_email = "redirect_tester_microsoft@osm.org"
742 display_name = "redirect_tester_microsoft"
743 auth_uid = "123454321"
745 OmniAuth.config.add_mock(:microsoft,
747 :info => { :email => orig_email, :name => display_name })
749 assert_difference("User.count") do
750 assert_difference("ActionMailer::Base.deliveries.size", 1) do
751 perform_enqueued_jobs do
752 post auth_path(:provider => "microsoft", :origin => "/user/new")
753 assert_redirected_to auth_success_path(:provider => "microsoft")
755 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
756 :email => orig_email, :email_hmac => email_hmac,
757 :auth_provider => "microsoft", :auth_uid => auth_uid
761 :params => { :user => { :email => new_email,
762 :email_hmac => email_hmac,
763 :display_name => display_name,
764 :auth_provider => "microsoft",
765 :auth_uid => auth_uid } }
766 assert_response :redirect
773 register_email = ActionMailer::Base.deliveries.first
775 assert_equal register_email.to.first, new_email
776 # Check that the confirm account url is correct
777 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
778 email_text_parts(register_email).each do |part|
779 assert_match confirm_regex, part.body.to_s
781 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
784 assert_response :success
785 assert_template "confirmations/confirm"
787 ActionMailer::Base.deliveries.clear
789 # Go to the confirmation page
790 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
791 assert_response :success
792 assert_template "confirmations/confirm"
794 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
795 assert_response :redirect
797 assert_response :success
798 assert_template "site/welcome"
801 def test_user_create_github_success
802 new_email = "newtester-github@osm.org"
803 email_hmac = UsersController.message_hmac(new_email)
804 display_name = "new_tester-github"
805 password = "testtest"
806 auth_uid = "123454321"
808 OmniAuth.config.add_mock(:github,
810 :info => { "email" => new_email, :name => display_name })
812 assert_difference("User.count") do
813 assert_no_difference("ActionMailer::Base.deliveries.size") do
814 perform_enqueued_jobs do
815 post auth_path(:provider => "github", :origin => "/user/new")
816 assert_redirected_to auth_success_path(:provider => "github")
818 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
819 :email => new_email, :email_hmac => email_hmac,
820 :auth_provider => "github", :auth_uid => auth_uid
824 :params => { :user => { :email => new_email,
825 :display_name => display_name,
826 :auth_provider => "github",
827 :auth_uid => "123454321",
828 :pass_crypt => password,
829 :pass_crypt_confirmation => password },
832 :email_hmac => email_hmac }
833 assert_redirected_to welcome_path
840 assert_response :success
841 assert_template "site/welcome"
843 ActionMailer::Base.deliveries.clear
846 def test_user_create_github_duplicate_email
847 dup_user = create(:user)
848 display_name = "new_tester-github"
849 auth_uid = "123454321"
851 OmniAuth.config.add_mock(:github,
853 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
854 :info => { :email => dup_user.email, :name => display_name })
856 post auth_path(:provider => "github", :origin => "/user/new")
857 assert_redirected_to auth_success_path(:provider => "github")
859 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
860 :email => dup_user.email, :email_hmac => UsersController.message_hmac(dup_user.email),
861 :auth_provider => "github", :auth_uid => auth_uid
864 assert_response :success
865 assert_template "users/new"
866 assert_select "form > div > input.is-invalid#user_email"
868 ActionMailer::Base.deliveries.clear
871 def test_user_create_github_failure
872 OmniAuth.config.mock_auth[:github] = :connection_failed
874 assert_difference("User.count", 0) do
875 assert_difference("ActionMailer::Base.deliveries.size", 0) do
876 perform_enqueued_jobs do
877 post auth_path(:provider => "github", :origin => "/user/new")
879 assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/user/new")
881 assert_redirected_to "/user/new"
886 ActionMailer::Base.deliveries.clear
889 def test_user_create_github_redirect
890 orig_email = "redirect_tester_github_orig@osm.org"
891 email_hmac = UsersController.message_hmac(orig_email)
892 new_email = "redirect_tester_github@osm.org"
893 display_name = "redirect_tester_github"
894 auth_uid = "123454321"
896 OmniAuth.config.add_mock(:github,
898 :info => { :email => orig_email, :name => display_name })
900 assert_difference("User.count") do
901 assert_difference("ActionMailer::Base.deliveries.size", 1) do
902 perform_enqueued_jobs do
903 post auth_path(:provider => "github", :origin => "/user/new")
904 assert_redirected_to auth_success_path(:provider => "github")
906 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
907 :email => orig_email, :email_hmac => email_hmac,
908 :auth_provider => "github", :auth_uid => auth_uid
911 :params => { :user => { :email => new_email,
912 :email_hmac => email_hmac,
913 :display_name => display_name,
914 :auth_provider => "github",
915 :auth_uid => auth_uid } }
916 assert_response :redirect
923 register_email = ActionMailer::Base.deliveries.first
925 assert_equal register_email.to.first, new_email
926 # Check that the confirm account url is correct
927 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
928 email_text_parts(register_email).each do |part|
929 assert_match confirm_regex, part.body.to_s
931 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
934 assert_response :success
935 assert_template "confirmations/confirm"
937 ActionMailer::Base.deliveries.clear
939 # Go to the confirmation page
940 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
941 assert_response :success
942 assert_template "confirmations/confirm"
944 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
945 assert_response :redirect
947 assert_response :success
948 assert_template "site/welcome"
951 def test_user_create_wikipedia_success
952 new_email = "newtester-wikipedia@osm.org"
953 email_hmac = UsersController.message_hmac(new_email)
954 display_name = "new_tester-wikipedia"
955 password = "testtest"
956 auth_uid = "123454321"
958 OmniAuth.config.add_mock(:wikipedia,
960 :info => { :email => new_email, :name => display_name })
962 assert_difference("User.count") do
963 assert_no_difference("ActionMailer::Base.deliveries.size") do
964 perform_enqueued_jobs do
965 post auth_path(:provider => "wikipedia", :origin => "/user/new")
966 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
968 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
969 :email => new_email, :email_hmac => email_hmac,
970 :auth_provider => "wikipedia", :auth_uid => auth_uid
973 :params => { :user => { :email => new_email,
974 :display_name => display_name,
975 :auth_provider => "wikipedia",
976 :auth_uid => "123454321",
977 :pass_crypt => password,
978 :pass_crypt_confirmation => password },
981 :email_hmac => email_hmac }
982 assert_redirected_to welcome_path
989 assert_response :success
990 assert_template "site/welcome"
993 def test_user_create_wikipedia_duplicate_email
994 dup_user = create(:user)
995 display_name = "new_tester-wikipedia"
996 auth_uid = "123454321"
998 OmniAuth.config.add_mock(:wikipedia,
1000 :info => { "email" => dup_user.email, :name => display_name })
1002 post auth_path(:provider => "wikipedia", :origin => "/user/new")
1003 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
1005 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
1006 :email => dup_user.email, :email_hmac => UsersController.message_hmac(dup_user.email),
1007 :auth_provider => "wikipedia", :auth_uid => auth_uid
1010 assert_response :success
1011 assert_template "users/new"
1012 assert_select "form > div > input.is-invalid#user_email"
1014 ActionMailer::Base.deliveries.clear
1017 def test_user_create_wikipedia_failure
1018 OmniAuth.config.mock_auth[:wikipedia] = :connection_failed
1020 assert_difference("User.count", 0) do
1021 assert_difference("ActionMailer::Base.deliveries.size", 0) do
1022 perform_enqueued_jobs do
1023 post auth_path(:provider => "wikipedia", :origin => "/user/new")
1024 assert_response :redirect
1026 assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/user/new")
1028 assert_redirected_to "/user/new"
1033 ActionMailer::Base.deliveries.clear
1036 def test_user_create_wikipedia_redirect
1037 orig_email = "redirect_tester_wikipedia_orig@osm.org"
1038 email_hmac = UsersController.message_hmac(orig_email)
1039 new_email = "redirect_tester_wikipedia@osm.org"
1040 display_name = "redirect_tester_wikipedia"
1041 auth_uid = "123454321"
1043 OmniAuth.config.add_mock(:wikipedia,
1045 :info => { :email => orig_email, :name => display_name })
1047 # nothing special about this page, just need a protected page to redirect back to.
1048 assert_difference("User.count") do
1049 assert_difference("ActionMailer::Base.deliveries.size", 1) do
1050 perform_enqueued_jobs do
1051 post auth_path(:provider => "wikipedia", :origin => "/user/new")
1052 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
1054 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
1055 :email => orig_email, :email_hmac => email_hmac,
1056 :auth_provider => "wikipedia", :auth_uid => auth_uid
1060 :params => { :user => { :email => new_email,
1061 :email_hmac => email_hmac,
1062 :display_name => display_name,
1063 :auth_provider => "wikipedia",
1064 :auth_uid => auth_uid } }
1065 assert_response :redirect
1072 register_email = ActionMailer::Base.deliveries.first
1074 assert_equal register_email.to.first, new_email
1075 # Check that the confirm account url is correct
1076 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
1077 email_text_parts(register_email).each do |part|
1078 assert_match confirm_regex, part.body.to_s
1080 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
1083 assert_response :success
1084 assert_template "confirmations/confirm"
1086 ActionMailer::Base.deliveries.clear
1088 # Go to the confirmation page
1089 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
1090 assert_response :success
1091 assert_template "confirmations/confirm"
1093 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
1094 assert_response :redirect
1096 assert_response :success
1097 assert_template "site/welcome"