3 class UsersControllerTest < ActionDispatch::IntegrationTest
5 # test all routes which lead to this controller
8 { :path => "/user/username/confirm", :method => :get },
9 { :controller => "confirmations", :action => "confirm", :display_name => "username" }
12 { :path => "/user/username/confirm", :method => :post },
13 { :controller => "confirmations", :action => "confirm", :display_name => "username" }
16 { :path => "/user/username/confirm/resend", :method => :post },
17 { :controller => "confirmations", :action => "confirm_resend", :display_name => "username" }
21 { :path => "/user/confirm", :method => :get },
22 { :controller => "confirmations", :action => "confirm" }
25 { :path => "/user/confirm", :method => :post },
26 { :controller => "confirmations", :action => "confirm" }
29 { :path => "/user/confirm-email", :method => :get },
30 { :controller => "confirmations", :action => "confirm_email" }
33 { :path => "/user/confirm-email", :method => :post },
34 { :controller => "confirmations", :action => "confirm_email" }
39 user = build(:user, :pending)
40 post users_path, :params => { :user => user.attributes }
41 confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user)
43 get user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
44 assert_response :success
45 assert_template :confirm
48 def test_confirm_get_already_confirmed
49 user = build(:user, :pending)
50 stub_gravatar_request(user.email)
51 post users_path, :params => { :user => user.attributes }
52 confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user)
54 # Get the confirmation page
55 get user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
56 assert_response :success
57 assert_template :confirm
60 post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
61 assert_redirected_to welcome_path
63 # Now try to get the confirmation page again
64 get user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
65 assert_redirected_to root_path
68 def test_confirm_success_no_token_no_referer
69 user = build(:user, :pending)
70 stub_gravatar_request(user.email)
71 post users_path, :params => { :user => user.attributes }
72 confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user)
76 post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
77 assert_redirected_to login_path
78 assert_match(/Confirmed your account/, flash[:notice])
81 def test_confirm_success_good_token_no_referer
82 user = build(:user, :pending)
83 stub_gravatar_request(user.email)
84 post users_path, :params => { :user => user.attributes }
85 confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user)
87 post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
88 assert_redirected_to welcome_path
91 def test_confirm_success_bad_token_no_referer
92 user = build(:user, :pending)
93 stub_gravatar_request(user.email)
94 post users_path, :params => { :user => user.attributes }
95 confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user)
98 session_for(create(:user))
100 post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
101 assert_redirected_to login_path
102 assert_match(/Confirmed your account/, flash[:notice])
105 def test_confirm_success_no_token_with_referer
106 user = build(:user, :pending)
107 stub_gravatar_request(user.email)
108 post users_path, :params => { :user => user.attributes }
109 confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user)
113 post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string, :referer => new_diary_entry_path }
114 assert_redirected_to login_path(:referer => new_diary_entry_path)
115 assert_match(/Confirmed your account/, flash[:notice])
118 def test_confirm_success_good_token_with_referer
119 user = build(:user, :pending)
120 stub_gravatar_request(user.email)
121 post users_path, :params => { :user => user.attributes }
122 confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user)
124 post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string, :referer => new_diary_entry_path }
125 assert_redirected_to new_diary_entry_path
128 def test_confirm_success_bad_token_with_referer
129 user = build(:user, :pending)
130 stub_gravatar_request(user.email)
131 post users_path, :params => { :user => user.attributes }
132 confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user)
135 session_for(create(:user))
137 post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string, :referer => new_diary_entry_path }
138 assert_redirected_to login_path(:referer => new_diary_entry_path)
139 assert_match(/Confirmed your account/, flash[:notice])
142 def test_confirm_expired_token
143 user = build(:user, :pending)
144 stub_gravatar_request(user.email)
145 post users_path, :params => { :user => user.attributes }
146 confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user)
149 post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
151 assert_redirected_to :action => "confirm"
152 assert_match(/confirmation code has expired/, flash[:error])
155 def test_confirm_already_confirmed
156 user = build(:user, :pending)
157 stub_gravatar_request(user.email)
158 post users_path, :params => { :user => user.attributes }
159 confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user)
161 post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string, :referer => new_diary_entry_path }
162 assert_redirected_to new_diary_entry_path
166 confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user)
167 post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string, :referer => new_diary_entry_path }
168 assert_redirected_to login_path
169 assert_match(/already been confirmed/, flash[:error])
172 def test_confirm_deleted
173 user = build(:user, :pending)
174 stub_gravatar_request(user.email)
175 post users_path, :params => { :user => user.attributes }
176 confirm_string = User.find_by(:email => user.email).generate_token_for(:new_user)
178 User.find_by(:display_name => user.display_name).hide!
180 # Get the confirmation page
181 get user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
182 assert_redirected_to root_path
185 post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
186 assert_response :not_found
187 assert_template :no_such_user
190 def test_confirm_resend_success
191 user = build(:user, :pending)
192 post users_path, :params => { :user => user.attributes }
194 assert_difference "ActionMailer::Base.deliveries.size", 1 do
195 perform_enqueued_jobs do
196 post user_confirm_resend_path(user)
200 assert_redirected_to login_path
201 assert_equal("confirmations/resend_success_flash", flash[:notice][:partial])
202 assert_equal({ :email => user.email, :sender => Settings.email_from }, flash[:notice][:locals])
204 email = ActionMailer::Base.deliveries.last
206 assert_equal user.email, email.to.first
209 def test_confirm_resend_deleted
210 user = build(:user, :pending)
211 post users_path, :params => { :user => user.attributes }
213 User.find_by(:display_name => user.display_name).hide!
215 assert_no_difference "ActionMailer::Base.deliveries.size" do
216 perform_enqueued_jobs do
217 post user_confirm_resend_path(user)
221 assert_redirected_to login_path
222 assert_match "User #{user.display_name} not found.", flash[:error]
225 def test_confirm_resend_unknown_user
226 assert_no_difference "ActionMailer::Base.deliveries.size" do
227 perform_enqueued_jobs do
228 post user_confirm_resend_path(:display_name => "No Such User")
232 assert_redirected_to login_path
233 assert_match "User No Such User not found.", flash[:error]
236 def test_confirm_email_get
238 confirm_string = user.generate_token_for(:new_email)
240 get user_confirm_email_path, :params => { :confirm_string => confirm_string }
241 assert_response :success
242 assert_template :confirm_email
245 def test_confirm_email_success
246 user = create(:user, :new_email => "test-new@example.com")
247 stub_gravatar_request(user.new_email)
248 confirm_string = user.generate_token_for(:new_email)
250 post user_confirm_email_path, :params => { :confirm_string => confirm_string }
251 assert_redirected_to edit_account_path
252 assert_match(/Confirmed your change of email address/, flash[:notice])
255 def test_confirm_email_already_confirmed
257 confirm_string = user.generate_token_for(:new_email)
259 post user_confirm_email_path, :params => { :confirm_string => confirm_string }
260 assert_redirected_to edit_account_path
261 assert_match(/already been confirmed/, flash[:error])
264 def test_confirm_email_bad_token
265 post user_confirm_email_path, :params => { :confirm_string => "XXXXX" }
266 assert_redirected_to edit_account_path
267 assert_match(/confirmation code has expired or does not exist/, flash[:error])
271 # test if testing for a gravatar works
272 # this happens when the email is actually changed
273 # which is triggered by the confirmation mail
274 def test_gravatar_auto_enable
275 # switch to email that has a gravatar
276 user = create(:user, :new_email => "test-new@example.com")
277 stub_gravatar_request(user.new_email, 200)
278 confirm_string = user.generate_token_for(:new_email)
279 # precondition gravatar should be turned off
280 assert_not user.image_use_gravatar
281 post user_confirm_email_path, :params => { :confirm_string => confirm_string }
282 assert_redirected_to edit_account_path
283 assert_match(/Confirmed your change of email address/, flash[:notice])
284 # gravatar use should now be enabled
285 assert User.find(user.id).image_use_gravatar
288 def test_gravatar_auto_disable
289 # switch to email without a gravatar
290 user = create(:user, :new_email => "test-new@example.com", :image_use_gravatar => true)
291 stub_gravatar_request(user.new_email, 404)
292 confirm_string = user.generate_token_for(:new_email)
293 # precondition gravatar should be turned on
294 assert user.image_use_gravatar
295 post user_confirm_email_path, :params => { :confirm_string => confirm_string }
296 assert_redirected_to edit_account_path
297 assert_match(/Confirmed your change of email address/, flash[:notice])
298 # gravatar use should now be disabled
299 assert_not User.find(user.id).image_use_gravatar