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