Split api changeset close test_update
[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_creator
36         user = create(:user)
37         changeset = create(:changeset, :user => user)
38         auth_header = bearer_authorization_header user
39
40         put api_changeset_close_path(changeset), :headers => auth_header
41
42         assert_response :success
43         assert_not_predicate changeset.reload, :open?
44       end
45
46       ##
47       # test that a different user can't close another user's changeset
48       def test_update_invalid
49         user = create(:user)
50         changeset = create(:changeset)
51
52         auth_header = bearer_authorization_header user
53
54         put api_changeset_close_path(changeset), :headers => auth_header
55         assert_response :conflict
56         assert_equal "The user doesn't own that changeset", @response.body
57       end
58
59       ##
60       # test that you can't close using another method
61       def test_update_method_invalid
62         user = create(:user)
63         changeset = create(:changeset, :user => user)
64
65         auth_header = bearer_authorization_header user
66
67         get api_changeset_close_path(changeset), :headers => auth_header
68         assert_response :not_found
69         assert_template "rescues/routing_error"
70
71         post api_changeset_close_path(changeset), :headers => auth_header
72         assert_response :not_found
73         assert_template "rescues/routing_error"
74       end
75
76       ##
77       # check that you can't close a changeset that isn't found
78       def test_update_not_found
79         cs_ids = [0, -132, "123"]
80
81         # First try to do it with no auth
82         cs_ids.each do |id|
83           put api_changeset_close_path(id)
84           assert_response :unauthorized, "Shouldn't be able close the non-existant changeset #{id}, when not authorized"
85         rescue ActionController::UrlGenerationError => e
86           assert_match(/No route matches/, e.to_s)
87         end
88
89         # Now try with auth
90         auth_header = bearer_authorization_header
91         cs_ids.each do |id|
92           put api_changeset_close_path(id), :headers => auth_header
93           assert_response :not_found, "The changeset #{id} doesn't exist, so can't be closed"
94         rescue ActionController::UrlGenerationError => e
95           assert_match(/No route matches/, e.to_s)
96         end
97       end
98     end
99   end
100 end