Add some tests for password logins
[rails.git] / test / integration / user_login_test.rb
1 require File.dirname(__FILE__) + '/../test_helper'
2
3 class UserLoginTest < ActionController::IntegrationTest
4   fixtures :users
5
6   def setup
7     openid_setup
8   end
9
10   def test_login_password_success
11     user = users(:normal_user)
12
13     get '/login'
14     assert_response :redirect
15     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
16     follow_redirect!
17     assert_response :success
18     post '/login', {'username' => user.email, 'password' => "test", :referer => "/browse"}
19     assert_response :redirect
20     follow_redirect!
21     assert_response :success
22     assert_template 'changeset/list'
23   end
24
25   def test_login_password_fail
26     user = users(:normal_user)
27
28     get '/login'
29     assert_response :redirect
30     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
31     follow_redirect!
32     assert_response :success
33     post '/login', {'username' => user.email, 'password' => "wrong", :referer => "/browse"}
34     assert_response :redirect
35     follow_redirect!
36     assert_response :success
37     assert_template 'login'
38   end
39
40   def test_login_openid_success
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     post '/login', {'openid_url' => "http://localhost:1123/john.doe?openid.success=true", :referer => "/browse"}
47     assert_response :redirect
48
49     res = openid_request(@response.redirected_to)
50     res2 = post '/login', res
51
52     assert_response :redirect
53     follow_redirect!
54     assert_response :success
55     assert_template 'changeset/list'
56   end
57
58   def test_login_openid_cancel
59     get '/login'
60     assert_response :redirect
61     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
62     follow_redirect!
63     assert_response :success
64     post '/login', {'openid_url' => "http://localhost:1123/john.doe", :referer => "/diary"}
65     assert_response :redirect
66
67     res = openid_request(@response.redirected_to)
68     post '/login', res
69
70     assert_response :redirect
71     follow_redirect!
72     assert_response :success
73     assert_template 'login'
74   end
75
76   def test_login_openid_invalid_provider
77     get '/login'
78     assert_response :redirect
79     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
80     follow_redirect!
81     assert_response :success
82     #Use a different port that doesn't have the OpenID provider running on to test an invalid openID
83     post '/login', {'openid_url' => "http://localhost:1124/john.doe", :referer => "/diary"}
84     assert_response :redirect
85     follow_redirect!
86     assert_response :success
87     assert_template 'login'
88   end
89
90   def test_login_openid_invalid_url
91     get '/login'
92     assert_response :redirect
93     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
94     follow_redirect!
95     assert_response :success
96     #Use a url with an invalid protocol to make sure it handles that correctly too
97     post '/login', {'openid_url' => "htt://localhost:1123/john.doe", :referer => "/diary"}
98     assert_response :redirect
99     follow_redirect!
100     assert_response :success
101     assert_template 'login'
102   end
103
104   def test_login_openid_unknown
105     get '/login'
106     assert_response :redirect
107     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
108     follow_redirect!
109     assert_response :success
110     post '/login', {'openid_url' => "http://localhost:1123/john.doe?openid.success=true_somethingelse", :referer => "/diary"}
111     assert_response :redirect
112
113     res = openid_request(@response.redirected_to)
114     res2 = post '/login', res
115
116     assert_response :redirect
117     follow_redirect!
118     assert_response :success
119     assert_template 'user/new'
120   end
121 end