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)