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"