]> git.openstreetmap.org Git - rails.git/blob - test/controllers/api/changeset_comments/visibilities_controller_test.rb
Add frozen_string_literal comments to ruby files
[rails.git] / test / controllers / api / changeset_comments / visibilities_controller_test.rb
1 # frozen_string_literal: true
2
3 require "test_helper"
4
5 module Api
6   module ChangesetComments
7     class VisibilitiesControllerTest < ActionDispatch::IntegrationTest
8       ##
9       # test all routes which lead to this controller
10       def test_routes
11         assert_routing(
12           { :path => "/api/0.6/changeset_comments/1/visibility", :method => :post },
13           { :controller => "api/changeset_comments/visibilities", :action => "create", :changeset_comment_id => "1" }
14         )
15         assert_routing(
16           { :path => "/api/0.6/changeset_comments/1/visibility.json", :method => :post },
17           { :controller => "api/changeset_comments/visibilities", :action => "create", :changeset_comment_id => "1", :format => "json" }
18         )
19         assert_routing(
20           { :path => "/api/0.6/changeset_comments/1/visibility", :method => :delete },
21           { :controller => "api/changeset_comments/visibilities", :action => "destroy", :changeset_comment_id => "1" }
22         )
23         assert_routing(
24           { :path => "/api/0.6/changeset_comments/1/visibility.json", :method => :delete },
25           { :controller => "api/changeset_comments/visibilities", :action => "destroy", :changeset_comment_id => "1", :format => "json" }
26         )
27
28         assert_recognizes(
29           { :controller => "api/changeset_comments/visibilities", :action => "create", :changeset_comment_id => "1" },
30           { :path => "/api/0.6/changeset/comment/1/unhide", :method => :post }
31         )
32         assert_recognizes(
33           { :controller => "api/changeset_comments/visibilities", :action => "create", :changeset_comment_id => "1", :format => "json" },
34           { :path => "/api/0.6/changeset/comment/1/unhide.json", :method => :post }
35         )
36         assert_recognizes(
37           { :controller => "api/changeset_comments/visibilities", :action => "destroy", :changeset_comment_id => "1" },
38           { :path => "/api/0.6/changeset/comment/1/hide", :method => :post }
39         )
40         assert_recognizes(
41           { :controller => "api/changeset_comments/visibilities", :action => "destroy", :changeset_comment_id => "1", :format => "json" },
42           { :path => "/api/0.6/changeset/comment/1/hide.json", :method => :post }
43         )
44       end
45
46       def test_create_by_unauthorized
47         comment = create(:changeset_comment, :visible => false)
48
49         post api_changeset_comment_visibility_path(comment)
50
51         assert_response :unauthorized
52         assert_not comment.reload.visible
53       end
54
55       def test_create_by_normal_user
56         comment = create(:changeset_comment, :visible => false)
57         auth_header = bearer_authorization_header
58
59         post api_changeset_comment_visibility_path(comment), :headers => auth_header
60
61         assert_response :forbidden
62         assert_not comment.reload.visible
63       end
64
65       def test_create_on_missing_comment
66         auth_header = bearer_authorization_header create(:moderator_user)
67
68         post api_changeset_comment_visibility_path(999111), :headers => auth_header
69
70         assert_response :not_found
71       end
72
73       def test_create_without_required_scope
74         comment = create(:changeset_comment, :visible => false)
75         auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[read_prefs]
76
77         post api_changeset_comment_visibility_path(comment), :headers => auth_header
78
79         assert_response :forbidden
80         assert_not comment.reload.visible
81       end
82
83       def test_create_with_write_changeset_comments_scope
84         comment = create(:changeset_comment, :visible => false)
85         auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_changeset_comments]
86
87         post api_changeset_comment_visibility_path(comment), :headers => auth_header
88
89         check_successful_response_xml(comment, :comment_visible => true)
90       end
91
92       def test_create_with_write_changeset_comments_scope_json
93         comment = create(:changeset_comment, :visible => false)
94         auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_changeset_comments]
95
96         post api_changeset_comment_visibility_path(comment, :format => "json"), :headers => auth_header
97
98         check_successful_response_json(comment, :comment_visible => true)
99       end
100
101       def test_create_with_write_api_scope
102         comment = create(:changeset_comment, :visible => false)
103         auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
104
105         post api_changeset_comment_visibility_path(comment), :headers => auth_header
106
107         check_successful_response_xml(comment, :comment_visible => true)
108       end
109
110       def test_create_with_write_api_scope_json
111         comment = create(:changeset_comment, :visible => false)
112         auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
113
114         post api_changeset_comment_visibility_path(comment, :format => "json"), :headers => auth_header
115
116         check_successful_response_json(comment, :comment_visible => true)
117       end
118
119       def test_create_at_legacy_route
120         comment = create(:changeset_comment, :visible => false)
121         auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
122
123         post "/api/0.6/changeset/comment/#{comment.id}/unhide", :headers => auth_header
124
125         check_successful_response_xml(comment, :comment_visible => true)
126       end
127
128       def test_create_at_legacy_route_json
129         comment = create(:changeset_comment, :visible => false)
130         auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
131
132         post "/api/0.6/changeset/comment/#{comment.id}/unhide.json", :headers => auth_header
133
134         check_successful_response_json(comment, :comment_visible => true)
135       end
136
137       def test_destroy_by_unauthorized
138         comment = create(:changeset_comment)
139
140         delete api_changeset_comment_visibility_path(comment)
141
142         assert_response :unauthorized
143         assert comment.reload.visible
144       end
145
146       def test_destroy_by_normal_user
147         comment = create(:changeset_comment)
148         auth_header = bearer_authorization_header
149
150         delete api_changeset_comment_visibility_path(comment), :headers => auth_header
151
152         assert_response :forbidden
153         assert comment.reload.visible
154       end
155
156       def test_destroy_on_missing_comment
157         auth_header = bearer_authorization_header create(:moderator_user)
158
159         delete api_changeset_comment_visibility_path(999111), :headers => auth_header
160
161         assert_response :not_found
162       end
163
164       def test_destroy_without_required_scope
165         comment = create(:changeset_comment)
166         auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[read_prefs]
167
168         delete api_changeset_comment_visibility_path(comment), :headers => auth_header
169
170         assert_response :forbidden
171         assert comment.reload.visible
172       end
173
174       def test_destroy_with_write_changeset_comments_scope
175         comment = create(:changeset_comment)
176         auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_changeset_comments]
177
178         delete api_changeset_comment_visibility_path(comment), :headers => auth_header
179
180         check_successful_response_xml(comment, :comment_visible => false)
181       end
182
183       def test_destroy_with_write_changeset_comments_scope_json
184         comment = create(:changeset_comment)
185         auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_changeset_comments]
186
187         delete api_changeset_comment_visibility_path(comment, :format => "json"), :headers => auth_header
188
189         check_successful_response_json(comment, :comment_visible => false)
190       end
191
192       def test_destroy_with_write_api_scope
193         comment = create(:changeset_comment)
194         auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
195
196         delete api_changeset_comment_visibility_path(comment), :headers => auth_header
197
198         check_successful_response_xml(comment, :comment_visible => false)
199       end
200
201       def test_destroy_with_write_api_scope_json
202         comment = create(:changeset_comment)
203         auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
204
205         delete api_changeset_comment_visibility_path(comment, :format => "json"), :headers => auth_header
206
207         check_successful_response_json(comment, :comment_visible => false)
208       end
209
210       def test_destroy_at_legacy_route
211         comment = create(:changeset_comment)
212         auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
213
214         post "/api/0.6/changeset/comment/#{comment.id}/hide", :headers => auth_header
215
216         check_successful_response_xml(comment, :comment_visible => false)
217       end
218
219       def test_destroy_at_legacy_route_json
220         comment = create(:changeset_comment)
221         auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
222
223         post "/api/0.6/changeset/comment/#{comment.id}/hide.json", :headers => auth_header
224
225         check_successful_response_json(comment, :comment_visible => false)
226       end
227
228       private
229
230       def check_successful_response_xml(comment, comment_visible:)
231         assert_response :success
232         assert_equal "application/xml", response.media_type
233         assert_dom "osm", 1 do
234           assert_dom "> changeset", 1 do
235             assert_dom "> @id", comment.changeset_id.to_s
236             assert_dom "> @comments_count", comment_visible ? "1" : "0"
237           end
238         end
239
240         assert_equal comment_visible, comment.reload.visible
241       end
242
243       def check_successful_response_json(comment, comment_visible:)
244         assert_response :success
245         assert_equal "application/json", response.media_type
246         js = ActiveSupport::JSON.decode(@response.body)
247         assert_not_nil js["changeset"]
248         assert_equal comment.changeset_id, js["changeset"]["id"]
249         assert_equal comment_visible ? 1 : 0, js["changeset"]["comments_count"]
250
251         assert_equal comment_visible, comment.reload.visible
252       end
253     end
254   end
255 end