]> git.openstreetmap.org Git - rails.git/blob - test/controllers/api/changesets/closes_controller_test.rb
Merge remote-tracking branch 'upstream/pull/5998'
[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_missing_changeset_when_unauthorized
20         put api_changeset_close_path(999111)
21
22         assert_response :unauthorized
23       end
24
25       def test_update_missing_changeset_by_regular_user
26         auth_header = bearer_authorization_header
27
28         put api_changeset_close_path(999111), :headers => auth_header
29
30         assert_response :not_found
31       end
32
33       def test_update_when_unauthorized
34         changeset = create(:changeset)
35
36         put api_changeset_close_path(changeset)
37
38         assert_response :unauthorized
39         assert_predicate changeset.reload, :open?
40       end
41
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
46
47         put api_changeset_close_path(changeset), :headers => auth_header
48
49         assert_require_public_data
50         assert_predicate changeset.reload, :open?
51       end
52
53       def test_update_by_changeset_non_creator
54         user = create(:user)
55         changeset = create(:changeset)
56         auth_header = bearer_authorization_header user
57
58         put api_changeset_close_path(changeset), :headers => auth_header
59
60         assert_response :conflict
61         assert_equal "The user doesn't own that changeset", @response.body
62         assert_predicate changeset.reload, :open?
63       end
64
65       def test_update_without_required_scope
66         user = create(:user)
67         changeset = create(:changeset, :user => user)
68         auth_header = bearer_authorization_header user, :scopes => %w[read_prefs]
69
70         put api_changeset_close_path(changeset), :headers => auth_header
71
72         assert_response :forbidden
73         assert_predicate changeset.reload, :open?
74       end
75
76       def test_update_by_changeset_creator_with_required_scope
77         user = create(:user)
78         changeset = create(:changeset, :user => user)
79         auth_header = bearer_authorization_header user, :scopes => %w[write_api]
80
81         put api_changeset_close_path(changeset), :headers => auth_header
82
83         assert_response :success
84         assert_not_predicate changeset.reload, :open?
85       end
86
87       def test_update_twice
88         user = create(:user)
89         auth_header = bearer_authorization_header user
90
91         freeze_time do
92           changeset = create(:changeset, :user => user)
93
94           travel 30.minutes
95           put api_changeset_close_path(changeset), :headers => auth_header
96
97           assert_response :success
98           changeset.reload
99           assert_not_predicate changeset, :open?
100           assert_equal 0.minutes.ago, changeset.closed_at
101
102           travel 30.minutes
103           put api_changeset_close_path(changeset), :headers => auth_header
104
105           assert_response :conflict
106           changeset.reload
107           assert_not_predicate changeset, :open?
108           assert_equal 30.minutes.ago, changeset.closed_at
109         end
110       end
111
112       ##
113       # test that you can't close using another method
114       def test_update_method_invalid
115         user = create(:user)
116         changeset = create(:changeset, :user => user)
117
118         auth_header = bearer_authorization_header user
119
120         get api_changeset_close_path(changeset), :headers => auth_header
121         assert_response :not_found
122         assert_template "rescues/routing_error"
123
124         post api_changeset_close_path(changeset), :headers => auth_header
125         assert_response :not_found
126         assert_template "rescues/routing_error"
127       end
128     end
129   end
130 end