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"