]> git.openstreetmap.org Git - rails.git/blob - test/controllers/api/changeset_subscriptions_controller_test.rb
Merge remote-tracking branch 'upstream/pull/5805'
[rails.git] / test / controllers / api / changeset_subscriptions_controller_test.rb
1 require "test_helper"
2
3 module Api
4   class ChangesetsControllerTest < ActionDispatch::IntegrationTest
5     ##
6     # test all routes which lead to this controller
7     def test_routes
8       assert_routing(
9         { :path => "/api/0.6/changeset/1/subscription", :method => :post },
10         { :controller => "api/changeset_subscriptions", :action => "create", :changeset_id => "1" }
11       )
12       assert_routing(
13         { :path => "/api/0.6/changeset/1/subscription.json", :method => :post },
14         { :controller => "api/changeset_subscriptions", :action => "create", :changeset_id => "1", :format => "json" }
15       )
16       assert_routing(
17         { :path => "/api/0.6/changeset/1/subscription", :method => :delete },
18         { :controller => "api/changeset_subscriptions", :action => "destroy", :changeset_id => "1" }
19       )
20       assert_routing(
21         { :path => "/api/0.6/changeset/1/subscription.json", :method => :delete },
22         { :controller => "api/changeset_subscriptions", :action => "destroy", :changeset_id => "1", :format => "json" }
23       )
24
25       assert_recognizes(
26         { :controller => "api/changeset_subscriptions", :action => "create", :changeset_id => "1" },
27         { :path => "/api/0.6/changeset/1/subscribe", :method => :post }
28       )
29       assert_recognizes(
30         { :controller => "api/changeset_subscriptions", :action => "create", :changeset_id => "1", :format => "json" },
31         { :path => "/api/0.6/changeset/1/subscribe.json", :method => :post }
32       )
33       assert_recognizes(
34         { :controller => "api/changeset_subscriptions", :action => "destroy", :changeset_id => "1" },
35         { :path => "/api/0.6/changeset/1/unsubscribe", :method => :post }
36       )
37       assert_recognizes(
38         { :controller => "api/changeset_subscriptions", :action => "destroy", :changeset_id => "1", :format => "json" },
39         { :path => "/api/0.6/changeset/1/unsubscribe.json", :method => :post }
40       )
41     end
42
43     def test_create_by_unauthorized
44       changeset = create(:changeset, :closed)
45
46       assert_no_difference "ChangesetSubscription.count" do
47         assert_no_difference "changeset.subscribers.count" do
48           post api_changeset_subscription_path(changeset)
49
50           assert_response :unauthorized
51         end
52       end
53     end
54
55     def test_create_on_missing_changeset
56       user = create(:user)
57       auth_header = bearer_authorization_header user
58
59       assert_no_difference "ChangesetSubscription.count" do
60         post api_changeset_subscription_path(999111), :headers => auth_header
61
62         assert_response :not_found
63       end
64     end
65
66     def test_create_when_subscribed
67       user = create(:user)
68       auth_header = bearer_authorization_header user
69       changeset = create(:changeset, :closed)
70       changeset.subscribers << user
71
72       assert_no_difference "ChangesetSubscription.count" do
73         assert_no_difference "changeset.subscribers.count" do
74           post api_changeset_subscription_path(changeset), :headers => auth_header
75
76           assert_response :conflict
77         end
78       end
79       assert_includes changeset.subscribers, user
80     end
81
82     def test_create_on_open_changeset
83       user = create(:user)
84       auth_header = bearer_authorization_header user
85       changeset = create(:changeset)
86
87       assert_difference "ChangesetSubscription.count", 1 do
88         assert_difference "changeset.subscribers.count", 1 do
89           post api_changeset_subscription_path(changeset), :headers => auth_header
90
91           assert_response :success
92         end
93       end
94       assert_includes changeset.subscribers, user
95     end
96
97     def test_create_on_closed_changeset
98       user = create(:user)
99       auth_header = bearer_authorization_header user
100       changeset = create(:changeset, :closed)
101
102       assert_difference "ChangesetSubscription.count", 1 do
103         assert_difference "changeset.subscribers.count", 1 do
104           post api_changeset_subscription_path(changeset), :headers => auth_header
105
106           assert_response :success
107         end
108       end
109       assert_includes changeset.subscribers, user
110     end
111
112     def test_create_legacy
113       user = create(:user)
114       auth_header = bearer_authorization_header user
115       changeset = create(:changeset, :closed)
116
117       assert_difference "ChangesetSubscription.count", 1 do
118         assert_difference "changeset.subscribers.count", 1 do
119           post "/api/0.6/changeset/#{changeset.id}/subscribe", :headers => auth_header
120
121           assert_response :success
122         end
123       end
124       assert_includes changeset.subscribers, user
125     end
126
127     def test_destroy_by_unauthorized
128       changeset = create(:changeset, :closed)
129
130       assert_no_difference "ChangesetSubscription.count" do
131         assert_no_difference "changeset.subscribers.count" do
132           delete api_changeset_subscription_path(changeset)
133
134           assert_response :unauthorized
135         end
136       end
137     end
138
139     def test_destroy_on_missing_changeset
140       user = create(:user)
141       auth_header = bearer_authorization_header user
142
143       assert_no_difference "ChangesetSubscription.count" do
144         delete api_changeset_subscription_path(999111), :headers => auth_header
145
146         assert_response :not_found
147       end
148     end
149
150     def test_destroy_when_not_subscribed
151       user = create(:user)
152       auth_header = bearer_authorization_header user
153       changeset = create(:changeset, :closed)
154
155       assert_no_difference "ChangesetSubscription.count" do
156         assert_no_difference "changeset.subscribers.count" do
157           delete api_changeset_subscription_path(changeset), :headers => auth_header
158
159           assert_response :not_found
160         end
161       end
162       assert_not_includes changeset.subscribers, user
163     end
164
165     def test_destroy_on_open_changeset
166       user = create(:user)
167       auth_header = bearer_authorization_header user
168       changeset = create(:changeset)
169       changeset.subscribers.push(user)
170
171       assert_difference "ChangesetSubscription.count", -1 do
172         assert_difference "changeset.subscribers.count", -1 do
173           delete api_changeset_subscription_path(changeset), :headers => auth_header
174
175           assert_response :success
176         end
177       end
178       assert_not_includes changeset.subscribers, user
179     end
180
181     def test_destroy_on_closed_changeset
182       user = create(:user)
183       auth_header = bearer_authorization_header user
184       changeset = create(:changeset, :closed)
185       changeset.subscribers.push(user)
186
187       assert_difference "ChangesetSubscription.count", -1 do
188         assert_difference "changeset.subscribers.count", -1 do
189           delete api_changeset_subscription_path(changeset), :headers => auth_header
190
191           assert_response :success
192         end
193       end
194       assert_not_includes changeset.subscribers, user
195     end
196
197     def test_destroy_legacy
198       user = create(:user)
199       auth_header = bearer_authorization_header user
200       changeset = create(:changeset, :closed)
201       changeset.subscribers.push(user)
202
203       assert_difference "ChangesetSubscription.count", -1 do
204         assert_difference "changeset.subscribers.count", -1 do
205           post "/api/0.6/changeset/#{changeset.id}/unsubscribe", :headers => auth_header
206
207           assert_response :success
208         end
209       end
210       assert_not_includes changeset.subscribers, user
211     end
212   end
213 end