]> git.openstreetmap.org Git - rails.git/blob - test/controllers/changeset_subscriptions_controller_test.rb
Create api map resource
[rails.git] / test / controllers / changeset_subscriptions_controller_test.rb
1 require "test_helper"
2
3 class ChangesetSubscriptionsControllerTest < ActionDispatch::IntegrationTest
4   ##
5   # test all routes which lead to this controller
6   def test_routes
7     assert_routing(
8       { :path => "/changeset/1/subscription", :method => :get },
9       { :controller => "changeset_subscriptions", :action => "show", :changeset_id => "1" }
10     )
11     assert_routing(
12       { :path => "/changeset/1/subscription", :method => :post },
13       { :controller => "changeset_subscriptions", :action => "create", :changeset_id => "1" }
14     )
15     assert_routing(
16       { :path => "/changeset/1/subscription", :method => :delete },
17       { :controller => "changeset_subscriptions", :action => "destroy", :changeset_id => "1" }
18     )
19
20     get "/changeset/1/subscribe"
21     assert_redirected_to "/changeset/1/subscription"
22
23     get "/changeset/1/unsubscribe"
24     assert_redirected_to "/changeset/1/subscription"
25   end
26
27   def test_show_as_anonymous
28     changeset = create(:changeset)
29
30     get changeset_subscription_path(changeset)
31     assert_redirected_to login_path(:referer => changeset_subscription_path(changeset))
32   end
33
34   def test_show_when_not_subscribed
35     user = create(:user)
36     other_user = create(:user)
37     changeset = create(:changeset, :user => user)
38
39     session_for(other_user)
40     get changeset_subscription_path(changeset)
41
42     assert_response :success
43     assert_dom ".content-body" do
44       assert_dom "a[href='#{changeset_path(changeset)}']", :text => "Changeset #{changeset.id}"
45       assert_dom "a[href='#{user_path(user)}']", :text => user.display_name
46       assert_dom "form" do
47         assert_dom "> @action", changeset_subscription_path(changeset)
48         assert_dom "input[type=submit]" do
49           assert_dom "> @value", "Subscribe to discussion"
50         end
51       end
52     end
53   end
54
55   def test_show_when_subscribed
56     user = create(:user)
57     other_user = create(:user)
58     changeset = create(:changeset, :user => user)
59     changeset.subscribers << other_user
60
61     session_for(other_user)
62     get changeset_subscription_path(changeset)
63
64     assert_response :success
65     assert_dom ".content-body" do
66       assert_dom "a[href='#{changeset_path(changeset)}']", :text => "Changeset #{changeset.id}"
67       assert_dom "a[href='#{user_path(user)}']", :text => user.display_name
68       assert_dom "form" do
69         assert_dom "> @action", changeset_subscription_path(changeset)
70         assert_dom "input[type=submit]" do
71           assert_dom "> @value", "Unsubscribe from discussion"
72         end
73       end
74     end
75   end
76
77   def test_create_success
78     user = create(:user)
79     other_user = create(:user)
80     changeset = create(:changeset, :user => user)
81
82     session_for(other_user)
83     assert_difference "changeset.subscribers.count", 1 do
84       post changeset_subscription_path(changeset)
85     end
86     assert_redirected_to changeset_path(changeset)
87     assert changeset.reload.subscribed?(other_user)
88   end
89
90   def test_create_fail
91     user = create(:user)
92     other_user = create(:user)
93     changeset = create(:changeset, :user => user)
94     changeset.subscribers << other_user
95
96     # not signed in
97     assert_no_difference "changeset.subscribers.count" do
98       post changeset_subscription_path(changeset)
99     end
100     assert_response :forbidden
101
102     session_for(other_user)
103
104     # bad diary id
105     post changeset_subscription_path(999111)
106     assert_response :not_found
107
108     # trying to subscribe when already subscribed
109     assert_no_difference "changeset.subscribers.count" do
110       post changeset_subscription_path(changeset)
111     end
112   end
113
114   def test_destroy_success
115     user = create(:user)
116     other_user = create(:user)
117     changeset = create(:changeset, :user => user)
118     changeset.subscribers << other_user
119
120     session_for(other_user)
121     assert_difference "changeset.subscribers.count", -1 do
122       delete changeset_subscription_path(changeset)
123     end
124     assert_redirected_to changeset_path(changeset)
125     assert_not changeset.reload.subscribed?(other_user)
126   end
127
128   def test_unsubscribe_fail
129     user = create(:user)
130     other_user = create(:user)
131     changeset = create(:changeset, :user => user)
132
133     # not signed in
134     assert_no_difference "changeset.subscribers.count" do
135       delete changeset_subscription_path(changeset)
136     end
137     assert_response :forbidden
138
139     session_for(other_user)
140
141     # bad diary id
142     delete changeset_subscription_path(999111)
143     assert_response :not_found
144
145     # trying to unsubscribe when not subscribed
146     assert_no_difference "changeset.subscribers.count" do
147       delete changeset_subscription_path(changeset)
148     end
149   end
150 end