5     class ClosesControllerTest < ActionDispatch::IntegrationTest
 
   7       # test all routes which lead to this controller
 
  10           { :path => "/api/0.6/changeset/1/close", :method => :put },
 
  11           { :controller => "api/changesets/closes", :action => "update", :changeset_id => "1" }
 
  14         assert_raises(ActionController::UrlGenerationError) do
 
  15           put api_changeset_close_path(-132)
 
  19       def test_update_missing_changeset_when_unauthorized
 
  20         put api_changeset_close_path(999111)
 
  22         assert_response :unauthorized
 
  25       def test_update_missing_changeset_by_regular_user
 
  26         auth_header = bearer_authorization_header
 
  28         put api_changeset_close_path(999111), :headers => auth_header
 
  30         assert_response :not_found
 
  33       def test_update_when_unauthorized
 
  34         changeset = create(:changeset)
 
  36         put api_changeset_close_path(changeset)
 
  38         assert_response :unauthorized
 
  39         assert_predicate changeset.reload, :open?
 
  42       def test_update_by_private_user
 
  43         user = create(:user, :data_public => false)
 
  44         changeset = create(:changeset, :user => user)
 
  45         auth_header = bearer_authorization_header user
 
  47         put api_changeset_close_path(changeset), :headers => auth_header
 
  49         assert_require_public_data
 
  50         assert_predicate changeset.reload, :open?
 
  53       def test_update_by_changeset_non_creator
 
  55         changeset = create(:changeset)
 
  56         auth_header = bearer_authorization_header user
 
  58         put api_changeset_close_path(changeset), :headers => auth_header
 
  60         assert_response :conflict
 
  61         assert_equal "The user doesn't own that changeset", @response.body
 
  62         assert_predicate changeset.reload, :open?
 
  65       def test_update_without_required_scope
 
  67         changeset = create(:changeset, :user => user)
 
  68         auth_header = bearer_authorization_header user, :scopes => %w[read_prefs]
 
  70         put api_changeset_close_path(changeset), :headers => auth_header
 
  72         assert_response :forbidden
 
  73         assert_predicate changeset.reload, :open?
 
  76       def test_update_by_changeset_creator_with_required_scope
 
  78         changeset = create(:changeset, :user => user)
 
  79         auth_header = bearer_authorization_header user, :scopes => %w[write_api]
 
  81         put api_changeset_close_path(changeset), :headers => auth_header
 
  83         assert_response :success
 
  84         assert_not_predicate changeset.reload, :open?
 
  89         auth_header = bearer_authorization_header user
 
  92           changeset = create(:changeset, :user => user)
 
  95           put api_changeset_close_path(changeset), :headers => auth_header
 
  97           assert_response :success
 
  99           assert_not_predicate changeset, :open?
 
 100           assert_equal 0.minutes.ago, changeset.closed_at
 
 103           put api_changeset_close_path(changeset), :headers => auth_header
 
 105           assert_response :conflict
 
 107           assert_not_predicate changeset, :open?
 
 108           assert_equal 30.minutes.ago, changeset.closed_at
 
 113       # test that you can't close using another method
 
 114       def test_update_method_invalid
 
 116         changeset = create(:changeset, :user => user)
 
 118         auth_header = bearer_authorization_header user
 
 120         get api_changeset_close_path(changeset), :headers => auth_header
 
 121         assert_response :not_found
 
 122         assert_template "rescues/routing_error"
 
 124         post api_changeset_close_path(changeset), :headers => auth_header
 
 125         assert_response :not_found
 
 126         assert_template "rescues/routing_error"