]> git.openstreetmap.org Git - rails.git/blob - test/controllers/api/changesets/closes_controller_test.rb
Update api changeset close test for non-creator
[rails.git] / test / controllers / api / changesets / closes_controller_test.rb
1 require "test_helper"
2
3 module Api
4   module Changesets
5     class ClosesControllerTest < ActionDispatch::IntegrationTest
6       ##
7       # test all routes which lead to this controller
8       def test_routes
9         assert_routing(
10           { :path => "/api/0.6/changeset/1/close", :method => :put },
11           { :controller => "api/changesets/closes", :action => "update", :changeset_id => "1" }
12         )
13       end
14
15       def test_update_when_unauthorized
16         changeset = create(:changeset)
17
18         put api_changeset_close_path(changeset)
19
20         assert_response :unauthorized
21         assert_predicate changeset.reload, :open?
22       end
23
24       def test_update_by_private_user
25         user = create(:user, :data_public => false)
26         changeset = create(:changeset, :user => user)
27         auth_header = bearer_authorization_header user
28
29         put api_changeset_close_path(changeset), :headers => auth_header
30
31         assert_require_public_data
32         assert_predicate changeset.reload, :open?
33       end
34
35       def test_update_by_changeset_non_creator
36         user = create(:user)
37         changeset = create(:changeset)
38         auth_header = bearer_authorization_header user
39
40         put api_changeset_close_path(changeset), :headers => auth_header
41
42         assert_response :conflict
43         assert_equal "The user doesn't own that changeset", @response.body
44         assert_predicate changeset.reload, :open?
45       end
46
47       def test_update_by_changeset_creator
48         user = create(:user)
49         changeset = create(:changeset, :user => user)
50         auth_header = bearer_authorization_header user
51
52         put api_changeset_close_path(changeset), :headers => auth_header
53
54         assert_response :success
55         assert_not_predicate changeset.reload, :open?
56       end
57
58       ##
59       # test that you can't close using another method
60       def test_update_method_invalid
61         user = create(:user)
62         changeset = create(:changeset, :user => user)
63
64         auth_header = bearer_authorization_header user
65
66         get api_changeset_close_path(changeset), :headers => auth_header
67         assert_response :not_found
68         assert_template "rescues/routing_error"
69
70         post api_changeset_close_path(changeset), :headers => auth_header
71         assert_response :not_found
72         assert_template "rescues/routing_error"
73       end
74
75       ##
76       # check that you can't close a changeset that isn't found
77       def test_update_not_found
78         cs_ids = [0, -132, "123"]
79
80         # First try to do it with no auth
81         cs_ids.each do |id|
82           put api_changeset_close_path(id)
83           assert_response :unauthorized, "Shouldn't be able close the non-existant changeset #{id}, when not authorized"
84         rescue ActionController::UrlGenerationError => e
85           assert_match(/No route matches/, e.to_s)
86         end
87
88         # Now try with auth
89         auth_header = bearer_authorization_header
90         cs_ids.each do |id|
91           put api_changeset_close_path(id), :headers => auth_header
92           assert_response :not_found, "The changeset #{id} doesn't exist, so can't be closed"
93         rescue ActionController::UrlGenerationError => e
94           assert_match(/No route matches/, e.to_s)
95         end
96       end
97     end
98   end
99 end