Add support for Windows Live authentication
[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", :extra => {
389                                :id_info => { "openid_id" => "http://localhost:1123/new.tester" }
390                              })
391
392     new_email = "newtester-facebook@osm.org"
393     display_name = "new_tester-facebook"
394     password = "testtest"
395     assert_difference("User.count") do
396       assert_difference("ActionMailer::Base.deliveries.size", 1) do
397         post "/user/new",
398              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" }
399         assert_response :redirect
400         assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
401         follow_redirect!
402         assert_response :redirect
403         assert_redirected_to auth_success_path(:provider => "facebook")
404         follow_redirect!
405         assert_response :redirect
406         assert_redirected_to "/user/terms"
407         post "/user/save",
408              :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 }
409         assert_response :redirect
410         follow_redirect!
411       end
412     end
413
414     # Check the page
415     assert_response :success
416     assert_template "user/confirm"
417
418     ActionMailer::Base.deliveries.clear
419   end
420
421   def test_user_create_facebook_failure
422     OmniAuth.config.mock_auth[:facebook] = :connection_failed
423
424     new_email = "newtester-facebook2@osm.org"
425     display_name = "new_tester-facebook2"
426     assert_difference("User.count", 0) do
427       assert_difference("ActionMailer::Base.deliveries.size", 0) do
428         post "/user/new",
429              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" }
430         assert_response :redirect
431         assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
432         follow_redirect!
433         assert_response :redirect
434         assert_redirected_to auth_success_path(:provider => "facebook")
435         follow_redirect!
436         assert_response :redirect
437         assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
438         follow_redirect!
439         assert_response :redirect
440         follow_redirect!
441         assert_response :success
442         assert_template "user/new"
443       end
444     end
445
446     ActionMailer::Base.deliveries.clear
447   end
448
449   def test_user_create_facebook_redirect
450     OmniAuth.config.add_mock(:facebook, :uid => "123454321", :extra => {
451                                :id_info => { "openid_id" => "http://localhost:1123/new.tester" }
452                              })
453
454     new_email = "redirect_tester_facebook@osm.org"
455     display_name = "redirect_tester_facebook"
456     # nothing special about this page, just need a protected page to redirect back to.
457     referer = "/traces/mine"
458     assert_difference("User.count") do
459       assert_difference("ActionMailer::Base.deliveries.size", 1) do
460         post "/user/new",
461              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer
462         assert_response :redirect
463         assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
464         follow_redirect!
465         assert_response :redirect
466         assert_redirected_to auth_success_path(:provider => "facebook")
467         follow_redirect!
468         assert_response :redirect
469         assert_redirected_to "/user/terms"
470         post_via_redirect "/user/save",
471                           :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" }
472       end
473     end
474
475     # Check the e-mail
476     register_email = ActionMailer::Base.deliveries.first
477
478     assert_equal register_email.to[0], new_email
479     # Check that the confirm account url is correct
480     confirm_regex = Regexp.new("/user/redirect_tester_facebook/confirm\\?confirm_string=([a-zA-Z0-9]*)")
481     register_email.parts.each do |part|
482       assert_match confirm_regex, part.body.to_s
483     end
484     confirm_string = register_email.parts[0].body.match(confirm_regex)[1]
485
486     # Check the page
487     assert_response :success
488     assert_template "user/confirm"
489
490     ActionMailer::Base.deliveries.clear
491
492     # Go to the confirmation page
493     get "/user/#{display_name}/confirm", :confirm_string => confirm_string
494     assert_response :success
495     assert_template "user/confirm"
496
497     post "/user/#{display_name}/confirm", :confirm_string => confirm_string
498     assert_response :redirect
499     follow_redirect!
500     assert_response :success
501     assert_template "site/welcome"
502   end
503
504   def test_user_create_windowslive_success
505     OmniAuth.config.add_mock(:windowslive, :uid => "123454321", :extra => {
506                                :id_info => { "openid_id" => "http://localhost:1123/new.tester" }
507                              })
508
509     new_email = "newtester-windowslive@osm.org"
510     display_name = "new_tester-windowslive"
511     password = "testtest"
512     assert_difference("User.count") do
513       assert_difference("ActionMailer::Base.deliveries.size", 1) do
514         post "/user/new",
515              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :pass_crypt => "", :pass_crypt_confirmation => "" }
516         assert_response :redirect
517         assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
518         follow_redirect!
519         assert_response :redirect
520         assert_redirected_to auth_success_path(:provider => "windowslive")
521         follow_redirect!
522         assert_response :redirect
523         assert_redirected_to "/user/terms"
524         post "/user/save",
525              :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 }
526         assert_response :redirect
527         follow_redirect!
528       end
529     end
530
531     # Check the page
532     assert_response :success
533     assert_template "user/confirm"
534
535     ActionMailer::Base.deliveries.clear
536   end
537
538   def test_user_create_windowslive_failure
539     OmniAuth.config.mock_auth[:windowslive] = :connection_failed
540
541     new_email = "newtester-windowslive2@osm.org"
542     display_name = "new_tester-windowslive2"
543     assert_difference("User.count", 0) do
544       assert_difference("ActionMailer::Base.deliveries.size", 0) do
545         post "/user/new",
546              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :pass_crypt => "", :pass_crypt_confirmation => "" }
547         assert_response :redirect
548         assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
549         follow_redirect!
550         assert_response :redirect
551         assert_redirected_to auth_success_path(:provider => "windowslive")
552         follow_redirect!
553         assert_response :redirect
554         assert_redirected_to auth_failure_path(:strategy => "windowslive", :message => "connection_failed", :origin => "/user/new")
555         follow_redirect!
556         assert_response :redirect
557         follow_redirect!
558         assert_response :success
559         assert_template "user/new"
560       end
561     end
562
563     ActionMailer::Base.deliveries.clear
564   end
565
566   def test_user_create_windowslive_redirect
567     OmniAuth.config.add_mock(:windowslive, :uid => "123454321", :extra => {
568                                :id_info => { "openid_id" => "http://localhost:1123/new.tester" }
569                              })
570
571     new_email = "redirect_tester_windowslive@osm.org"
572     display_name = "redirect_tester_windowslive"
573     # nothing special about this page, just need a protected page to redirect back to.
574     referer = "/traces/mine"
575     assert_difference("User.count") do
576       assert_difference("ActionMailer::Base.deliveries.size", 1) do
577         post "/user/new",
578              :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer
579         assert_response :redirect
580         assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
581         follow_redirect!
582         assert_response :redirect
583         assert_redirected_to auth_success_path(:provider => "windowslive")
584         follow_redirect!
585         assert_response :redirect
586         assert_redirected_to "/user/terms"
587         post_via_redirect "/user/save",
588                           :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" }
589       end
590     end
591
592     # Check the e-mail
593     register_email = ActionMailer::Base.deliveries.first
594
595     assert_equal register_email.to[0], new_email
596     # Check that the confirm account url is correct
597     confirm_regex = Regexp.new("/user/redirect_tester_windowslive/confirm\\?confirm_string=([a-zA-Z0-9]*)")
598     register_email.parts.each do |part|
599       assert_match confirm_regex, part.body.to_s
600     end
601     confirm_string = register_email.parts[0].body.match(confirm_regex)[1]
602
603     # Check the page
604     assert_response :success
605     assert_template "user/confirm"
606
607     ActionMailer::Base.deliveries.clear
608
609     # Go to the confirmation page
610     get "/user/#{display_name}/confirm", :confirm_string => confirm_string
611     assert_response :success
612     assert_template "user/confirm"
613
614     post "/user/#{display_name}/confirm", :confirm_string => confirm_string
615     assert_response :redirect
616     follow_redirect!
617     assert_response :success
618     assert_template "site/welcome"
619   end
620 end