]> git.openstreetmap.org Git - rails.git/blob - test/controllers/api/changeset_subscriptions_controller_test.rb
Test legacy api changeset subscribe/unsubscribe paths
[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     end
80
81     def test_create_on_open_changeset
82       user = create(:user)
83       auth_header = bearer_authorization_header user
84       changeset = create(:changeset)
85
86       assert_difference "ChangesetSubscription.count", 1 do
87         assert_difference "changeset.subscribers.count", 1 do
88           post api_changeset_subscription_path(changeset), :headers => auth_header
89
90           assert_response :success
91         end
92       end
93     end
94
95     def test_create_on_closed_changeset
96       user = create(:user)
97       auth_header = bearer_authorization_header user
98       changeset = create(:changeset, :closed)
99
100       assert_difference "ChangesetSubscription.count", 1 do
101         assert_difference "changeset.subscribers.count", 1 do
102           post api_changeset_subscription_path(changeset), :headers => auth_header
103
104           assert_response :success
105         end
106       end
107     end
108
109     def test_create_legacy
110       user = create(:user)
111       auth_header = bearer_authorization_header user
112       changeset = create(:changeset, :closed)
113
114       assert_difference "ChangesetSubscription.count", 1 do
115         assert_difference "changeset.subscribers.count", 1 do
116           post "/api/0.6/changeset/#{changeset.id}/subscribe", :headers => auth_header
117
118           assert_response :success
119         end
120       end
121     end
122
123     def test_destroy_by_unauthorized
124       changeset = create(:changeset, :closed)
125
126       assert_no_difference "ChangesetSubscription.count" do
127         assert_no_difference "changeset.subscribers.count" do
128           delete api_changeset_subscription_path(changeset)
129
130           assert_response :unauthorized
131         end
132       end
133     end
134
135     def test_destroy_on_missing_changeset
136       user = create(:user)
137       auth_header = bearer_authorization_header user
138
139       assert_no_difference "ChangesetSubscription.count" do
140         delete api_changeset_subscription_path(999111), :headers => auth_header
141
142         assert_response :not_found
143       end
144     end
145
146     def test_destroy_when_not_subscribed
147       user = create(:user)
148       auth_header = bearer_authorization_header user
149       changeset = create(:changeset, :closed)
150
151       assert_no_difference "ChangesetSubscription.count" do
152         assert_no_difference "changeset.subscribers.count" do
153           delete api_changeset_subscription_path(changeset), :headers => auth_header
154
155           assert_response :not_found
156         end
157       end
158     end
159
160     def test_destroy_on_open_changeset
161       user = create(:user)
162       auth_header = bearer_authorization_header user
163       changeset = create(:changeset)
164       changeset.subscribers.push(user)
165
166       assert_difference "ChangesetSubscription.count", -1 do
167         assert_difference "changeset.subscribers.count", -1 do
168           delete api_changeset_subscription_path(changeset), :headers => auth_header
169
170           assert_response :success
171         end
172       end
173     end
174
175     def test_destroy_on_closed_changeset
176       user = create(:user)
177       auth_header = bearer_authorization_header user
178       changeset = create(:changeset, :closed)
179       changeset.subscribers.push(user)
180
181       assert_difference "ChangesetSubscription.count", -1 do
182         assert_difference "changeset.subscribers.count", -1 do
183           delete api_changeset_subscription_path(changeset), :headers => auth_header
184
185           assert_response :success
186         end
187       end
188     end
189
190     def test_destroy_legacy
191       user = create(:user)
192       auth_header = bearer_authorization_header user
193       changeset = create(:changeset, :closed)
194       changeset.subscribers.push(user)
195
196       assert_difference "ChangesetSubscription.count", -1 do
197         assert_difference "changeset.subscribers.count", -1 do
198           post "/api/0.6/changeset/#{changeset.id}/unsubscribe", :headers => auth_header
199
200           assert_response :success
201         end
202       end
203     end
204   end
205 end