]> git.openstreetmap.org Git - rails.git/blob - test/controllers/oauth_clients_controller_test.rb
Merge remote-tracking branch 'upstream/pull/2598'
[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     create_list(:access_token, 2, :user => user)
41
42     get :index,
43         :params => { :display_name => user.display_name }
44     assert_response :redirect
45     assert_redirected_to login_path(:referer => oauth_clients_path(:display_name => user.display_name))
46
47     get :index,
48         :params => { :display_name => user.display_name },
49         :session => { :user => user }
50     assert_response :success
51     assert_template "index"
52     assert_select "div.client_application", 2
53   end
54
55   def test_new
56     user = create(:user)
57
58     get :new,
59         :params => { :display_name => user.display_name }
60     assert_response :redirect
61     assert_redirected_to login_path(:referer => new_oauth_client_path(:display_name => user.display_name))
62
63     get :new,
64         :params => { :display_name => user.display_name },
65         :session => { :user => user }
66     assert_response :success
67     assert_template "new"
68     assert_select "form", 1 do
69       assert_select "input#client_application_name", 1
70       assert_select "input#client_application_url", 1
71       assert_select "input#client_application_callback_url", 1
72       assert_select "input#client_application_support_url", 1
73       ClientApplication.all_permissions.each do |perm|
74         assert_select "input#client_application_#{perm}", 1
75       end
76     end
77   end
78
79   def test_create
80     user = create(:user)
81
82     assert_difference "ClientApplication.count", 0 do
83       post :create, :params => { :display_name => user.display_name }
84     end
85     assert_response :forbidden
86
87     assert_difference "ClientApplication.count", 0 do
88       post :create,
89            :params => { :display_name => user.display_name,
90                         :client_application => { :name => "Test Application" } },
91            :session => { :user => user }
92     end
93     assert_response :success
94     assert_template "new"
95
96     assert_difference "ClientApplication.count", 1 do
97       post :create,
98            :params => { :display_name => user.display_name,
99                         :client_application => { :name => "Test Application",
100                                                  :url => "http://test.example.com/" } },
101            :session => { :user => user }
102     end
103     assert_response :redirect
104     assert_redirected_to oauth_client_path(:id => ClientApplication.find_by(:name => "Test Application").id)
105   end
106
107   def test_show
108     user = create(:user)
109     client = create(:client_application, :user => user)
110     other_client = create(:client_application)
111
112     get :show,
113         :params => { :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,
118         :params => { :display_name => user.display_name, :id => other_client.id },
119         :session => { :user => user }
120     assert_response :not_found
121     assert_template "not_found"
122
123     get :show,
124         :params => { :display_name => user.display_name, :id => client.id },
125         :session => { :user => user }
126     assert_response :success
127     assert_template "show"
128   end
129
130   def test_edit
131     user = create(:user)
132     client = create(:client_application, :user => user)
133     other_client = create(:client_application)
134
135     get :edit,
136         :params => { :display_name => user.display_name, :id => client.id }
137     assert_response :redirect
138     assert_redirected_to login_path(:referer => edit_oauth_client_path(:display_name => user.display_name, :id => client.id))
139
140     get :edit,
141         :params => { :display_name => user.display_name, :id => other_client.id },
142         :session => { :user => user }
143     assert_response :not_found
144     assert_template "not_found"
145
146     get :edit,
147         :params => { :display_name => user.display_name, :id => client.id },
148         :session => { :user => user }
149     assert_response :success
150     assert_template "edit"
151     assert_select "form", 1 do
152       assert_select "input#client_application_name", 1
153       assert_select "input#client_application_url", 1
154       assert_select "input#client_application_callback_url", 1
155       assert_select "input#client_application_support_url", 1
156       ClientApplication.all_permissions.each do |perm|
157         assert_select "input#client_application_#{perm}", 1
158       end
159     end
160   end
161
162   def test_update
163     user = create(:user)
164     client = create(:client_application, :user => user)
165     other_client = create(:client_application)
166
167     put :update,
168         :params => { :display_name => user.display_name, :id => client.id }
169     assert_response :forbidden
170
171     put :update,
172         :params => { :display_name => user.display_name, :id => other_client.id },
173         :session => { :user => user }
174     assert_response :not_found
175     assert_template "not_found"
176
177     put :update,
178         :params => { :display_name => user.display_name,
179                      :id => client.id,
180                      :client_application => { :name => "New Name", :url => nil } },
181         :session => { :user => user }
182     assert_response :success
183     assert_template "edit"
184
185     put :update,
186         :params => { :display_name => user.display_name,
187                      :id => client.id,
188                      :client_application => { :name => "New Name", :url => "http://new.example.com/url" } },
189         :session => { :user => user }
190     assert_response :redirect
191     assert_redirected_to oauth_client_path(:id => client.id)
192   end
193
194   def test_destroy
195     user = create(:user)
196     client = create(:client_application, :user => user)
197     other_client = create(:client_application)
198
199     assert_difference "ClientApplication.count", 0 do
200       delete :destroy,
201              :params => { :display_name => user.display_name, :id => client.id }
202     end
203     assert_response :forbidden
204
205     assert_difference "ClientApplication.count", 0 do
206       delete :destroy,
207              :params => { :display_name => user.display_name, :id => other_client.id },
208              :session => { :user => user }
209     end
210     assert_response :not_found
211     assert_template "not_found"
212
213     assert_difference "ClientApplication.count", -1 do
214       delete :destroy,
215              :params => { :display_name => user.display_name, :id => client.id },
216              :session => { :user => user }
217     end
218     assert_response :redirect
219     assert_redirected_to oauth_clients_path(:display_name => user.display_name)
220   end
221 end