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 :email_confirmation => dup_email,
36 :display_name => display_name,
37 :pass_crypt => "testtest",
38 :pass_crypt_confirmation => "testtest" } }
42 assert_response :success
43 assert_template "users/new"
45 assert_select "form > div > input.is-invalid#user_email"
48 def test_user_create_submit_duplicate_username
49 dup_display_name = create(:user).display_name
51 assert_difference("User.count", 0) do
52 assert_difference("ActionMailer::Base.deliveries.size", 0) do
53 perform_enqueued_jobs do
55 :params => { :user => { :email => email,
56 :email_confirmation => email,
57 :display_name => dup_display_name,
58 :pass_crypt => "testtest",
59 :pass_crypt_confirmation => "testtest" } }
63 assert_response :success
64 assert_template "users/new"
65 assert_select "form > div > input.is-invalid#user_display_name"
68 def test_user_create_success
69 new_email = "newtester@osm.org"
70 display_name = "new_tester"
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 => new_email,
77 :email_confirmation => new_email,
78 :display_name => display_name,
79 :pass_crypt => "testtest",
80 :pass_crypt_confirmation => "testtest" } }
85 assert_redirected_to "/user/terms"
87 assert_difference("User.count") do
88 assert_difference("ActionMailer::Base.deliveries.size", 1) do
89 perform_enqueued_jobs do
91 :params => { :read_ct => 1, :read_tou => 1 }
97 assert_response :success
98 assert_template "confirmations/confirm"
100 user = User.find_by(:email => "newtester@osm.org")
102 assert_not_predicate user, :active?
104 register_email = ActionMailer::Base.deliveries.first
105 assert_equal register_email.to.first, new_email
106 found_confirmation_url = register_email.parts.first.parts.first.to_s =~ %r{\shttp://test.host(/\S+)\s}
107 assert found_confirmation_url
108 confirmation_url = Regexp.last_match(1)
109 ActionMailer::Base.deliveries.clear
111 post confirmation_url
113 assert_response :redirect
114 assert_redirected_to welcome_path
117 assert_predicate user, :active?
119 assert_equal user, User.authenticate(:username => new_email, :password => "testtest")
122 def test_user_create_no_tou_failure
123 new_email = "#newtester@osm.org"
124 display_name = "new_tester"
126 assert_difference("User.count", 0) do
127 assert_difference("ActionMailer::Base.deliveries.size", 0) do
128 perform_enqueued_jobs do
130 :params => { :user => { :email => new_email,
131 :email_confirmation => new_email,
132 :display_name => display_name,
133 :pass_crypt => "testtest",
134 :pass_crypt_confirmation => "testtest" } }
139 assert_redirected_to "/user/terms"
141 perform_enqueued_jobs do
143 assert_redirected_to "/user/terms"
146 ActionMailer::Base.deliveries.clear
149 # Check that the user can successfully recover their password
150 def test_lost_password_recovery_success
151 # Open the lost password form
152 # Submit the lost password form
154 # Submit the reset password token
155 # Check that the password has changed, and the user can login
158 def test_user_create_redirect
159 new_email = "redirect_tester@osm.org"
160 display_name = "redirect_tester"
161 password = "testtest"
162 # nothing special about this page, just need a protected page to redirect back to.
163 referer = "/traces/mine"
164 assert_difference("User.count") do
165 assert_difference("ActionMailer::Base.deliveries.size", 1) do
166 perform_enqueued_jobs do
168 :params => { :user => { :email => new_email,
169 :email_confirmation => new_email,
170 :display_name => display_name,
171 :pass_crypt => password,
172 :pass_crypt_confirmation => password },
173 :referer => referer }
174 assert_redirected_to "/user/terms"
176 :params => { :user => { :email => new_email,
177 :email_confirmation => new_email,
178 :display_name => display_name,
179 :pass_crypt => password,
180 :pass_crypt_confirmation => password },
181 :read_ct => 1, :read_tou => 1 }
188 register_email = ActionMailer::Base.deliveries.first
190 assert_equal register_email.to.first, new_email
191 # Check that the confirm account url is correct
192 confirm_regex = Regexp.new("/user/redirect_tester/confirm\\?confirm_string=([a-zA-Z0-9_-]*)")
193 email_text_parts(register_email).each do |part|
194 assert_match confirm_regex, part.body.to_s
196 confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
199 assert_response :success
200 assert_template "confirmations/confirm"
202 ActionMailer::Base.deliveries.clear
204 # Go to the confirmation page
205 get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
206 assert_response :success
207 assert_template "confirmations/confirm"
209 post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
210 assert_response :redirect
212 assert_response :success
213 assert_template "site/welcome"
216 def test_user_create_openid_success
217 OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/new.tester")
219 new_email = "newtester-openid@osm.org"
220 display_name = "new_tester-openid"
221 password = "testtest"
222 assert_difference("User.count") do
223 assert_difference("ActionMailer::Base.deliveries.size", 1) do
224 perform_enqueued_jobs do
226 :params => { :user => { :email => new_email,
227 :email_confirmation => new_email,
228 :display_name => display_name,
229 :auth_provider => "openid",
230 :auth_uid => "http://localhost:1123/new.tester",
232 :pass_crypt_confirmation => "" } }
233 assert_response :redirect
234 assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
235 post response.location
236 assert_response :redirect
237 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
239 assert_response :redirect
240 assert_redirected_to "/user/terms"
242 :params => { :user => { :email => new_email,
243 :email_confirmation => new_email,
244 :display_name => display_name,
245 :auth_provider => "openid",
246 :auth_uid => "http://localhost:1123/new.tester",
247 :pass_crypt => password,
248 :pass_crypt_confirmation => password },
249 :read_ct => 1, :read_tou => 1 }
250 assert_response :redirect
257 assert_response :success
258 assert_template "confirmations/confirm"
260 ActionMailer::Base.deliveries.clear
263 def test_user_create_openid_failure
264 OmniAuth.config.mock_auth[:openid] = :connection_failed
266 new_email = "newtester-openid2@osm.org"
267 display_name = "new_tester-openid2"
268 assert_difference("User.count", 0) do
269 assert_difference("ActionMailer::Base.deliveries.size", 0) do
270 perform_enqueued_jobs do
272 :params => { :user => { :email => new_email,
273 :email_confirmation => new_email,
274 :display_name => display_name,
275 :auth_provider => "openid",
276 :auth_uid => "http://localhost:1123/new.tester",
278 :pass_crypt_confirmation => "" } }
279 assert_response :redirect
280 assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
281 post response.location
282 assert_response :redirect
283 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
285 assert_response :redirect
286 assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/user/new")
288 assert_response :redirect
290 assert_response :success
291 assert_template "users/new"
296 ActionMailer::Base.deliveries.clear
299 def test_user_create_openid_redirect
300 OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/new.tester")
302 new_email = "redirect_tester_openid@osm.org"
303 display_name = "redirect_tester_openid"
304 # nothing special about this page, just need a protected page to redirect back to.
305 referer = "/traces/mine"
306 assert_difference("User.count") do
307 assert_difference("ActionMailer::Base.deliveries.size", 1) do
308 perform_enqueued_jobs do
310 :params => { :user => { :email => new_email,
311 :email_confirmation => new_email,
312 :display_name => display_name,
313 :auth_provider => "openid",
314 :auth_uid => "http://localhost:1123/new.tester",
316 :pass_crypt_confirmation => "" },
317 :referer => referer }
318 assert_response :redirect
319 assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
320 post response.location
321 assert_response :redirect
322 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
324 assert_response :redirect
325 assert_redirected_to "/user/terms"
327 :params => { :user => { :email => new_email,
328 :email_confirmation => new_email,
329 :display_name => display_name,
330 :auth_provider => "openid",
331 :auth_uid => "http://localhost:1123/new.tester",
332 :pass_crypt => "testtest",
333 :pass_crypt_confirmation => "testtest" },
334 :read_ct => 1, :read_tou => 1 }
341 register_email = ActionMailer::Base.deliveries.first
343 assert_equal register_email.to.first, new_email
344 # Check that the confirm account url is correct
345 confirm_regex = Regexp.new("/user/redirect_tester_openid/confirm\\?confirm_string=([a-zA-Z0-9_-]*)")
346 email_text_parts(register_email).each do |part|
347 assert_match confirm_regex, part.body.to_s
349 confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
352 assert_response :success
353 assert_template "confirmations/confirm"
355 ActionMailer::Base.deliveries.clear
357 # Go to the confirmation page
358 get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
359 assert_response :success
360 assert_template "confirmations/confirm"
362 post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
363 assert_response :redirect
365 assert_response :success
366 assert_template "site/welcome"
369 def test_user_create_google_success
370 new_email = "newtester-google@osm.org"
371 display_name = "new_tester-google"
372 password = "testtest"
374 OmniAuth.config.add_mock(:google, :uid => "123454321", :info => { "email" => new_email })
376 assert_difference("User.count") do
377 assert_no_difference("ActionMailer::Base.deliveries.size") do
378 perform_enqueued_jobs do
380 :params => { :user => { :email => new_email,
381 :email_confirmation => new_email,
382 :display_name => display_name,
383 :auth_provider => "google",
385 :pass_crypt_confirmation => "" } }
386 assert_response :redirect
387 assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
388 post response.location
389 assert_response :redirect
390 assert_redirected_to auth_success_path(:provider => "google")
392 assert_response :redirect
393 assert_redirected_to "/user/terms"
395 :params => { :user => { :email => new_email,
396 :email_confirmation => new_email,
397 :display_name => display_name,
398 :auth_provider => "google",
399 :auth_uid => "123454321",
400 :pass_crypt => password,
401 :pass_crypt_confirmation => password },
402 :read_ct => 1, :read_tou => 1 }
403 assert_response :redirect
404 assert_redirected_to welcome_path
411 assert_response :success
412 assert_template "site/welcome"
414 ActionMailer::Base.deliveries.clear
417 def test_user_create_google_failure
418 OmniAuth.config.mock_auth[:google] = :connection_failed
420 new_email = "newtester-google2@osm.org"
421 display_name = "new_tester-google2"
422 assert_difference("User.count", 0) do
423 assert_difference("ActionMailer::Base.deliveries.size", 0) do
424 perform_enqueued_jobs do
426 :params => { :user => { :email => new_email,
427 :email_confirmation => new_email,
428 :display_name => display_name,
429 :auth_provider => "google",
431 :pass_crypt_confirmation => "" } }
432 assert_response :redirect
433 assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
434 post response.location
435 assert_response :redirect
436 assert_redirected_to auth_success_path(:provider => "google")
438 assert_response :redirect
439 assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
441 assert_response :redirect
443 assert_response :success
444 assert_template "users/new"
449 ActionMailer::Base.deliveries.clear
452 def test_user_create_google_redirect
453 OmniAuth.config.add_mock(:google, :uid => "123454321", :extra => {
454 :id_info => { "openid_id" => "http://localhost:1123/new.tester" }
457 new_email = "redirect_tester_google@osm.org"
458 display_name = "redirect_tester_google"
459 # nothing special about this page, just need a protected page to redirect back to.
460 referer = "/traces/mine"
461 assert_difference("User.count") do
462 assert_difference("ActionMailer::Base.deliveries.size", 1) do
463 perform_enqueued_jobs do
465 :params => { :user => { :email => new_email,
466 :email_confirmation => new_email,
467 :display_name => display_name,
468 :auth_provider => "google",
470 :pass_crypt_confirmation => "" },
471 :referer => referer }
472 assert_response :redirect
473 assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
474 post response.location
475 assert_response :redirect
476 assert_redirected_to auth_success_path(:provider => "google")
478 assert_response :redirect
479 assert_redirected_to "/user/terms"
481 :params => { :user => { :email => new_email,
482 :email_confirmation => new_email,
483 :display_name => display_name,
484 :auth_provider => "google",
485 :auth_uid => "http://localhost:1123/new.tester",
486 :pass_crypt => "testtest",
487 :pass_crypt_confirmation => "testtest" },
488 :read_ct => 1, :read_tou => 1 }
495 register_email = ActionMailer::Base.deliveries.first
497 assert_equal register_email.to.first, new_email
498 # Check that the confirm account url is correct
499 confirm_regex = Regexp.new("/user/redirect_tester_google/confirm\\?confirm_string=([a-zA-Z0-9_-]*)")
500 email_text_parts(register_email).each do |part|
501 assert_match confirm_regex, part.body.to_s
503 confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
506 assert_response :success
507 assert_template "confirmations/confirm"
509 ActionMailer::Base.deliveries.clear
511 # Go to the confirmation page
512 get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
513 assert_response :success
514 assert_template "confirmations/confirm"
516 post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
517 assert_response :redirect
519 assert_response :success
520 assert_template "site/welcome"
523 def test_user_create_facebook_success
524 new_email = "newtester-facebook@osm.org"
525 display_name = "new_tester-facebook"
526 password = "testtest"
528 OmniAuth.config.add_mock(:facebook, :uid => "123454321", :info => { "email" => new_email })
530 assert_difference("User.count") do
531 assert_no_difference("ActionMailer::Base.deliveries.size") do
532 perform_enqueued_jobs do
534 :params => { :user => { :email => new_email,
535 :email_confirmation => new_email,
536 :display_name => display_name,
537 :auth_provider => "facebook",
539 :pass_crypt_confirmation => "" } }
540 assert_response :redirect
541 assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
542 post response.location
543 assert_response :redirect
544 assert_redirected_to auth_success_path(:provider => "facebook")
546 assert_response :redirect
547 assert_redirected_to "/user/terms"
549 :params => { :user => { :email => new_email,
550 :email_confirmation => new_email,
551 :display_name => display_name,
552 :auth_provider => "facebook",
553 :auth_uid => "123454321",
554 :pass_crypt => password,
555 :pass_crypt_confirmation => password },
556 :read_ct => 1, :read_tou => 1 }
557 assert_response :redirect
558 assert_redirected_to welcome_path
565 assert_response :success
566 assert_template "site/welcome"
568 ActionMailer::Base.deliveries.clear
571 def test_user_create_facebook_failure
572 OmniAuth.config.mock_auth[:facebook] = :connection_failed
574 new_email = "newtester-facebook2@osm.org"
575 display_name = "new_tester-facebook2"
576 assert_difference("User.count", 0) do
577 assert_difference("ActionMailer::Base.deliveries.size", 0) do
578 perform_enqueued_jobs do
580 :params => { :user => { :email => new_email,
581 :email_confirmation => new_email,
582 :display_name => display_name,
583 :auth_provider => "facebook",
585 :pass_crypt_confirmation => "" } }
586 assert_response :redirect
587 assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
588 post response.location
589 assert_response :redirect
590 assert_redirected_to auth_success_path(:provider => "facebook")
592 assert_response :redirect
593 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
595 assert_response :redirect
597 assert_response :success
598 assert_template "users/new"
603 ActionMailer::Base.deliveries.clear
606 def test_user_create_facebook_redirect
607 OmniAuth.config.add_mock(:facebook, :uid => "123454321")
609 new_email = "redirect_tester_facebook@osm.org"
610 display_name = "redirect_tester_facebook"
611 # nothing special about this page, just need a protected page to redirect back to.
612 referer = "/traces/mine"
613 assert_difference("User.count") do
614 assert_difference("ActionMailer::Base.deliveries.size", 1) do
615 perform_enqueued_jobs do
617 :params => { :user => { :email => new_email,
618 :email_confirmation => new_email,
619 :display_name => display_name,
620 :auth_provider => "facebook",
622 :pass_crypt_confirmation => "" },
623 :referer => referer }
624 assert_response :redirect
625 assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
626 post response.location
627 assert_response :redirect
628 assert_redirected_to auth_success_path(:provider => "facebook")
630 assert_response :redirect
631 assert_redirected_to "/user/terms"
633 :params => { :user => { :email => new_email,
634 :email_confirmation => new_email,
635 :display_name => display_name,
636 :auth_provider => "facebook",
637 :auth_uid => "http://localhost:1123/new.tester",
638 :pass_crypt => "testtest",
639 :pass_crypt_confirmation => "testtest" },
640 :read_ct => 1, :read_tou => 1 }
647 register_email = ActionMailer::Base.deliveries.first
649 assert_equal register_email.to.first, new_email
650 # Check that the confirm account url is correct
651 confirm_regex = Regexp.new("/user/redirect_tester_facebook/confirm\\?confirm_string=([a-zA-Z0-9_-]*)")
652 email_text_parts(register_email).each do |part|
653 assert_match confirm_regex, part.body.to_s
655 confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
658 assert_response :success
659 assert_template "confirmations/confirm"
661 ActionMailer::Base.deliveries.clear
663 # Go to the confirmation page
664 get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
665 assert_response :success
666 assert_template "confirmations/confirm"
668 post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
669 assert_response :redirect
671 assert_response :success
672 assert_template "site/welcome"
675 def test_user_create_microsoft_success
676 new_email = "newtester-microsoft@osm.org"
677 display_name = "new_tester-microsoft"
678 password = "testtest"
680 OmniAuth.config.add_mock(:microsoft, :uid => "123454321", :info => { "email" => new_email })
682 assert_difference("User.count") do
683 assert_difference("ActionMailer::Base.deliveries.size", 0) do
684 perform_enqueued_jobs do
686 :params => { :user => { :email => new_email,
687 :email_confirmation => new_email,
688 :display_name => display_name,
689 :auth_provider => "microsoft",
691 :pass_crypt_confirmation => "" } }
692 assert_response :redirect
693 assert_redirected_to auth_path(:provider => "microsoft", :origin => "/user/new")
694 post response.location
695 assert_response :redirect
696 assert_redirected_to auth_success_path(:provider => "microsoft")
698 assert_response :redirect
699 assert_redirected_to "/user/terms"
701 :params => { :user => { :email => new_email,
702 :email_confirmation => new_email,
703 :display_name => display_name,
704 :auth_provider => "microsoft",
705 :auth_uid => "123454321",
706 :pass_crypt => password,
707 :pass_crypt_confirmation => password },
708 :read_ct => 1, :read_tou => 1 }
709 assert_response :redirect
710 assert_redirected_to welcome_path
717 assert_response :success
718 assert_template "site/welcome"
720 ActionMailer::Base.deliveries.clear
723 def test_user_create_microsoft_failure
724 OmniAuth.config.mock_auth[:microsoft] = :connection_failed
726 new_email = "newtester-microsoft2@osm.org"
727 display_name = "new_tester-microsoft2"
728 assert_difference("User.count", 0) do
729 assert_difference("ActionMailer::Base.deliveries.size", 0) do
730 perform_enqueued_jobs do
732 :params => { :user => { :email => new_email,
733 :email_confirmation => new_email,
734 :display_name => display_name,
735 :auth_provider => "microsoft",
737 :pass_crypt_confirmation => "" } }
738 assert_response :redirect
739 assert_redirected_to auth_path(:provider => "microsoft", :origin => "/user/new")
740 post response.location
741 assert_response :redirect
742 assert_redirected_to auth_success_path(:provider => "microsoft")
744 assert_response :redirect
745 assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "connection_failed", :origin => "/user/new")
747 assert_response :redirect
749 assert_response :success
750 assert_template "users/new"
755 ActionMailer::Base.deliveries.clear
758 def test_user_create_microsoft_redirect
759 OmniAuth.config.add_mock(:microsoft, :uid => "123454321")
761 new_email = "redirect_tester_microsoft@osm.org"
762 display_name = "redirect_tester_microsoft"
763 # nothing special about this page, just need a protected page to redirect back to.
764 referer = "/traces/mine"
765 assert_difference("User.count") do
766 assert_difference("ActionMailer::Base.deliveries.size", 1) do
767 perform_enqueued_jobs do
769 :params => { :user => { :email => new_email,
770 :email_confirmation => new_email,
771 :display_name => display_name,
772 :auth_provider => "microsoft",
774 :pass_crypt_confirmation => "" },
775 :referer => referer }
776 assert_response :redirect
777 assert_redirected_to auth_path(:provider => "microsoft", :origin => "/user/new")
778 post response.location
779 assert_response :redirect
780 assert_redirected_to auth_success_path(:provider => "microsoft")
782 assert_response :redirect
783 assert_redirected_to "/user/terms"
785 :params => { :user => { :email => new_email,
786 :email_confirmation => new_email,
787 :display_name => display_name,
788 :auth_provider => "microsoft",
789 :auth_uid => "http://localhost:1123/new.tester",
790 :pass_crypt => "testtest",
791 :pass_crypt_confirmation => "testtest" },
792 :read_ct => 1, :read_tou => 1 }
799 register_email = ActionMailer::Base.deliveries.first
801 assert_equal register_email.to.first, new_email
802 # Check that the confirm account url is correct
803 confirm_regex = Regexp.new("/user/redirect_tester_microsoft/confirm\\?confirm_string=([a-zA-Z0-9_-]*)")
804 email_text_parts(register_email).each do |part|
805 assert_match confirm_regex, part.body.to_s
807 confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
810 assert_response :success
811 assert_template "confirmations/confirm"
813 ActionMailer::Base.deliveries.clear
815 # Go to the confirmation page
816 get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
817 assert_response :success
818 assert_template "confirmations/confirm"
820 post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
821 assert_response :redirect
823 assert_response :success
824 assert_template "site/welcome"
827 def test_user_create_github_success
828 new_email = "newtester-github@osm.org"
829 display_name = "new_tester-github"
830 password = "testtest"
832 OmniAuth.config.add_mock(:github, :uid => "123454321", :info => { "email" => new_email })
834 assert_difference("User.count") do
835 assert_difference("ActionMailer::Base.deliveries.size", 1) do
836 perform_enqueued_jobs do
838 :params => { :user => { :email => new_email,
839 :email_confirmation => new_email,
840 :display_name => display_name,
841 :auth_provider => "github",
843 :pass_crypt_confirmation => "" } }
844 assert_response :redirect
845 assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
846 post response.location
847 assert_response :redirect
848 assert_redirected_to auth_success_path(:provider => "github")
850 assert_response :redirect
851 assert_redirected_to "/user/terms"
853 :params => { :user => { :email => new_email,
854 :email_confirmation => new_email,
855 :display_name => display_name,
856 :auth_provider => "github",
857 :auth_uid => "123454321",
858 :pass_crypt => password,
859 :pass_crypt_confirmation => password },
862 assert_response :redirect
863 assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
870 assert_response :success
871 assert_template "confirmations/confirm"
873 ActionMailer::Base.deliveries.clear
876 def test_user_create_github_failure
877 OmniAuth.config.mock_auth[:github] = :connection_failed
879 new_email = "newtester-github2@osm.org"
880 display_name = "new_tester-github2"
881 assert_difference("User.count", 0) do
882 assert_difference("ActionMailer::Base.deliveries.size", 0) do
883 perform_enqueued_jobs do
885 :params => { :user => { :email => new_email,
886 :email_confirmation => new_email,
887 :display_name => display_name,
888 :auth_provider => "github",
890 :pass_crypt_confirmation => "" } }
891 assert_response :redirect
892 assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
893 post response.location
894 assert_response :redirect
895 assert_redirected_to auth_success_path(:provider => "github")
897 assert_response :redirect
898 assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/user/new")
900 assert_response :redirect
902 assert_response :success
903 assert_template "users/new"
908 ActionMailer::Base.deliveries.clear
911 def test_user_create_github_redirect
912 OmniAuth.config.add_mock(:github, :uid => "123454321")
914 new_email = "redirect_tester_github@osm.org"
915 display_name = "redirect_tester_github"
916 # nothing special about this page, just need a protected page to redirect back to.
917 referer = "/traces/mine"
918 assert_difference("User.count") do
919 assert_difference("ActionMailer::Base.deliveries.size", 1) do
920 perform_enqueued_jobs do
922 :params => { :user => { :email => new_email,
923 :email_confirmation => new_email,
924 :display_name => display_name,
925 :auth_provider => "github",
927 :pass_crypt_confirmation => "" },
928 :referer => referer }
929 assert_response :redirect
930 assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
931 post response.location
932 assert_response :redirect
933 assert_redirected_to auth_success_path(:provider => "github")
935 assert_response :redirect
936 assert_redirected_to "/user/terms"
938 :params => { :user => { :email => new_email,
939 :email_confirmation => new_email,
940 :display_name => display_name,
941 :auth_provider => "github",
942 :auth_uid => "http://localhost:1123/new.tester",
943 :pass_crypt => "testtest",
944 :pass_crypt_confirmation => "testtest" },
953 register_email = ActionMailer::Base.deliveries.first
955 assert_equal register_email.to.first, new_email
956 # Check that the confirm account url is correct
957 confirm_regex = Regexp.new("/user/redirect_tester_github/confirm\\?confirm_string=([a-zA-Z0-9_-]*)")
958 email_text_parts(register_email).each do |part|
959 assert_match confirm_regex, part.body.to_s
961 confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
964 assert_response :success
965 assert_template "confirmations/confirm"
967 ActionMailer::Base.deliveries.clear
969 # Go to the confirmation page
970 get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
971 assert_response :success
972 assert_template "confirmations/confirm"
974 post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
975 assert_response :redirect
977 assert_response :success
978 assert_template "site/welcome"
981 def test_user_create_wikipedia_success
982 new_email = "newtester-wikipedia@osm.org"
983 display_name = "new_tester-wikipedia"
984 password = "testtest"
986 OmniAuth.config.add_mock(:wikipedia, :uid => "123454321", :info => { "email" => new_email })
988 assert_difference("User.count") do
989 assert_difference("ActionMailer::Base.deliveries.size", 1) do
990 perform_enqueued_jobs do
992 :params => { :user => { :email => new_email,
993 :email_confirmation => new_email,
994 :display_name => display_name,
995 :auth_provider => "wikipedia",
997 :pass_crypt_confirmation => "" } }
998 assert_response :redirect
999 assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
1000 post response.location
1001 assert_response :redirect
1002 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
1004 assert_response :redirect
1005 assert_redirected_to "/user/terms"
1007 :params => { :user => { :email => new_email,
1008 :email_confirmation => new_email,
1009 :display_name => display_name,
1010 :auth_provider => "wikipedia",
1011 :auth_uid => "123454321",
1012 :pass_crypt => password,
1013 :pass_crypt_confirmation => password },
1016 assert_response :redirect
1017 assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
1024 assert_response :success
1025 assert_template "confirmations/confirm"
1027 ActionMailer::Base.deliveries.clear
1030 def test_user_create_wikipedia_failure
1031 OmniAuth.config.mock_auth[:wikipedia] = :connection_failed
1033 new_email = "newtester-wikipedia2@osm.org"
1034 display_name = "new_tester-wikipedia2"
1035 assert_difference("User.count", 0) do
1036 assert_difference("ActionMailer::Base.deliveries.size", 0) do
1037 perform_enqueued_jobs do
1039 :params => { :user => { :email => new_email,
1040 :email_confirmation => new_email,
1041 :display_name => display_name,
1042 :auth_provider => "wikipedia",
1044 :pass_crypt_confirmation => "" } }
1045 assert_response :redirect
1046 assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
1047 post response.location
1048 assert_response :redirect
1049 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
1051 assert_response :redirect
1052 assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/user/new")
1054 assert_response :redirect
1056 assert_response :success
1057 assert_template "users/new"
1062 ActionMailer::Base.deliveries.clear
1065 def test_user_create_wikipedia_redirect
1066 OmniAuth.config.add_mock(:wikipedia, :uid => "123454321")
1068 new_email = "redirect_tester_wikipedia@osm.org"
1069 display_name = "redirect_tester_wikipedia"
1070 # nothing special about this page, just need a protected page to redirect back to.
1071 referer = "/traces/mine"
1072 assert_difference("User.count") do
1073 assert_difference("ActionMailer::Base.deliveries.size", 1) do
1074 perform_enqueued_jobs do
1076 :params => { :user => { :email => new_email,
1077 :email_confirmation => new_email,
1078 :display_name => display_name,
1079 :auth_provider => "wikipedia",
1081 :pass_crypt_confirmation => "" },
1082 :referer => referer }
1083 assert_response :redirect
1084 assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
1085 post response.location
1086 assert_response :redirect
1087 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
1089 assert_response :redirect
1090 assert_redirected_to "/user/terms"
1092 :params => { :user => { :email => new_email,
1093 :email_confirmation => new_email,
1094 :display_name => display_name,
1095 :auth_provider => "wikipedia",
1096 :auth_uid => "http://localhost:1123/new.tester",
1097 :pass_crypt => "testtest",
1098 :pass_crypt_confirmation => "testtest" },
1107 register_email = ActionMailer::Base.deliveries.first
1109 assert_equal register_email.to.first, new_email
1110 # Check that the confirm account url is correct
1111 confirm_regex = Regexp.new("/user/redirect_tester_wikipedia/confirm\\?confirm_string=([a-zA-Z0-9_-]*)")
1112 email_text_parts(register_email).each do |part|
1113 assert_match confirm_regex, part.body.to_s
1115 confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
1118 assert_response :success
1119 assert_template "confirmations/confirm"
1121 ActionMailer::Base.deliveries.clear
1123 # Go to the confirmation page
1124 get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
1125 assert_response :success
1126 assert_template "confirmations/confirm"
1128 post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
1129 assert_response :redirect
1131 assert_response :success
1132 assert_template "site/welcome"