]> git.openstreetmap.org Git - rails.git/blob - test/controllers/api/changesets/closes_controller_test.rb
Add frozen_string_literal comments to ruby files
[rails.git] / test / controllers / api / changesets / closes_controller_test.rb
1 # frozen_string_literal: true
2
3 require "test_helper"
4
5 module Api
6   module Changesets
7     class ClosesControllerTest < ActionDispatch::IntegrationTest
8       ##
9       # test all routes which lead to this controller
10       def test_routes
11         assert_routing(
12           { :path => "/api/0.6/changeset/1/close", :method => :put },
13           { :controller => "api/changesets/closes", :action => "update", :changeset_id => "1" }
14         )
15
16         assert_raises(ActionController::UrlGenerationError) do
17           put api_changeset_close_path(-132)
18         end
19       end
20
21       def test_update_missing_changeset_when_unauthorized
22         put api_changeset_close_path(999111)
23
24         assert_response :unauthorized
25       end
26
27       def test_update_missing_changeset_by_regular_user
28         auth_header = bearer_authorization_header
29
30         put api_changeset_close_path(999111), :headers => auth_header
31
32         assert_response :not_found
33       end
34
35       def test_update_when_unauthorized
36         changeset = create(:changeset)
37
38         put api_changeset_close_path(changeset)
39
40         assert_response :unauthorized
41         assert_predicate changeset.reload, :open?
42       end
43
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
48
49         put api_changeset_close_path(changeset), :headers => auth_header
50
51         assert_require_public_data
52         assert_predicate changeset.reload, :open?
53       end
54
55       def test_update_by_changeset_non_creator
56         user = create(:user)
57         changeset = create(:changeset)
58         auth_header = bearer_authorization_header user
59
60         put api_changeset_close_path(changeset), :headers => auth_header
61
62         assert_response :conflict
63         assert_equal "The user doesn't own that changeset", @response.body
64         assert_predicate changeset.reload, :open?
65       end
66
67       def test_update_without_required_scope
68         user = create(:user)
69         changeset = create(:changeset, :user => user)
70         auth_header = bearer_authorization_header user, :scopes => %w[read_prefs]
71
72         put api_changeset_close_path(changeset), :headers => auth_header
73
74         assert_response :forbidden
75         assert_predicate changeset.reload, :open?
76       end
77
78       def test_update_by_changeset_creator_with_required_scope
79         user = create(:user)
80         changeset = create(:changeset, :user => user)
81         auth_header = bearer_authorization_header user, :scopes => %w[write_api]
82
83         put api_changeset_close_path(changeset), :headers => auth_header
84
85         assert_response :success
86         assert_not_predicate changeset.reload, :open?
87       end
88
89       def test_update_twice
90         user = create(:user)
91         auth_header = bearer_authorization_header user
92
93         freeze_time do
94           changeset = create(:changeset, :user => user)
95
96           travel 30.minutes
97           put api_changeset_close_path(changeset), :headers => auth_header
98
99           assert_response :success
100           changeset.reload
101           assert_not_predicate changeset, :open?
102           assert_equal 0.minutes.ago, changeset.closed_at
103
104           travel 30.minutes
105           put api_changeset_close_path(changeset), :headers => auth_header
106
107           assert_response :conflict
108           changeset.reload
109           assert_not_predicate changeset, :open?
110           assert_equal 30.minutes.ago, changeset.closed_at
111         end
112       end
113
114       ##
115       # test that you can't close using another method
116       def test_update_method_invalid
117         user = create(:user)
118         changeset = create(:changeset, :user => user)
119
120         auth_header = bearer_authorization_header user
121
122         get api_changeset_close_path(changeset), :headers => auth_header
123         assert_response :not_found
124         assert_template "rescues/routing_error"
125
126         post api_changeset_close_path(changeset), :headers => auth_header
127         assert_response :not_found
128         assert_template "rescues/routing_error"
129       end
130     end
131   end
132 end