1 # frozen_string_literal: true
5 class ChangesetSubscriptionsControllerTest < ActionDispatch::IntegrationTest
7 # test all routes which lead to this controller
10 { :path => "/changeset/1/subscription", :method => :get },
11 { :controller => "changeset_subscriptions", :action => "show", :changeset_id => "1" }
14 { :path => "/changeset/1/subscription", :method => :post },
15 { :controller => "changeset_subscriptions", :action => "create", :changeset_id => "1" }
18 { :path => "/changeset/1/subscription", :method => :delete },
19 { :controller => "changeset_subscriptions", :action => "destroy", :changeset_id => "1" }
22 get "/changeset/1/subscribe"
23 assert_redirected_to "/changeset/1/subscription"
25 get "/changeset/1/unsubscribe"
26 assert_redirected_to "/changeset/1/subscription"
29 def test_show_as_anonymous
30 changeset = create(:changeset)
32 get changeset_subscription_path(changeset)
33 assert_redirected_to login_path(:referer => changeset_subscription_path(changeset))
36 def test_show_when_not_subscribed
38 other_user = create(:user)
39 changeset = create(:changeset, :user => user)
41 session_for(other_user)
42 get changeset_subscription_path(changeset)
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
49 assert_dom "> @action", changeset_subscription_path(changeset)
50 assert_dom "input[type=submit]" do
51 assert_dom "> @value", "Subscribe to discussion"
57 def test_show_when_subscribed
59 other_user = create(:user)
60 changeset = create(:changeset, :user => user)
61 changeset.subscribers << other_user
63 session_for(other_user)
64 get changeset_subscription_path(changeset)
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
71 assert_dom "> @action", changeset_subscription_path(changeset)
72 assert_dom "input[type=submit]" do
73 assert_dom "> @value", "Unsubscribe from discussion"
79 def test_create_success
81 other_user = create(:user)
82 changeset = create(:changeset, :user => user)
84 session_for(other_user)
85 assert_difference "changeset.subscribers.count", 1 do
86 post changeset_subscription_path(changeset)
88 assert_redirected_to changeset_path(changeset)
89 assert_includes changeset.reload.subscribers, other_user
94 other_user = create(:user)
95 changeset = create(:changeset, :user => user)
96 changeset.subscribers << other_user
99 assert_no_difference "changeset.subscribers.count" do
100 post changeset_subscription_path(changeset)
102 assert_response :forbidden
104 session_for(other_user)
107 post changeset_subscription_path(999111)
108 assert_response :not_found
110 # trying to subscribe when already subscribed
111 assert_no_difference "changeset.subscribers.count" do
112 post changeset_subscription_path(changeset)
116 def test_destroy_success
118 other_user = create(:user)
119 changeset = create(:changeset, :user => user)
120 changeset.subscribers << other_user
122 session_for(other_user)
123 assert_difference "changeset.subscribers.count", -1 do
124 delete changeset_subscription_path(changeset)
126 assert_redirected_to changeset_path(changeset)
127 assert_not_includes changeset.reload.subscribers, other_user
130 def test_unsubscribe_fail
132 other_user = create(:user)
133 changeset = create(:changeset, :user => user)
136 assert_no_difference "changeset.subscribers.count" do
137 delete changeset_subscription_path(changeset)
139 assert_response :forbidden
141 session_for(other_user)
144 delete changeset_subscription_path(999111)
145 assert_response :not_found
147 # trying to unsubscribe when not subscribed
148 assert_no_difference "changeset.subscribers.count" do
149 delete changeset_subscription_path(changeset)