]> git.openstreetmap.org Git - rails.git/blob - test/controllers/api/changeset_subscriptions_controller_test.rb
Create api changeset subscription resource
[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     end
25
26     def test_create_success
27       auth_header = bearer_authorization_header
28       changeset = create(:changeset, :closed)
29
30       assert_difference "changeset.subscribers.count", 1 do
31         post api_changeset_subscription_path(changeset), :headers => auth_header
32       end
33       assert_response :success
34
35       # not closed changeset
36       changeset = create(:changeset)
37       assert_difference "changeset.subscribers.count", 1 do
38         post api_changeset_subscription_path(changeset), :headers => auth_header
39       end
40       assert_response :success
41     end
42
43     def test_create_fail
44       user = create(:user)
45
46       # unauthorized
47       changeset = create(:changeset, :closed)
48       assert_no_difference "changeset.subscribers.count" do
49         post api_changeset_subscription_path(changeset)
50       end
51       assert_response :unauthorized
52
53       auth_header = bearer_authorization_header user
54
55       # bad changeset id
56       assert_no_difference "changeset.subscribers.count" do
57         post api_changeset_subscription_path(999111), :headers => auth_header
58       end
59       assert_response :not_found
60
61       # trying to subscribe when already subscribed
62       changeset = create(:changeset, :closed)
63       changeset.subscribers.push(user)
64       assert_no_difference "changeset.subscribers.count" do
65         post api_changeset_subscription_path(changeset), :headers => auth_header
66       end
67       assert_response :conflict
68     end
69
70     def test_destroy_success
71       user = create(:user)
72       auth_header = bearer_authorization_header user
73       changeset = create(:changeset, :closed)
74       changeset.subscribers.push(user)
75
76       assert_difference "changeset.subscribers.count", -1 do
77         delete api_changeset_subscription_path(changeset), :headers => auth_header
78       end
79       assert_response :success
80
81       # not closed changeset
82       changeset = create(:changeset)
83       changeset.subscribers.push(user)
84
85       assert_difference "changeset.subscribers.count", -1 do
86         delete api_changeset_subscription_path(changeset), :headers => auth_header
87       end
88       assert_response :success
89     end
90
91     def test_destroy_fail
92       # unauthorized
93       changeset = create(:changeset, :closed)
94       assert_no_difference "changeset.subscribers.count" do
95         delete api_changeset_subscription_path(changeset)
96       end
97       assert_response :unauthorized
98
99       auth_header = bearer_authorization_header
100
101       # bad changeset id
102       assert_no_difference "changeset.subscribers.count" do
103         delete api_changeset_subscription_path(999111), :headers => auth_header
104       end
105       assert_response :not_found
106
107       # trying to unsubscribe when not subscribed
108       changeset = create(:changeset, :closed)
109       assert_no_difference "changeset.subscribers.count" do
110         delete api_changeset_subscription_path(changeset), :headers => auth_header
111       end
112       assert_response :not_found
113     end
114   end
115 end