3 class UserCreationTest < ActionDispatch::IntegrationTest
9 OmniAuth.config.test_mode = true
15 OmniAuth.config.mock_auth[:openid] = nil
16 OmniAuth.config.test_mode = false
19 def test_create_user_form
20 I18n.available_locales.each do |locale|
21 get_via_redirect "/user/new", {}, { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
22 assert_response :success
23 assert_template "user/new"
27 def test_user_create_submit_duplicate_email
28 I18n.available_locales.each do |locale|
29 dup_email = users(:public_user).email
30 display_name = "#{locale}_new_tester"
31 assert_difference("User.count", 0) do
32 assert_difference("ActionMailer::Base.deliveries.size", 0) do
34 { :user => { :email => dup_email, :email_confirmation => dup_email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } },
35 { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
38 assert_response :success
39 assert_template "user/new"
40 assert_equal response.headers["Content-Language"][0..1], locale.to_s[0..1] unless locale == :root
41 assert_select "form > fieldset > div.form-row > input.field_with_errors#user_email"
42 assert_no_missing_translations
46 def test_user_create_submit_duplicate_username
47 I18n.available_locales.each do |locale|
48 dup_display_name = users(:public_user).display_name
49 email = "#{locale}_new_tester"
50 assert_difference("User.count", 0) do
51 assert_difference("ActionMailer::Base.deliveries.size", 0) do
53 { :user => { :email => email, :email_confirmation => email, :display_name => dup_display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } },
54 { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
57 assert_response :success
58 assert_template "user/new"
59 assert_select "form > fieldset > div.form-row > input.field_with_errors#user_display_name"
60 assert_no_missing_translations
64 def test_user_create_success
65 I18n.available_locales.each do |locale|
66 new_email = "#{locale}newtester@osm.org"
67 display_name = "#{locale}_new_tester"
69 assert_difference("User.count", 0) do
70 assert_difference("ActionMailer::Base.deliveries.size", 0) do
72 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" }
76 assert_redirected_to "/user/terms"
78 assert_difference("User.count") do
79 assert_difference("ActionMailer::Base.deliveries.size", 1) do
80 post_via_redirect "/user/save", {},
81 { "HTTP_ACCEPT_LANGUAGE" => "#{locale}" }
86 register_email = ActionMailer::Base.deliveries.first
88 assert_equal register_email.to[0], new_email
89 # Check that the confirm account url is correct
90 assert_match /#{@url}/, register_email.body.to_s
93 assert_response :success
94 assert_template "user/confirm"
96 ActionMailer::Base.deliveries.clear
100 # Check that the user can successfully recover their password
101 def lost_password_recovery_success
102 # Open the lost password form
103 # Submit the lost password form
105 # Submit the reset password token
106 # Check that the password has changed, and the user can login
109 def test_user_create_redirect
110 new_email = "redirect_tester@osm.org"
111 display_name = "redirect_tester"
112 password = "testtest"
113 # nothing special about this page, just need a protected page to redirect back to.
114 referer = "/traces/mine"
115 assert_difference("User.count") do
116 assert_difference("ActionMailer::Base.deliveries.size", 1) do
118 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => password, :pass_crypt_confirmation => password }, :referer => referer
119 assert_redirected_to "/user/terms"
120 post_via_redirect "/user/save",
121 :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => password, :pass_crypt_confirmation => password }
126 register_email = ActionMailer::Base.deliveries.first
128 assert_equal register_email.to[0], new_email
129 # Check that the confirm account url is correct
130 confirm_regex = Regexp.new("/user/redirect_tester/confirm\\?confirm_string=([a-zA-Z0-9]*)")
131 register_email.parts.each do |part|
132 assert_match confirm_regex, part.body.to_s
134 confirm_string = register_email.parts[0].body.match(confirm_regex)[1]
137 assert_response :success
138 assert_template "user/confirm"
140 ActionMailer::Base.deliveries.clear
142 # Go to the confirmation page
143 get "/user/#{display_name}/confirm", :confirm_string => confirm_string
144 assert_response :success
145 assert_template "user/confirm"
147 post "/user/#{display_name}/confirm", :confirm_string => confirm_string
148 assert_response :redirect
150 assert_response :success
151 assert_template "site/welcome"
154 def test_user_create_openid_success
155 OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/new.tester")
157 new_email = "newtester-openid@osm.org"
158 display_name = "new_tester-openid"
159 password = "testtest"
160 assert_difference("User.count") do
161 assert_difference("ActionMailer::Base.deliveries.size", 1) do
163 :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 => "" }
164 assert_response :redirect
165 assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
167 assert_response :redirect
168 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
170 assert_response :redirect
171 assert_redirected_to "/user/terms"
173 :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 }
174 assert_response :redirect
180 assert_response :success
181 assert_template "user/confirm"
183 ActionMailer::Base.deliveries.clear
186 def test_user_create_openid_failure
187 OmniAuth.config.mock_auth[:openid] = :connection_failed
189 new_email = "newtester-openid2@osm.org"
190 display_name = "new_tester-openid2"
191 assert_difference("User.count", 0) do
192 assert_difference("ActionMailer::Base.deliveries.size", 0) do
194 :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 => "" }
195 assert_response :redirect
196 assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
198 assert_response :redirect
199 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
201 assert_response :redirect
202 assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/user/new")
204 assert_response :redirect
206 assert_response :success
207 assert_template "user/new"
211 ActionMailer::Base.deliveries.clear
214 def test_user_create_openid_redirect
215 OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/new.tester")
217 new_email = "redirect_tester_openid@osm.org"
218 display_name = "redirect_tester_openid"
219 # nothing special about this page, just need a protected page to redirect back to.
220 referer = "/traces/mine"
221 assert_difference("User.count") do
222 assert_difference("ActionMailer::Base.deliveries.size", 1) do
224 :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
225 assert_response :redirect
226 assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
228 assert_response :redirect
229 assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
231 assert_response :redirect
232 assert_redirected_to "/user/terms"
233 post_via_redirect "/user/save",
234 :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" }
239 register_email = ActionMailer::Base.deliveries.first
241 assert_equal register_email.to[0], new_email
242 # Check that the confirm account url is correct
243 confirm_regex = Regexp.new("/user/redirect_tester_openid/confirm\\?confirm_string=([a-zA-Z0-9]*)")
244 register_email.parts.each do |part|
245 assert_match confirm_regex, part.body.to_s
247 confirm_string = register_email.parts[0].body.match(confirm_regex)[1]
250 assert_response :success
251 assert_template "user/confirm"
253 ActionMailer::Base.deliveries.clear
255 # Go to the confirmation page
256 get "/user/#{display_name}/confirm", :confirm_string => confirm_string
257 assert_response :success
258 assert_template "user/confirm"
260 post "/user/#{display_name}/confirm", :confirm_string => confirm_string
261 assert_response :redirect
263 assert_response :success
264 assert_template "site/welcome"