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