Rework OpenID tests for new flows using OmniAuth mocking
[rails.git] / test / integration / user_login_test.rb
1 require "test_helper"
2
3 class UserLoginTest < ActionDispatch::IntegrationTest
4   fixtures :users
5
6   def setup
7     OmniAuth.config.test_mode = true
8   end
9
10   def teardown
11     OmniAuth.config.mock_auth[:openid] = nil
12     OmniAuth.config.test_mode = false
13   end
14
15   def test_login_email_password_normal
16     user = users(:normal_user)
17
18     get "/login"
19     assert_response :redirect
20     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
21     follow_redirect!
22     assert_response :success
23
24     post "/login", "username" => user.email, "password" => "wrong", :referer => "/history"
25     assert_response :redirect
26     follow_redirect!
27     assert_response :success
28     assert_template "login"
29
30     post "/login", "username" => user.email, "password" => "test", :referer => "/history"
31     assert_response :redirect
32     follow_redirect!
33     assert_response :success
34     assert_template "changeset/history"
35     assert_select "span.username", "test"
36   end
37
38   def test_login_email_password_normal_upcase
39     user = users(:normal_user)
40
41     get "/login"
42     assert_response :redirect
43     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
44     follow_redirect!
45     assert_response :success
46
47     post "/login", "username" => user.email.upcase, "password" => "wrong", :referer => "/history"
48     assert_response :redirect
49     follow_redirect!
50     assert_response :success
51     assert_template "login"
52
53     post "/login", "username" => user.email.upcase, "password" => "test", :referer => "/history"
54     assert_response :redirect
55     follow_redirect!
56     assert_response :success
57     assert_template "changeset/history"
58     assert_select "span.username", "TEST"
59   end
60
61   def test_login_email_password_normal_titlecase
62     user = users(:normal_user)
63
64     get "/login"
65     assert_response :redirect
66     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
67     follow_redirect!
68     assert_response :success
69
70     post "/login", "username" => user.email.titlecase, "password" => "wrong", :referer => "/history"
71     assert_response :redirect
72     follow_redirect!
73     assert_response :success
74     assert_template "login"
75
76     post "/login", "username" => user.email.titlecase, "password" => "test", :referer => "/history"
77     assert_response :redirect
78     follow_redirect!
79     assert_response :success
80     assert_template "login"
81     assert_select "span.username", false
82   end
83
84   def test_login_email_password_public
85     user = users(:public_user)
86
87     get "/login"
88     assert_response :redirect
89     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
90     follow_redirect!
91     assert_response :success
92
93     post "/login", "username" => user.email, "password" => "wrong", :referer => "/history"
94     assert_response :redirect
95     follow_redirect!
96     assert_response :success
97     assert_template "login"
98
99     post "/login", "username" => user.email, "password" => "test", :referer => "/history"
100     assert_response :redirect
101     follow_redirect!
102     assert_response :success
103     assert_template "changeset/history"
104     assert_select "span.username", "test2"
105   end
106
107   def test_login_email_password_public_upcase
108     user = users(:public_user)
109
110     get "/login"
111     assert_response :redirect
112     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
113     follow_redirect!
114     assert_response :success
115
116     post "/login", "username" => user.email.upcase, "password" => "wrong", :referer => "/history"
117     assert_response :redirect
118     follow_redirect!
119     assert_response :success
120     assert_template "login"
121
122     post "/login", "username" => user.email.upcase, "password" => "test", :referer => "/history"
123     assert_response :redirect
124     follow_redirect!
125     assert_response :success
126     assert_template "changeset/history"
127     assert_select "span.username", "test2"
128   end
129
130   def test_login_email_password_public_titlecase
131     user = users(:public_user)
132
133     get "/login"
134     assert_response :redirect
135     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
136     follow_redirect!
137     assert_response :success
138
139     post "/login", "username" => user.email.titlecase, "password" => "wrong", :referer => "/history"
140     assert_response :redirect
141     follow_redirect!
142     assert_response :success
143     assert_template "login"
144
145     post "/login", "username" => user.email.titlecase, "password" => "test", :referer => "/history"
146     assert_response :redirect
147     follow_redirect!
148     assert_response :success
149     assert_template "changeset/history"
150     assert_select "span.username", "test2"
151   end
152
153   def test_login_username_password_normal
154     user = users(:normal_user)
155
156     get "/login"
157     assert_response :redirect
158     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
159     follow_redirect!
160     assert_response :success
161
162     post "/login", "username" => user.display_name, "password" => "wrong", :referer => "/history"
163     assert_response :redirect
164     follow_redirect!
165     assert_response :success
166     assert_template "login"
167
168     post "/login", "username" => user.display_name, "password" => "test", :referer => "/history"
169     assert_response :redirect
170     follow_redirect!
171     assert_response :success
172     assert_template "changeset/history"
173     assert_select "span.username", "test"
174   end
175
176   def test_login_username_password_normal_upcase
177     user = users(:normal_user)
178
179     get "/login"
180     assert_response :redirect
181     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
182     follow_redirect!
183     assert_response :success
184
185     post "/login", "username" => user.display_name.upcase, "password" => "wrong", :referer => "/history"
186     assert_response :redirect
187     follow_redirect!
188     assert_response :success
189     assert_template "login"
190
191     post "/login", "username" => user.display_name.upcase, "password" => "test", :referer => "/history"
192     assert_response :redirect
193     follow_redirect!
194     assert_response :success
195     assert_template "changeset/history"
196     assert_select "span.username", "TEST"
197   end
198
199   def test_login_username_password_normal_titlecase
200     user = users(:normal_user)
201
202     get "/login"
203     assert_response :redirect
204     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
205     follow_redirect!
206     assert_response :success
207
208     post "/login", "username" => user.display_name.titlecase, "password" => "wrong", :referer => "/history"
209     assert_response :redirect
210     follow_redirect!
211     assert_response :success
212     assert_template "login"
213
214     post "/login", "username" => user.display_name.titlecase, "password" => "test", :referer => "/history"
215     assert_response :redirect
216     follow_redirect!
217     assert_response :success
218     assert_template "login"
219     assert_select "span.username", false
220   end
221
222   def test_login_username_password_public
223     user = users(:public_user)
224
225     get "/login"
226     assert_response :redirect
227     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
228     follow_redirect!
229     assert_response :success
230
231     post "/login", "username" => user.display_name, "password" => "wrong", :referer => "/history"
232     assert_response :redirect
233     follow_redirect!
234     assert_response :success
235     assert_template "login"
236
237     post "/login", "username" => user.display_name, "password" => "test", :referer => "/history"
238     assert_response :redirect
239     follow_redirect!
240     assert_response :success
241     assert_template "changeset/history"
242     assert_select "span.username", "test2"
243   end
244
245   def test_login_username_password_public_upcase
246     user = users(:public_user)
247
248     get "/login"
249     assert_response :redirect
250     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
251     follow_redirect!
252     assert_response :success
253
254     post "/login", "username" => user.display_name.upcase, "password" => "wrong", :referer => "/history"
255     assert_response :redirect
256     follow_redirect!
257     assert_response :success
258     assert_template "login"
259
260     post "/login", "username" => user.display_name.upcase, "password" => "test", :referer => "/history"
261     assert_response :redirect
262     follow_redirect!
263     assert_response :success
264     assert_template "changeset/history"
265     assert_select "span.username", "test2"
266   end
267
268   def test_login_username_password_public_titlecase
269     user = users(:public_user)
270
271     get "/login"
272     assert_response :redirect
273     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
274     follow_redirect!
275     assert_response :success
276
277     post "/login", "username" => user.display_name.titlecase, "password" => "wrong", :referer => "/history"
278     assert_response :redirect
279     follow_redirect!
280     assert_response :success
281     assert_template "login"
282
283     post "/login", "username" => user.display_name.titlecase, "password" => "test", :referer => "/history"
284     assert_response :redirect
285     follow_redirect!
286     assert_response :success
287     assert_template "changeset/history"
288     assert_select "span.username", "test2"
289   end
290
291   def test_login_openid_success
292     OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/john.doe")
293
294     get "/login"
295     assert_response :redirect
296     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
297     follow_redirect!
298     assert_response :success
299     post "/login", "openid_url" => "http://localhost:1123/john.doe", :referer => "/history"
300     assert_response :redirect
301     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
302     follow_redirect!
303     assert_response :redirect
304     assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
305     follow_redirect!
306     assert_response :redirect
307     follow_redirect!
308     assert_response :success
309     assert_template "changeset/history"
310     assert_select "span.username", "openIDuser"
311   end
312
313   def test_login_openid_connection_failed
314     OmniAuth.config.mock_auth[:openid] = :connection_failed
315
316     get "/login"
317     assert_response :redirect
318     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
319     follow_redirect!
320     assert_response :success
321     post "/login", "openid_url" => "http://localhost:1123/john.doe", :referer => "/history"
322     assert_response :redirect
323     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
324     follow_redirect!
325     assert_response :redirect
326     assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
327     follow_redirect!
328     assert_response :redirect
329     assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/login")
330     follow_redirect!
331     assert_response :redirect
332     follow_redirect!
333     assert_response :success
334     assert_template "login"
335     assert_select "div.flash.error", "Connection to authentication provider failed"
336     assert_select "span.username", false
337   end
338
339   def test_login_openid_invalid_credentials
340     OmniAuth.config.mock_auth[:openid] = :invalid_credentials
341
342     get "/login"
343     assert_response :redirect
344     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
345     follow_redirect!
346     assert_response :success
347     post "/login", "openid_url" => "http://localhost:1123/john.doe", :referer => "/history"
348     assert_response :redirect
349     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
350     follow_redirect!
351     assert_response :redirect
352     assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
353     follow_redirect!
354     assert_response :redirect
355     assert_redirected_to auth_failure_path(:strategy => "openid", :message => "invalid_credentials", :origin => "/login")
356     follow_redirect!
357     assert_response :redirect
358     follow_redirect!
359     assert_response :success
360     assert_template "login"
361     assert_select "div.flash.error", "Invalid authentication credentials"
362     assert_select "span.username", false
363   end
364
365   def test_login_openid_unknown
366     OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/fred.bloggs")
367
368     get "/login"
369     assert_response :redirect
370     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
371     follow_redirect!
372     assert_response :success
373     post "/login", "openid_url" => "http://localhost:1123/fred.bloggs", :referer => "/diary"
374     assert_response :redirect
375     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/fred.bloggs", :origin => "/login")
376     follow_redirect!
377     assert_response :redirect
378     assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/fred.bloggs", :origin => "/login")
379     follow_redirect!
380     assert_response :redirect
381     follow_redirect!
382     assert_response :success
383     assert_template "user/new"
384     assert_select "span.username", false
385   end
386 end