1 # frozen_string_literal: true
 
   7     class ClosesControllerTest < ActionDispatch::IntegrationTest
 
   9       # test all routes which lead to this controller
 
  12           { :path => "/api/0.6/changeset/1/close", :method => :put },
 
  13           { :controller => "api/changesets/closes", :action => "update", :changeset_id => "1" }
 
  16         assert_raises(ActionController::UrlGenerationError) do
 
  17           put api_changeset_close_path(-132)
 
  21       def test_update_missing_changeset_when_unauthorized
 
  22         put api_changeset_close_path(999111)
 
  24         assert_response :unauthorized
 
  27       def test_update_missing_changeset_by_regular_user
 
  28         auth_header = bearer_authorization_header
 
  30         put api_changeset_close_path(999111), :headers => auth_header
 
  32         assert_response :not_found
 
  35       def test_update_when_unauthorized
 
  36         changeset = create(:changeset)
 
  38         put api_changeset_close_path(changeset)
 
  40         assert_response :unauthorized
 
  41         assert_predicate changeset.reload, :open?
 
  44       def test_update_by_private_user
 
  45         user = create(:user, :data_public => false)
 
  46         changeset = create(:changeset, :user => user)
 
  47         auth_header = bearer_authorization_header user
 
  49         put api_changeset_close_path(changeset), :headers => auth_header
 
  51         assert_require_public_data
 
  52         assert_predicate changeset.reload, :open?
 
  55       def test_update_by_changeset_non_creator
 
  57         changeset = create(:changeset)
 
  58         auth_header = bearer_authorization_header user
 
  60         put api_changeset_close_path(changeset), :headers => auth_header
 
  62         assert_response :conflict
 
  63         assert_equal "The user doesn't own that changeset", @response.body
 
  64         assert_predicate changeset.reload, :open?
 
  67       def test_update_without_required_scope
 
  69         changeset = create(:changeset, :user => user)
 
  70         auth_header = bearer_authorization_header user, :scopes => %w[read_prefs]
 
  72         put api_changeset_close_path(changeset), :headers => auth_header
 
  74         assert_response :forbidden
 
  75         assert_predicate changeset.reload, :open?
 
  78       def test_update_by_changeset_creator_with_required_scope
 
  80         changeset = create(:changeset, :user => user)
 
  81         auth_header = bearer_authorization_header user, :scopes => %w[write_api]
 
  83         put api_changeset_close_path(changeset), :headers => auth_header
 
  85         assert_response :success
 
  86         assert_not_predicate changeset.reload, :open?
 
  91         auth_header = bearer_authorization_header user
 
  94           changeset = create(:changeset, :user => user)
 
  97           put api_changeset_close_path(changeset), :headers => auth_header
 
  99           assert_response :success
 
 101           assert_not_predicate changeset, :open?
 
 102           assert_equal 0.minutes.ago, changeset.closed_at
 
 105           put api_changeset_close_path(changeset), :headers => auth_header
 
 107           assert_response :conflict
 
 109           assert_not_predicate changeset, :open?
 
 110           assert_equal 30.minutes.ago, changeset.closed_at
 
 115       # test that you can't close using another method
 
 116       def test_update_method_invalid
 
 118         changeset = create(:changeset, :user => user)
 
 120         auth_header = bearer_authorization_header user
 
 122         get api_changeset_close_path(changeset), :headers => auth_header
 
 123         assert_response :not_found
 
 124         assert_template "rescues/routing_error"
 
 126         post api_changeset_close_path(changeset), :headers => auth_header
 
 127         assert_response :not_found
 
 128         assert_template "rescues/routing_error"