1 # frozen_string_literal: true
 
   6   class ChangesetsControllerTest < ActionDispatch::IntegrationTest
 
   8     # test all routes which lead to this controller
 
  11         { :path => "/api/0.6/changeset/1/subscription", :method => :post },
 
  12         { :controller => "api/changeset_subscriptions", :action => "create", :changeset_id => "1" }
 
  15         { :path => "/api/0.6/changeset/1/subscription.json", :method => :post },
 
  16         { :controller => "api/changeset_subscriptions", :action => "create", :changeset_id => "1", :format => "json" }
 
  19         { :path => "/api/0.6/changeset/1/subscription", :method => :delete },
 
  20         { :controller => "api/changeset_subscriptions", :action => "destroy", :changeset_id => "1" }
 
  23         { :path => "/api/0.6/changeset/1/subscription.json", :method => :delete },
 
  24         { :controller => "api/changeset_subscriptions", :action => "destroy", :changeset_id => "1", :format => "json" }
 
  28         { :controller => "api/changeset_subscriptions", :action => "create", :changeset_id => "1" },
 
  29         { :path => "/api/0.6/changeset/1/subscribe", :method => :post }
 
  32         { :controller => "api/changeset_subscriptions", :action => "create", :changeset_id => "1", :format => "json" },
 
  33         { :path => "/api/0.6/changeset/1/subscribe.json", :method => :post }
 
  36         { :controller => "api/changeset_subscriptions", :action => "destroy", :changeset_id => "1" },
 
  37         { :path => "/api/0.6/changeset/1/unsubscribe", :method => :post }
 
  40         { :controller => "api/changeset_subscriptions", :action => "destroy", :changeset_id => "1", :format => "json" },
 
  41         { :path => "/api/0.6/changeset/1/unsubscribe.json", :method => :post }
 
  45     def test_create_by_unauthorized
 
  46       changeset = create(:changeset, :closed)
 
  48       assert_no_difference "ChangesetSubscription.count" do
 
  49         assert_no_difference "changeset.subscribers.count" do
 
  50           post api_changeset_subscription_path(changeset)
 
  52           assert_response :unauthorized
 
  57     def test_create_on_missing_changeset
 
  59       auth_header = bearer_authorization_header user
 
  61       assert_no_difference "ChangesetSubscription.count" do
 
  62         post api_changeset_subscription_path(999111), :headers => auth_header
 
  64         assert_response :not_found
 
  68     def test_create_when_subscribed
 
  70       auth_header = bearer_authorization_header user
 
  71       changeset = create(:changeset, :closed)
 
  72       changeset.subscribers << user
 
  74       assert_no_difference "ChangesetSubscription.count" do
 
  75         assert_no_difference "changeset.subscribers.count" do
 
  76           post api_changeset_subscription_path(changeset), :headers => auth_header
 
  78           assert_response :conflict
 
  81       assert_includes changeset.subscribers, user
 
  84     def test_create_on_open_changeset
 
  86       auth_header = bearer_authorization_header user
 
  87       changeset = create(:changeset)
 
  89       assert_difference "ChangesetSubscription.count", 1 do
 
  90         assert_difference "changeset.subscribers.count", 1 do
 
  91           post api_changeset_subscription_path(changeset), :headers => auth_header
 
  93           assert_response :success
 
  96       assert_includes changeset.subscribers, user
 
  99     def test_create_on_closed_changeset
 
 101       auth_header = bearer_authorization_header user
 
 102       changeset = create(:changeset, :closed)
 
 104       assert_difference "ChangesetSubscription.count", 1 do
 
 105         assert_difference "changeset.subscribers.count", 1 do
 
 106           post api_changeset_subscription_path(changeset), :headers => auth_header
 
 108           assert_response :success
 
 111       assert_includes changeset.subscribers, user
 
 114     def test_create_legacy
 
 116       auth_header = bearer_authorization_header user
 
 117       changeset = create(:changeset, :closed)
 
 119       assert_difference "ChangesetSubscription.count", 1 do
 
 120         assert_difference "changeset.subscribers.count", 1 do
 
 121           post "/api/0.6/changeset/#{changeset.id}/subscribe", :headers => auth_header
 
 123           assert_response :success
 
 126       assert_includes changeset.subscribers, user
 
 129     def test_destroy_by_unauthorized
 
 130       changeset = create(:changeset, :closed)
 
 132       assert_no_difference "ChangesetSubscription.count" do
 
 133         assert_no_difference "changeset.subscribers.count" do
 
 134           delete api_changeset_subscription_path(changeset)
 
 136           assert_response :unauthorized
 
 141     def test_destroy_on_missing_changeset
 
 143       auth_header = bearer_authorization_header user
 
 145       assert_no_difference "ChangesetSubscription.count" do
 
 146         delete api_changeset_subscription_path(999111), :headers => auth_header
 
 148         assert_response :not_found
 
 152     def test_destroy_when_not_subscribed
 
 154       auth_header = bearer_authorization_header user
 
 155       changeset = create(:changeset, :closed)
 
 157       assert_no_difference "ChangesetSubscription.count" do
 
 158         assert_no_difference "changeset.subscribers.count" do
 
 159           delete api_changeset_subscription_path(changeset), :headers => auth_header
 
 161           assert_response :not_found
 
 164       assert_not_includes changeset.subscribers, user
 
 167     def test_destroy_on_open_changeset
 
 169       auth_header = bearer_authorization_header user
 
 170       changeset = create(:changeset)
 
 171       changeset.subscribers.push(user)
 
 173       assert_difference "ChangesetSubscription.count", -1 do
 
 174         assert_difference "changeset.subscribers.count", -1 do
 
 175           delete api_changeset_subscription_path(changeset), :headers => auth_header
 
 177           assert_response :success
 
 180       assert_not_includes changeset.subscribers, user
 
 183     def test_destroy_on_closed_changeset
 
 185       auth_header = bearer_authorization_header user
 
 186       changeset = create(:changeset, :closed)
 
 187       changeset.subscribers.push(user)
 
 189       assert_difference "ChangesetSubscription.count", -1 do
 
 190         assert_difference "changeset.subscribers.count", -1 do
 
 191           delete api_changeset_subscription_path(changeset), :headers => auth_header
 
 193           assert_response :success
 
 196       assert_not_includes changeset.subscribers, user
 
 199     def test_destroy_legacy
 
 201       auth_header = bearer_authorization_header user
 
 202       changeset = create(:changeset, :closed)
 
 203       changeset.subscribers.push(user)
 
 205       assert_difference "ChangesetSubscription.count", -1 do
 
 206         assert_difference "changeset.subscribers.count", -1 do
 
 207           post "/api/0.6/changeset/#{changeset.id}/unsubscribe", :headers => auth_header
 
 209           assert_response :success
 
 212       assert_not_includes changeset.subscribers, user