3 class UserCreationTest < ActionDispatch::IntegrationTest
5 OmniAuth.config.test_mode = true
7 stub_request(:get, /.*gravatar.com.*d=404/).to_return(:status => 404)
11 OmniAuth.config.mock_auth[:google] = nil
12 OmniAuth.config.mock_auth[:facebook] = nil
13 OmniAuth.config.mock_auth[:microsoft] = nil
14 OmniAuth.config.mock_auth[:github] = nil
15 OmniAuth.config.mock_auth[:wikipedia] = nil
16 OmniAuth.config.test_mode = false
19 def test_create_user_form
22 assert_response :success
23 assert_template "users/new"
26 def test_user_create_submit_duplicate_email
27 dup_email = create(:user).email
28 display_name = "new_tester"
29 assert_difference("User.count", 0) do
30 assert_difference("ActionMailer::Base.deliveries.size", 0) do
31 perform_enqueued_jobs do
33 :params => { :user => { :email => dup_email,
34 :display_name => display_name,
35 :pass_crypt => "testtest",
36 :pass_crypt_confirmation => "testtest" } }
40 assert_response :success
41 assert_template "users/new"
43 assert_select "form > div > input.is-invalid#user_email"
46 def test_user_create_association_submit_duplicate_email
47 dup_email = create(:user).email
48 display_name = "new_tester"
49 assert_difference("User.count", 0) do
50 assert_no_difference("ActionMailer::Base.deliveries.size") do
51 perform_enqueued_jobs do
53 :params => { :user => { :email => dup_email,
54 :display_name => display_name,
55 :pass_crypt => "testtest",
56 :pass_crypt_confirmation => "testtest",
57 :auth_provider => "google",
58 :auth_uid => "123454321" } }
62 assert_response :success
63 assert_template "users/new"
65 assert_select "form > div > input.is-invalid#user_email"
68 def test_user_create_submit_duplicate_username
69 dup_display_name = create(:user).display_name
71 assert_difference("User.count", 0) do
72 assert_difference("ActionMailer::Base.deliveries.size", 0) do
73 perform_enqueued_jobs do
75 :params => { :user => { :email => email,
76 :display_name => dup_display_name,
77 :pass_crypt => "testtest",
78 :pass_crypt_confirmation => "testtest" } }
82 assert_response :success
83 assert_template "users/new"
84 assert_select "form > div > input.is-invalid#user_display_name"
87 def test_user_create_submit_mismatched_passwords
88 email = "newtester@osm.org"
89 display_name = "new_tester"
90 assert_difference("User.count", 0) do
91 assert_difference("ActionMailer::Base.deliveries.size", 0) do
92 perform_enqueued_jobs do
94 :params => { :user => { :email => email,
95 :display_name => display_name,
96 :pass_crypt => "testtest",
97 :pass_crypt_confirmation => "blahblah" } }
101 assert_response :success
102 assert_template "users/new"
103 assert_select "form > div > div > div > input.is-invalid#user_pass_crypt_confirmation"
106 def test_user_create_association_submit_duplicate_username
107 dup_display_name = create(:user).display_name
109 assert_difference("User.count", 0) do
110 assert_no_difference("ActionMailer::Base.deliveries.size") do
111 perform_enqueued_jobs do
113 :params => { :user => { :email => email,
114 :display_name => dup_display_name,
115 :auth_provider => "google",
116 :auth_uid => "123454321" } }
120 assert_response :success
121 assert_template "users/new"
122 assert_select "form > div > input.is-invalid#user_display_name"
125 def test_user_create_success
126 new_email = "newtester@osm.org"
127 display_name = "new_tester"
129 assert_difference("User.count", 1) do
130 assert_difference("ActionMailer::Base.deliveries.size", 1) do
131 perform_enqueued_jobs do
133 :params => { :user => { :email => new_email,
134 :display_name => display_name,
135 :pass_crypt => "testtest",
136 :pass_crypt_confirmation => "testtest" } }
137 assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
143 assert_response :success
144 assert_template "confirmations/confirm"
146 user = User.find_by(:email => "newtester@osm.org")
148 assert_not_predicate user, :active?
150 register_email = ActionMailer::Base.deliveries.first
151 assert_equal register_email.to.first, new_email
152 found_confirmation_url = register_email.parts.first.parts.first.to_s =~ %r{\shttp://test.host(/\S+)\s}
153 assert found_confirmation_url
154 confirmation_url = Regexp.last_match(1)
156 post confirmation_url
158 assert_redirected_to welcome_path
161 assert_predicate user, :active?
163 assert_equal user, User.authenticate(:username => new_email, :password => "testtest")
166 # Check that the user can successfully recover their password
167 # def test_lost_password_recovery_success
168 # Open the lost password form
169 # Submit the lost password form
171 # Submit the reset password token
172 # Check that the password has changed, and the user can login
175 def test_user_create_redirect
176 new_email = "redirect_tester@osm.org"
177 display_name = "redirect_tester"
178 password = "testtest"
179 # nothing special about this page, just need a protected page to redirect back to.
180 referer = "/traces/mine"
181 assert_difference("User.count") do
182 assert_difference("ActionMailer::Base.deliveries.size", 1) do
183 perform_enqueued_jobs do
185 :params => { :user => { :email => new_email,
186 :display_name => display_name,
187 :pass_crypt => password,
188 :pass_crypt_confirmation => password },
189 :referer => referer }
190 assert_response(:redirect)
191 assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
198 register_email = ActionMailer::Base.deliveries.first
200 assert_equal register_email.to.first, new_email
201 # Check that the confirm account url is correct
202 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
203 email_text_parts(register_email).each do |part|
204 assert_match confirm_regex, part.body.to_s
206 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
209 assert_response :success
210 assert_template "confirmations/confirm"
212 # Go to the confirmation page
213 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
214 assert_response :success
215 assert_template "confirmations/confirm"
217 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
218 assert_response :redirect
220 assert_response :success
221 assert_template "site/welcome"
224 def test_user_create_google_success
225 new_email = "newtester-google@osm.org"
226 email_hmac = UsersController.message_hmac(new_email)
227 display_name = "new_tester-google"
228 auth_uid = "123454321"
230 OmniAuth.config.add_mock(:google,
232 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
233 :info => { :email => new_email, :name => display_name })
235 assert_difference("User.count") do
236 assert_no_difference("ActionMailer::Base.deliveries.size") do
237 perform_enqueued_jobs do
238 post auth_path(:provider => "google", :origin => "/user/new")
239 assert_redirected_to auth_success_path(:provider => "google")
241 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
242 :email => new_email, :email_hmac => email_hmac,
243 :auth_provider => "google", :auth_uid => auth_uid
247 :params => { :user => { :email => new_email,
248 :display_name => display_name,
249 :auth_provider => "google",
250 :auth_uid => auth_uid },
251 :email_hmac => email_hmac }
252 assert_redirected_to welcome_path
259 assert_response :success
260 assert_template "site/welcome"
263 def test_user_create_google_duplicate_email
264 dup_user = create(:user)
265 display_name = "new_tester-google"
266 auth_uid = "123454321"
268 OmniAuth.config.add_mock(:google,
270 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
271 :info => { :email => dup_user.email, :name => display_name })
273 post auth_path(:provider => "google", :origin => "/user/new")
274 assert_redirected_to auth_success_path(:provider => "google")
276 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
277 :email_hmac => UsersController.message_hmac(dup_user.email),
278 :auth_provider => "google", :auth_uid => auth_uid
281 assert_response :success
282 assert_template "users/new"
283 assert_select "form > div > input.is-invalid#user_email"
286 def test_user_create_google_failure
287 OmniAuth.config.mock_auth[:google] = :connection_failed
289 assert_difference("User.count", 0) do
290 assert_difference("ActionMailer::Base.deliveries.size", 0) do
291 perform_enqueued_jobs do
292 post auth_path(:provider => "google", :origin => "/user/new")
293 assert_response :redirect
295 assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
297 assert_redirected_to "/user/new"
303 def test_user_create_google_redirect
304 orig_email = "redirect_tester_google_orig@google.com"
305 email_hmac = UsersController.message_hmac(orig_email)
306 new_email = "redirect_tester_google@osm.org"
307 display_name = "redirect_tester_google"
308 auth_uid = "123454321"
310 OmniAuth.config.add_mock(:google,
312 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
313 :info => { :email => orig_email, :name => display_name })
315 assert_difference("User.count") do
316 assert_difference("ActionMailer::Base.deliveries.size", 1) do
317 perform_enqueued_jobs do
318 post auth_path(:provider => "google", :origin => "/user/new")
319 assert_redirected_to auth_success_path(:provider => "google")
321 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
322 :email => orig_email, :email_hmac => email_hmac,
323 :auth_provider => "google", :auth_uid => auth_uid
326 :params => { :user => { :email => new_email,
327 :email_hmac => email_hmac,
328 :display_name => display_name,
329 :auth_provider => "google",
330 :auth_uid => auth_uid } }
331 assert_response :redirect
338 register_email = ActionMailer::Base.deliveries.first
340 assert_equal register_email.to.first, new_email
341 # Check that the confirm account url is correct
342 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
343 email_text_parts(register_email).each do |part|
344 assert_match confirm_regex, part.body.to_s
346 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
349 assert_response :success
350 assert_template "confirmations/confirm"
352 # Go to the confirmation page
353 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
354 assert_response :success
355 assert_template "confirmations/confirm"
357 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
358 assert_response :redirect
360 assert_response :success
361 assert_template "site/welcome"
364 def test_user_create_facebook_success
365 new_email = "newtester-facebook@osm.org"
366 email_hmac = UsersController.message_hmac(new_email)
367 display_name = "new_tester-facebook"
368 auth_uid = "123454321"
370 OmniAuth.config.add_mock(:facebook,
372 :info => { "email" => new_email, :name => display_name })
374 assert_difference("User.count") do
375 assert_no_difference("ActionMailer::Base.deliveries.size") do
376 perform_enqueued_jobs do
377 post auth_path(:provider => "facebook", :origin => "/user/new")
378 assert_redirected_to auth_success_path(:provider => "facebook")
380 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
381 :email => new_email, :email_hmac => email_hmac,
382 :auth_provider => "facebook", :auth_uid => auth_uid
386 :params => { :user => { :email => new_email,
387 :display_name => display_name,
388 :auth_provider => "facebook",
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"
402 def test_user_create_facebook_duplicate_email
403 dup_user = create(:user)
404 display_name = "new_tester-facebook"
405 auth_uid = "123454321"
407 OmniAuth.config.add_mock(:facebook,
409 :info => { :email => dup_user.email, :name => display_name })
411 post auth_path(:provider => "facebook", :origin => "/user/new")
412 assert_redirected_to auth_success_path(:provider => "facebook")
414 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
415 :email_hmac => UsersController.message_hmac(dup_user.email),
416 :auth_provider => "facebook", :auth_uid => auth_uid
419 assert_response :success
420 assert_template "users/new"
421 assert_select "form > div > input.is-invalid#user_email"
424 def test_user_create_facebook_failure
425 OmniAuth.config.mock_auth[:facebook] = :connection_failed
427 assert_difference("User.count", 0) do
428 assert_difference("ActionMailer::Base.deliveries.size", 0) do
429 perform_enqueued_jobs do
430 post auth_path(:provider => "facebook", :origin => "/user/new")
431 assert_response :redirect
433 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
435 assert_redirected_to "/user/new"
441 def test_user_create_facebook_redirect
442 orig_email = "redirect_tester_facebook_orig@osm.org"
443 email_hmac = UsersController.message_hmac(orig_email)
444 new_email = "redirect_tester_facebook@osm.org"
445 display_name = "redirect_tester_facebook"
446 auth_uid = "123454321"
448 OmniAuth.config.add_mock(:facebook,
450 :info => { :email => orig_email, :name => display_name })
452 # nothing special about this page, just need a protected page to redirect back to.
453 assert_difference("User.count") do
454 assert_difference("ActionMailer::Base.deliveries.size", 1) do
455 perform_enqueued_jobs do
456 post auth_path(:provider => "facebook", :origin => "/user/new")
457 assert_redirected_to auth_success_path(:provider => "facebook")
459 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
460 :email => orig_email, :email_hmac => email_hmac,
461 :auth_provider => "facebook", :auth_uid => auth_uid
465 :params => { :user => { :email => new_email,
466 :email_hmac => email_hmac,
467 :display_name => display_name,
468 :auth_provider => "facebook",
469 :auth_uid => auth_uid } }
470 assert_response :redirect
477 register_email = ActionMailer::Base.deliveries.first
479 assert_equal register_email.to.first, new_email
480 # Check that the confirm account url is correct
481 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
482 email_text_parts(register_email).each do |part|
483 assert_match confirm_regex, part.body.to_s
485 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
488 assert_response :success
489 assert_template "confirmations/confirm"
491 # Go to the confirmation page
492 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
493 assert_response :success
494 assert_template "confirmations/confirm"
496 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
497 assert_response :redirect
499 assert_response :success
500 assert_template "site/welcome"
503 def test_user_create_microsoft_success
504 new_email = "newtester-microsoft@osm.org"
505 email_hmac = UsersController.message_hmac(new_email)
506 display_name = "new_tester-microsoft"
507 auth_uid = "123454321"
509 OmniAuth.config.add_mock(:microsoft,
511 :info => { "email" => new_email, :name => display_name })
513 assert_difference("User.count") do
514 assert_difference("ActionMailer::Base.deliveries.size", 0) do
515 perform_enqueued_jobs do
516 post auth_path(:provider => "microsoft", :origin => "/user/new")
517 assert_redirected_to auth_success_path(:provider => "microsoft")
519 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
520 :email => new_email, :email_hmac => email_hmac,
521 :auth_provider => "microsoft", :auth_uid => auth_uid
524 :params => { :user => { :email => new_email,
525 :display_name => display_name,
526 :auth_provider => "microsoft",
527 :auth_uid => auth_uid },
528 :email_hmac => email_hmac }
529 assert_redirected_to welcome_path
536 assert_response :success
537 assert_template "site/welcome"
540 def test_user_create_microsoft_duplicate_email
541 dup_user = create(:user)
542 display_name = "new_tester-microsoft"
543 auth_uid = "123454321"
545 OmniAuth.config.add_mock(:microsoft,
547 :info => { :email => dup_user.email, :name => display_name })
549 post auth_path(:provider => "microsoft", :origin => "/user/new")
550 assert_redirected_to auth_success_path(:provider => "microsoft")
552 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => dup_user.email,
553 :email_hmac => UsersController.message_hmac(dup_user.email),
554 :auth_provider => "microsoft", :auth_uid => auth_uid
557 assert_response :success
558 assert_template "users/new"
559 assert_select "form > div > input.is-invalid#user_email"
562 def test_user_create_microsoft_failure
563 OmniAuth.config.mock_auth[:microsoft] = :connection_failed
565 assert_difference("User.count", 0) do
566 assert_difference("ActionMailer::Base.deliveries.size", 0) do
567 perform_enqueued_jobs do
568 post auth_path(:provider => "microsoft", :origin => "/user/new")
569 assert_response :redirect
571 assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "connection_failed", :origin => "/user/new")
573 assert_redirected_to "/user/new"
579 def test_user_create_microsoft_redirect
580 orig_email = "redirect_tester_microsoft_orig@osm.org"
581 email_hmac = UsersController.message_hmac(orig_email)
582 new_email = "redirect_tester_microsoft@osm.org"
583 display_name = "redirect_tester_microsoft"
584 auth_uid = "123454321"
586 OmniAuth.config.add_mock(:microsoft,
588 :info => { :email => orig_email, :name => display_name })
590 assert_difference("User.count") do
591 assert_difference("ActionMailer::Base.deliveries.size", 1) do
592 perform_enqueued_jobs do
593 post auth_path(:provider => "microsoft", :origin => "/user/new")
594 assert_redirected_to auth_success_path(:provider => "microsoft")
596 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
597 :email => orig_email, :email_hmac => email_hmac,
598 :auth_provider => "microsoft", :auth_uid => auth_uid
602 :params => { :user => { :email => new_email,
603 :email_hmac => email_hmac,
604 :display_name => display_name,
605 :auth_provider => "microsoft",
606 :auth_uid => auth_uid } }
607 assert_response :redirect
614 register_email = ActionMailer::Base.deliveries.first
616 assert_equal register_email.to.first, new_email
617 # Check that the confirm account url is correct
618 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
619 email_text_parts(register_email).each do |part|
620 assert_match confirm_regex, part.body.to_s
622 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
625 assert_response :success
626 assert_template "confirmations/confirm"
628 # Go to the confirmation page
629 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
630 assert_response :success
631 assert_template "confirmations/confirm"
633 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
634 assert_response :redirect
636 assert_response :success
637 assert_template "site/welcome"
640 def test_user_create_github_success
641 new_email = "newtester-github@osm.org"
642 email_hmac = UsersController.message_hmac(new_email)
643 display_name = "new_tester-github"
644 password = "testtest"
645 auth_uid = "123454321"
647 OmniAuth.config.add_mock(:github,
649 :info => { "email" => new_email, :name => display_name })
651 assert_difference("User.count") do
652 assert_no_difference("ActionMailer::Base.deliveries.size") do
653 perform_enqueued_jobs do
654 post auth_path(:provider => "github", :origin => "/user/new")
655 assert_redirected_to auth_success_path(:provider => "github")
657 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
658 :email => new_email, :email_hmac => email_hmac,
659 :auth_provider => "github", :auth_uid => auth_uid
663 :params => { :user => { :email => new_email,
664 :display_name => display_name,
665 :auth_provider => "github",
666 :auth_uid => "123454321",
667 :pass_crypt => password,
668 :pass_crypt_confirmation => password },
671 :email_hmac => email_hmac }
672 assert_redirected_to welcome_path
679 assert_response :success
680 assert_template "site/welcome"
683 def test_user_create_github_duplicate_email
684 dup_user = create(:user)
685 display_name = "new_tester-github"
686 auth_uid = "123454321"
688 OmniAuth.config.add_mock(:github,
690 :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
691 :info => { :email => dup_user.email, :name => display_name })
693 post auth_path(:provider => "github", :origin => "/user/new")
694 assert_redirected_to auth_success_path(:provider => "github")
696 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
697 :email => dup_user.email, :email_hmac => UsersController.message_hmac(dup_user.email),
698 :auth_provider => "github", :auth_uid => auth_uid
701 assert_response :success
702 assert_template "users/new"
703 assert_select "form > div > input.is-invalid#user_email"
706 def test_user_create_github_failure
707 OmniAuth.config.mock_auth[:github] = :connection_failed
709 assert_difference("User.count", 0) do
710 assert_difference("ActionMailer::Base.deliveries.size", 0) do
711 perform_enqueued_jobs do
712 post auth_path(:provider => "github", :origin => "/user/new")
714 assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/user/new")
716 assert_redirected_to "/user/new"
722 def test_user_create_github_redirect
723 orig_email = "redirect_tester_github_orig@osm.org"
724 email_hmac = UsersController.message_hmac(orig_email)
725 new_email = "redirect_tester_github@osm.org"
726 display_name = "redirect_tester_github"
727 auth_uid = "123454321"
729 OmniAuth.config.add_mock(:github,
731 :info => { :email => orig_email, :name => display_name })
733 assert_difference("User.count") do
734 assert_difference("ActionMailer::Base.deliveries.size", 1) do
735 perform_enqueued_jobs do
736 post auth_path(:provider => "github", :origin => "/user/new")
737 assert_redirected_to auth_success_path(:provider => "github")
739 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
740 :email => orig_email, :email_hmac => email_hmac,
741 :auth_provider => "github", :auth_uid => auth_uid
744 :params => { :user => { :email => new_email,
745 :email_hmac => email_hmac,
746 :display_name => display_name,
747 :auth_provider => "github",
748 :auth_uid => auth_uid } }
749 assert_response :redirect
756 register_email = ActionMailer::Base.deliveries.first
758 assert_equal register_email.to.first, new_email
759 # Check that the confirm account url is correct
760 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
761 email_text_parts(register_email).each do |part|
762 assert_match confirm_regex, part.body.to_s
764 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
767 assert_response :success
768 assert_template "confirmations/confirm"
770 # Go to the confirmation page
771 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
772 assert_response :success
773 assert_template "confirmations/confirm"
775 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
776 assert_response :redirect
778 assert_response :success
779 assert_template "site/welcome"
782 def test_user_create_wikipedia_success
783 new_email = "newtester-wikipedia@osm.org"
784 email_hmac = UsersController.message_hmac(new_email)
785 display_name = "new_tester-wikipedia"
786 password = "testtest"
787 auth_uid = "123454321"
789 OmniAuth.config.add_mock(:wikipedia,
791 :info => { :email => new_email, :name => display_name })
793 assert_difference("User.count") do
794 assert_no_difference("ActionMailer::Base.deliveries.size") do
795 perform_enqueued_jobs do
796 post auth_path(:provider => "wikipedia", :origin => "/user/new")
797 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
799 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
800 :email => new_email, :email_hmac => email_hmac,
801 :auth_provider => "wikipedia", :auth_uid => auth_uid
804 :params => { :user => { :email => new_email,
805 :display_name => display_name,
806 :auth_provider => "wikipedia",
807 :auth_uid => "123454321",
808 :pass_crypt => password,
809 :pass_crypt_confirmation => password },
812 :email_hmac => email_hmac }
813 assert_redirected_to welcome_path
820 assert_response :success
821 assert_template "site/welcome"
824 def test_user_create_wikipedia_duplicate_email
825 dup_user = create(:user)
826 display_name = "new_tester-wikipedia"
827 auth_uid = "123454321"
829 OmniAuth.config.add_mock(:wikipedia,
831 :info => { "email" => dup_user.email, :name => display_name })
833 post auth_path(:provider => "wikipedia", :origin => "/user/new")
834 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
836 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
837 :email => dup_user.email, :email_hmac => UsersController.message_hmac(dup_user.email),
838 :auth_provider => "wikipedia", :auth_uid => auth_uid
841 assert_response :success
842 assert_template "users/new"
843 assert_select "form > div > input.is-invalid#user_email"
846 def test_user_create_wikipedia_failure
847 OmniAuth.config.mock_auth[:wikipedia] = :connection_failed
849 assert_difference("User.count", 0) do
850 assert_difference("ActionMailer::Base.deliveries.size", 0) do
851 perform_enqueued_jobs do
852 post auth_path(:provider => "wikipedia", :origin => "/user/new")
853 assert_response :redirect
855 assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/user/new")
857 assert_redirected_to "/user/new"
863 def test_user_create_wikipedia_redirect
864 orig_email = "redirect_tester_wikipedia_orig@osm.org"
865 email_hmac = UsersController.message_hmac(orig_email)
866 new_email = "redirect_tester_wikipedia@osm.org"
867 display_name = "redirect_tester_wikipedia"
868 auth_uid = "123454321"
870 OmniAuth.config.add_mock(:wikipedia,
872 :info => { :email => orig_email, :name => display_name })
874 # nothing special about this page, just need a protected page to redirect back to.
875 assert_difference("User.count") do
876 assert_difference("ActionMailer::Base.deliveries.size", 1) do
877 perform_enqueued_jobs do
878 post auth_path(:provider => "wikipedia", :origin => "/user/new")
879 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
881 assert_redirected_to :controller => :users, :action => "new", :nickname => display_name,
882 :email => orig_email, :email_hmac => email_hmac,
883 :auth_provider => "wikipedia", :auth_uid => auth_uid
887 :params => { :user => { :email => new_email,
888 :email_hmac => email_hmac,
889 :display_name => display_name,
890 :auth_provider => "wikipedia",
891 :auth_uid => auth_uid } }
892 assert_response :redirect
899 register_email = ActionMailer::Base.deliveries.first
901 assert_equal register_email.to.first, new_email
902 # Check that the confirm account url is correct
903 confirm_regex = Regexp.new("confirm_string=([a-zA-Z0-9%_-]*)")
904 email_text_parts(register_email).each do |part|
905 assert_match confirm_regex, part.body.to_s
907 confirm_string = CGI.unescape(email_text_parts(register_email).first.body.match(confirm_regex)[1])
910 assert_response :success
911 assert_template "confirmations/confirm"
913 # Go to the confirmation page
914 get "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
915 assert_response :success
916 assert_template "confirmations/confirm"
918 post "/user/#{display_name}/confirm", :params => { :referer => "/welcome", :confirm_string => confirm_string }
919 assert_response :redirect
921 assert_response :success
922 assert_template "site/welcome"