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