a1df9f0f2a7db0f8654ecf1aaa2f640d83f1179f
[rails.git] / test / controllers / oauth_clients_controller_test.rb
1 require 'test_helper'
2
3 class OauthClientsControllerTest < ActionController::TestCase
4   fixtures :users, :client_applications
5
6   ##
7   # test all routes which lead to this controller
8   def test_routes
9     assert_routing(
10       { :path => "/user/username/oauth_clients", :method => :get },
11       { :controller => "oauth_clients", :action => "index", :display_name => "username" }
12     )
13     assert_routing(
14       { :path => "/user/username/oauth_clients/new", :method => :get },
15       { :controller => "oauth_clients", :action => "new", :display_name => "username" }
16     )
17     assert_routing(
18       { :path => "/user/username/oauth_clients", :method => :post },
19       { :controller => "oauth_clients", :action => "create", :display_name => "username" }
20     )
21     assert_routing(
22       { :path => "/user/username/oauth_clients/1", :method => :get },
23       { :controller => "oauth_clients", :action => "show", :display_name => "username", :id => "1" }
24     )
25     assert_routing(
26       { :path => "/user/username/oauth_clients/1/edit", :method => :get },
27       { :controller => "oauth_clients", :action => "edit", :display_name => "username", :id => "1" }
28     )
29     assert_routing(
30       { :path => "/user/username/oauth_clients/1", :method => :put },
31       { :controller => "oauth_clients", :action => "update", :display_name => "username", :id => "1" }
32     )
33     assert_routing(
34       { :path => "/user/username/oauth_clients/1", :method => :delete },
35       { :controller => "oauth_clients", :action => "destroy", :display_name => "username", :id => "1" }
36     )
37   end
38
39   def test_index
40     user = users(:public_user)
41
42     get :index, { :display_name => user.display_name }
43     assert_response :redirect
44     assert_redirected_to login_path(:referer => oauth_clients_path(:display_name => user.display_name))
45
46     get :index, { :display_name => user.display_name }, { :user => user }
47     assert_response :success
48     assert_template "index"
49     assert_select "div.client_application", 2
50   end
51
52   def test_new
53     user = users(:public_user)
54
55     get :new, { :display_name => user.display_name }
56     assert_response :redirect
57     assert_redirected_to login_path(:referer => new_oauth_client_path(:display_name => user.display_name))
58
59     get :new, { :display_name => user.display_name }, { :user => user }
60     assert_response :success
61     assert_template "new"
62     assert_select "form", 1 do
63       assert_select "input#client_application_name", 1
64       assert_select "input#client_application_url", 1
65       assert_select "input#client_application_callback_url", 1
66       assert_select "input#client_application_support_url", 1
67       ClientApplication.all_permissions.each do |perm|
68         assert_select "input#client_application_#{perm}", 1
69       end
70     end
71   end
72
73   def test_create
74     user = users(:public_user)
75
76     assert_difference "ClientApplication.count", 0 do
77       post :create, { :display_name => user.display_name }
78     end
79     assert_response :forbidden
80
81     assert_difference "ClientApplication.count", 0 do
82       post :create, {
83         :display_name => user.display_name,
84         :client_application => {
85         :name => "Test Application"
86         }
87       }, {
88         :user => user
89       }
90     end
91     assert_response :success
92     assert_template "new"  
93     
94     assert_difference "ClientApplication.count", 1 do
95       post :create, {
96         :display_name => user.display_name,
97         :client_application => {
98           :name => "Test Application",
99           :url => "http://test.example.com/"
100         }
101       }, {
102         :user => user
103       }
104     end
105     assert_response :redirect
106     assert_redirected_to oauth_client_path(:id => ClientApplication.find_by_name("Test Application").id)
107   end
108
109   def test_show
110     user = users(:public_user)
111     client = client_applications(:oauth_web_app)
112
113     get :show, { :display_name => user.display_name, :id => client.id }
114     assert_response :redirect
115     assert_redirected_to login_path(:referer => oauth_client_path(:display_name => user.display_name, :id => client.id))
116
117     get :show, { :display_name => user.display_name, :id => client_applications(:normal_user_app).id }, { :user => user }
118     assert_response :not_found
119     assert_template "not_found"
120
121     get :show, { :display_name => user.display_name, :id => client.id }, { :user => user }
122     assert_response :success
123     assert_template "show"
124   end
125
126   def test_edit
127     user = users(:public_user)
128     client = client_applications(:oauth_web_app)
129
130     get :edit, { :display_name => user.display_name, :id => client.id }
131     assert_response :redirect
132     assert_redirected_to login_path(:referer => edit_oauth_client_path(:display_name => user.display_name, :id => client.id))
133
134     get :edit, { :display_name => user.display_name, :id => client_applications(:normal_user_app).id }, { :user => user }
135     assert_response :not_found
136     assert_template "not_found"
137
138     get :edit, { :display_name => user.display_name, :id => client.id }, { :user => user }
139     assert_response :success
140     assert_template "edit"
141     assert_select "form", 1 do
142       assert_select "input#client_application_name", 1
143       assert_select "input#client_application_url", 1
144       assert_select "input#client_application_callback_url", 1
145       assert_select "input#client_application_support_url", 1
146       ClientApplication.all_permissions.each do |perm|
147         assert_select "input#client_application_#{perm}", 1
148       end
149     end
150   end
151
152   def test_update
153     user = users(:public_user)
154     client = client_applications(:oauth_web_app)
155
156     put :update, { :display_name => user.display_name, :id => client.id }
157     assert_response :forbidden
158
159     put :update, { :display_name => user.display_name, :id => client_applications(:normal_user_app).id }, { :user => user }
160     assert_response :not_found
161     assert_template "not_found"
162
163     put :update, {
164       :display_name => user.display_name, 
165       :id => client.id,
166       :client_application => {
167         :name => "New Name",
168         :url => nil
169       }
170     }, {
171       :user => user
172     }
173     assert_response :success
174     assert_template "edit"
175
176     put :update, {
177       :display_name => user.display_name, 
178       :id => client.id,
179       :client_application => {
180         :name => "New Name",
181         :url => "http://new.example.com/url"
182       }
183     }, {
184       :user => user
185     }
186     assert_response :redirect
187     assert_redirected_to oauth_client_path(:id => client.id)
188   end
189
190   def test_destroy
191     user = users(:public_user)
192     client = client_applications(:oauth_web_app)
193
194     assert_difference "ClientApplication.count", 0 do
195       delete :destroy, { :display_name => user.display_name, :id => client.id }
196     end
197     assert_response :forbidden
198
199     assert_difference "ClientApplication.count", 0 do
200       delete :destroy, { :display_name => user.display_name, :id => client_applications(:normal_user_app).id }, { :user => user }
201     end
202     assert_response :not_found
203     assert_template "not_found"
204
205     assert_difference "ClientApplication.count", -1 do
206       delete :destroy, { :display_name => user.display_name, :id => client.id }, { :user => user }
207     end
208     assert_response :redirect
209     assert_redirected_to oauth_clients_path(:display_name => user.display_name)
210   end
211 end