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