Fix bug allowing created elements to reference deleted ones
[rails.git] / test / integration / user_creation_test.rb
1 require "test_helper"
2
3 class UserCreationTest < ActionDispatch::IntegrationTest
4   fixtures :users
5
6   def setup
7     I18n.locale = "en"
8
9     OmniAuth.config.test_mode = true
10   end
11
12   def teardown
13     I18n.locale = "en"
14
15     OmniAuth.config.mock_auth[:openid] = nil
16     OmniAuth.config.mock_auth[:google] = nil
17     OmniAuth.config.mock_auth[:facebook] = nil
18     OmniAuth.config.mock_auth[:windowslive] = nil
19     OmniAuth.config.test_mode = false
20   end
21
22   def test_create_user_form
23     I18n.available_locales.each do |locale|
24       get_via_redirect "/user/new", {}, { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
25       assert_response :success
26       assert_template "user/new"
27     end
28   end
29
30   def test_user_create_submit_duplicate_email
31     I18n.available_locales.each do |locale|
32       dup_email = users(:public_user).email
33       display_name = "#{locale}_new_tester"
34       assert_difference("User.count", 0) do
35         assert_difference("ActionMailer::Base.deliveries.size", 0) do
36           post "/user/new",
37                { :user => { :email => dup_email, :email_confirmation => dup_email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } },
38                { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
39         end
40       end
41       assert_response :success
42       assert_template "user/new"
43       assert_equal response.headers["Content-Language"][0..1], locale.to_s[0..1] unless locale == :root
44       assert_select "form > fieldset > div.form-row > input.field_with_errors#user_email"
45       assert_no_missing_translations
46     end
47   end
48
49   def test_user_create_submit_duplicate_username
50     I18n.available_locales.each do |locale|
51       dup_display_name = users(:public_user).display_name
52       email = "#{locale}_new_tester"
53       assert_difference("User.count", 0) do
54         assert_difference("ActionMailer::Base.deliveries.size", 0) do
55           post "/user/new",
56                { :user => { :email => email, :email_confirmation => email, :display_name => dup_display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } },
57                { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
58         end
59       end
60       assert_response :success
61       assert_template "user/new"
62       assert_select "form > fieldset > div.form-row > input.field_with_errors#user_display_name"
63       assert_no_missing_translations
64     end
65   end
66
67   def test_user_create_success
68     I18n.available_locales.each do |locale|
69       new_email = "#{locale}newtester@osm.org"
70       display_name = "#{locale}_new_tester"
71
72       assert_difference("User.count", 0) do
73         assert_difference("ActionMailer::Base.deliveries.size", 0) do
74           post "/user/new",
75                :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" }
76         end
77       end
78
79       assert_redirected_to "/user/terms"
80
81       assert_difference("User.count") do
82         assert_difference("ActionMailer::Base.deliveries.size", 1) do
83           post_via_redirect "/user/save", {},
84                             { "HTTP_ACCEPT_LANGUAGE" => "#{locale}" }
85         end
86       end
87
88       # Check the e-mail
89       register_email = ActionMailer::Base.deliveries.first
90
91       assert_equal register_email.to[0], new_email
92       # Check that the confirm account url is correct
93       assert_match /#{@url}/, register_email.body.to_s
94
95       # Check the page
96       assert_response :success
97       assert_template "user/confirm"
98
99       ActionMailer::Base.deliveries.clear
100     end
101   end
102
103   # Check that the user can successfully recover their password
104   def lost_password_recovery_success
105     # Open the lost password form
106     # Submit the lost password form
107     # Check the e-mail
108     # Submit the reset password token
109     # Check that the password has changed, and the user can login
110   end
111
112   def test_user_create_redirect
113     new_email = "redirect_tester@osm.org"
114     display_name = "redirect_tester"
115     password = "testtest"
116     # nothing special about this page, just need a protected page to redirect back to.
117     referer = "/traces/mine"
118     assert_difference("User.count") do
119       assert_difference("ActionMailer::Base.deliveries.size", 1) do
120         post "/user/new",
121              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => password, :pass_crypt_confirmation => password }, :referer => referer
122         assert_redirected_to "/user/terms"
123         post_via_redirect "/user/save",
124                           :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => password, :pass_crypt_confirmation => password }
125       end
126     end
127
128     # Check the e-mail
129     register_email = ActionMailer::Base.deliveries.first
130
131     assert_equal register_email.to[0], new_email
132     # Check that the confirm account url is correct
133     confirm_regex = Regexp.new("/user/redirect_tester/confirm\\?confirm_string=([a-zA-Z0-9]*)")
134     register_email.parts.each do |part|
135       assert_match confirm_regex, part.body.to_s
136     end
137     confirm_string = register_email.parts[0].body.match(confirm_regex)[1]
138
139     # Check the page
140     assert_response :success
141     assert_template "user/confirm"
142
143     ActionMailer::Base.deliveries.clear
144
145     # Go to the confirmation page
146     get "/user/#{display_name}/confirm", :confirm_string => confirm_string
147     assert_response :success
148     assert_template "user/confirm"
149
150     post "/user/#{display_name}/confirm", :confirm_string => confirm_string
151     assert_response :redirect
152     follow_redirect!
153     assert_response :success
154     assert_template "site/welcome"
155   end
156
157   def test_user_create_openid_success
158     OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/new.tester")
159
160     new_email = "newtester-openid@osm.org"
161     display_name = "new_tester-openid"
162     password = "testtest"
163     assert_difference("User.count") do
164       assert_difference("ActionMailer::Base.deliveries.size", 1) do
165         post "/user/new",
166              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "", :pass_crypt_confirmation => "" }
167         assert_response :redirect
168         assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
169         follow_redirect!
170         assert_response :redirect
171         assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
172         follow_redirect!
173         assert_response :redirect
174         assert_redirected_to "/user/terms"
175         post "/user/save",
176              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => password, :pass_crypt_confirmation => password }
177         assert_response :redirect
178         follow_redirect!
179       end
180     end
181
182     # Check the page
183     assert_response :success
184     assert_template "user/confirm"
185
186     ActionMailer::Base.deliveries.clear
187   end
188
189   def test_user_create_openid_failure
190     OmniAuth.config.mock_auth[:openid] = :connection_failed
191
192     new_email = "newtester-openid2@osm.org"
193     display_name = "new_tester-openid2"
194     assert_difference("User.count", 0) do
195       assert_difference("ActionMailer::Base.deliveries.size", 0) do
196         post "/user/new",
197              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "", :pass_crypt_confirmation => "" }
198         assert_response :redirect
199         assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
200         follow_redirect!
201         assert_response :redirect
202         assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
203         follow_redirect!
204         assert_response :redirect
205         assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/user/new")
206         follow_redirect!
207         assert_response :redirect
208         follow_redirect!
209         assert_response :success
210         assert_template "user/new"
211       end
212     end
213
214     ActionMailer::Base.deliveries.clear
215   end
216
217   def test_user_create_openid_redirect
218     OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/new.tester")
219
220     new_email = "redirect_tester_openid@osm.org"
221     display_name = "redirect_tester_openid"
222     # nothing special about this page, just need a protected page to redirect back to.
223     referer = "/traces/mine"
224     assert_difference("User.count") do
225       assert_difference("ActionMailer::Base.deliveries.size", 1) do
226         post "/user/new",
227              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer
228         assert_response :redirect
229         assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
230         follow_redirect!
231         assert_response :redirect
232         assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
233         follow_redirect!
234         assert_response :redirect
235         assert_redirected_to "/user/terms"
236         post_via_redirect "/user/save",
237                           :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" }
238       end
239     end
240
241     # Check the e-mail
242     register_email = ActionMailer::Base.deliveries.first
243
244     assert_equal register_email.to[0], new_email
245     # Check that the confirm account url is correct
246     confirm_regex = Regexp.new("/user/redirect_tester_openid/confirm\\?confirm_string=([a-zA-Z0-9]*)")
247     register_email.parts.each do |part|
248       assert_match confirm_regex, part.body.to_s
249     end
250     confirm_string = register_email.parts[0].body.match(confirm_regex)[1]
251
252     # Check the page
253     assert_response :success
254     assert_template "user/confirm"
255
256     ActionMailer::Base.deliveries.clear
257
258     # Go to the confirmation page
259     get "/user/#{display_name}/confirm", :confirm_string => confirm_string
260     assert_response :success
261     assert_template "user/confirm"
262
263     post "/user/#{display_name}/confirm", :confirm_string => confirm_string
264     assert_response :redirect
265     follow_redirect!
266     assert_response :success
267     assert_template "site/welcome"
268   end
269
270   def test_user_create_google_success
271     OmniAuth.config.add_mock(:google, :uid => "123454321", :extra => {
272                                :id_info => { "openid_id" => "http://localhost:1123/new.tester" }
273                              })
274
275     new_email = "newtester-google@osm.org"
276     display_name = "new_tester-google"
277     password = "testtest"
278     assert_difference("User.count") do
279       assert_difference("ActionMailer::Base.deliveries.size", 1) do
280         post "/user/new",
281              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :pass_crypt => "", :pass_crypt_confirmation => "" }
282         assert_response :redirect
283         assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
284         follow_redirect!
285         assert_response :redirect
286         assert_redirected_to auth_success_path(:provider => "google")
287         follow_redirect!
288         assert_response :redirect
289         assert_redirected_to "/user/terms"
290         post "/user/save",
291              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password }
292         assert_response :redirect
293         follow_redirect!
294       end
295     end
296
297     # Check the page
298     assert_response :success
299     assert_template "user/confirm"
300
301     ActionMailer::Base.deliveries.clear
302   end
303
304   def test_user_create_google_failure
305     OmniAuth.config.mock_auth[:google] = :connection_failed
306
307     new_email = "newtester-google2@osm.org"
308     display_name = "new_tester-google2"
309     assert_difference("User.count", 0) do
310       assert_difference("ActionMailer::Base.deliveries.size", 0) do
311         post "/user/new",
312              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :pass_crypt => "", :pass_crypt_confirmation => "" }
313         assert_response :redirect
314         assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
315         follow_redirect!
316         assert_response :redirect
317         assert_redirected_to auth_success_path(:provider => "google")
318         follow_redirect!
319         assert_response :redirect
320         assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
321         follow_redirect!
322         assert_response :redirect
323         follow_redirect!
324         assert_response :success
325         assert_template "user/new"
326       end
327     end
328
329     ActionMailer::Base.deliveries.clear
330   end
331
332   def test_user_create_google_redirect
333     OmniAuth.config.add_mock(:google, :uid => "123454321", :extra => {
334                                :id_info => { "openid_id" => "http://localhost:1123/new.tester" }
335                              })
336
337     new_email = "redirect_tester_google@osm.org"
338     display_name = "redirect_tester_google"
339     # nothing special about this page, just need a protected page to redirect back to.
340     referer = "/traces/mine"
341     assert_difference("User.count") do
342       assert_difference("ActionMailer::Base.deliveries.size", 1) do
343         post "/user/new",
344              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer
345         assert_response :redirect
346         assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
347         follow_redirect!
348         assert_response :redirect
349         assert_redirected_to auth_success_path(:provider => "google")
350         follow_redirect!
351         assert_response :redirect
352         assert_redirected_to "/user/terms"
353         post_via_redirect "/user/save",
354                           :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" }
355       end
356     end
357
358     # Check the e-mail
359     register_email = ActionMailer::Base.deliveries.first
360
361     assert_equal register_email.to[0], new_email
362     # Check that the confirm account url is correct
363     confirm_regex = Regexp.new("/user/redirect_tester_google/confirm\\?confirm_string=([a-zA-Z0-9]*)")
364     register_email.parts.each do |part|
365       assert_match confirm_regex, part.body.to_s
366     end
367     confirm_string = register_email.parts[0].body.match(confirm_regex)[1]
368
369     # Check the page
370     assert_response :success
371     assert_template "user/confirm"
372
373     ActionMailer::Base.deliveries.clear
374
375     # Go to the confirmation page
376     get "/user/#{display_name}/confirm", :confirm_string => confirm_string
377     assert_response :success
378     assert_template "user/confirm"
379
380     post "/user/#{display_name}/confirm", :confirm_string => confirm_string
381     assert_response :redirect
382     follow_redirect!
383     assert_response :success
384     assert_template "site/welcome"
385   end
386
387   def test_user_create_facebook_success
388     OmniAuth.config.add_mock(:facebook, :uid => "123454321")
389
390     new_email = "newtester-facebook@osm.org"
391     display_name = "new_tester-facebook"
392     password = "testtest"
393     assert_difference("User.count") do
394       assert_difference("ActionMailer::Base.deliveries.size", 1) do
395         post "/user/new",
396              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" }
397         assert_response :redirect
398         assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
399         follow_redirect!
400         assert_response :redirect
401         assert_redirected_to auth_success_path(:provider => "facebook")
402         follow_redirect!
403         assert_response :redirect
404         assert_redirected_to "/user/terms"
405         post "/user/save",
406              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password }
407         assert_response :redirect
408         follow_redirect!
409       end
410     end
411
412     # Check the page
413     assert_response :success
414     assert_template "user/confirm"
415
416     ActionMailer::Base.deliveries.clear
417   end
418
419   def test_user_create_facebook_failure
420     OmniAuth.config.mock_auth[:facebook] = :connection_failed
421
422     new_email = "newtester-facebook2@osm.org"
423     display_name = "new_tester-facebook2"
424     assert_difference("User.count", 0) do
425       assert_difference("ActionMailer::Base.deliveries.size", 0) do
426         post "/user/new",
427              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" }
428         assert_response :redirect
429         assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
430         follow_redirect!
431         assert_response :redirect
432         assert_redirected_to auth_success_path(:provider => "facebook")
433         follow_redirect!
434         assert_response :redirect
435         assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
436         follow_redirect!
437         assert_response :redirect
438         follow_redirect!
439         assert_response :success
440         assert_template "user/new"
441       end
442     end
443
444     ActionMailer::Base.deliveries.clear
445   end
446
447   def test_user_create_facebook_redirect
448     OmniAuth.config.add_mock(:facebook, :uid => "123454321")
449
450     new_email = "redirect_tester_facebook@osm.org"
451     display_name = "redirect_tester_facebook"
452     # nothing special about this page, just need a protected page to redirect back to.
453     referer = "/traces/mine"
454     assert_difference("User.count") do
455       assert_difference("ActionMailer::Base.deliveries.size", 1) do
456         post "/user/new",
457              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer
458         assert_response :redirect
459         assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
460         follow_redirect!
461         assert_response :redirect
462         assert_redirected_to auth_success_path(:provider => "facebook")
463         follow_redirect!
464         assert_response :redirect
465         assert_redirected_to "/user/terms"
466         post_via_redirect "/user/save",
467                           :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" }
468       end
469     end
470
471     # Check the e-mail
472     register_email = ActionMailer::Base.deliveries.first
473
474     assert_equal register_email.to[0], new_email
475     # Check that the confirm account url is correct
476     confirm_regex = Regexp.new("/user/redirect_tester_facebook/confirm\\?confirm_string=([a-zA-Z0-9]*)")
477     register_email.parts.each do |part|
478       assert_match confirm_regex, part.body.to_s
479     end
480     confirm_string = register_email.parts[0].body.match(confirm_regex)[1]
481
482     # Check the page
483     assert_response :success
484     assert_template "user/confirm"
485
486     ActionMailer::Base.deliveries.clear
487
488     # Go to the confirmation page
489     get "/user/#{display_name}/confirm", :confirm_string => confirm_string
490     assert_response :success
491     assert_template "user/confirm"
492
493     post "/user/#{display_name}/confirm", :confirm_string => confirm_string
494     assert_response :redirect
495     follow_redirect!
496     assert_response :success
497     assert_template "site/welcome"
498   end
499
500   def test_user_create_windowslive_success
501     OmniAuth.config.add_mock(:windowslive, :uid => "123454321")
502
503     new_email = "newtester-windowslive@osm.org"
504     display_name = "new_tester-windowslive"
505     password = "testtest"
506     assert_difference("User.count") do
507       assert_difference("ActionMailer::Base.deliveries.size", 1) do
508         post "/user/new",
509              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :pass_crypt => "", :pass_crypt_confirmation => "" }
510         assert_response :redirect
511         assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
512         follow_redirect!
513         assert_response :redirect
514         assert_redirected_to auth_success_path(:provider => "windowslive")
515         follow_redirect!
516         assert_response :redirect
517         assert_redirected_to "/user/terms"
518         post "/user/save",
519              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password }
520         assert_response :redirect
521         follow_redirect!
522       end
523     end
524
525     # Check the page
526     assert_response :success
527     assert_template "user/confirm"
528
529     ActionMailer::Base.deliveries.clear
530   end
531
532   def test_user_create_windowslive_failure
533     OmniAuth.config.mock_auth[:windowslive] = :connection_failed
534
535     new_email = "newtester-windowslive2@osm.org"
536     display_name = "new_tester-windowslive2"
537     assert_difference("User.count", 0) do
538       assert_difference("ActionMailer::Base.deliveries.size", 0) do
539         post "/user/new",
540              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :pass_crypt => "", :pass_crypt_confirmation => "" }
541         assert_response :redirect
542         assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
543         follow_redirect!
544         assert_response :redirect
545         assert_redirected_to auth_success_path(:provider => "windowslive")
546         follow_redirect!
547         assert_response :redirect
548         assert_redirected_to auth_failure_path(:strategy => "windowslive", :message => "connection_failed", :origin => "/user/new")
549         follow_redirect!
550         assert_response :redirect
551         follow_redirect!
552         assert_response :success
553         assert_template "user/new"
554       end
555     end
556
557     ActionMailer::Base.deliveries.clear
558   end
559
560   def test_user_create_windowslive_redirect
561     OmniAuth.config.add_mock(:windowslive, :uid => "123454321")
562
563     new_email = "redirect_tester_windowslive@osm.org"
564     display_name = "redirect_tester_windowslive"
565     # nothing special about this page, just need a protected page to redirect back to.
566     referer = "/traces/mine"
567     assert_difference("User.count") do
568       assert_difference("ActionMailer::Base.deliveries.size", 1) do
569         post "/user/new",
570              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer
571         assert_response :redirect
572         assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
573         follow_redirect!
574         assert_response :redirect
575         assert_redirected_to auth_success_path(:provider => "windowslive")
576         follow_redirect!
577         assert_response :redirect
578         assert_redirected_to "/user/terms"
579         post_via_redirect "/user/save",
580                           :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" }
581       end
582     end
583
584     # Check the e-mail
585     register_email = ActionMailer::Base.deliveries.first
586
587     assert_equal register_email.to[0], new_email
588     # Check that the confirm account url is correct
589     confirm_regex = Regexp.new("/user/redirect_tester_windowslive/confirm\\?confirm_string=([a-zA-Z0-9]*)")
590     register_email.parts.each do |part|
591       assert_match confirm_regex, part.body.to_s
592     end
593     confirm_string = register_email.parts[0].body.match(confirm_regex)[1]
594
595     # Check the page
596     assert_response :success
597     assert_template "user/confirm"
598
599     ActionMailer::Base.deliveries.clear
600
601     # Go to the confirmation page
602     get "/user/#{display_name}/confirm", :confirm_string => confirm_string
603     assert_response :success
604     assert_template "user/confirm"
605
606     post "/user/#{display_name}/confirm", :confirm_string => confirm_string
607     assert_response :redirect
608     follow_redirect!
609     assert_response :success
610     assert_template "site/welcome"
611   end
612 end