1 # frozen_string_literal: true
6 class UserBlocksControllerTest < ActionDispatch::IntegrationTest
9 { :path => "/api/0.6/user_blocks", :method => :post },
10 { :controller => "api/user_blocks", :action => "create" }
13 { :path => "/api/0.6/user_blocks/1", :method => :get },
14 { :controller => "api/user_blocks", :action => "show", :id => "1" }
17 { :path => "/api/0.6/user_blocks/1.json", :method => :get },
18 { :controller => "api/user_blocks", :action => "show", :id => "1", :format => "json" }
23 blocked_user = create(:user)
24 creator_user = create(:moderator_user)
25 block = create(:user_block, :user => blocked_user, :creator => creator_user, :reason => "because running tests")
27 get api_user_block_path(block)
28 assert_response :success
29 assert_select "osm>user_block", 1 do
30 assert_select ">@id", block.id.to_s
31 assert_select ">user", 1
32 assert_select ">user>@uid", blocked_user.id.to_s
33 assert_select ">creator", 1
34 assert_select ">creator>@uid", creator_user.id.to_s
35 assert_select ">revoker", 0
36 assert_select ">reason", 1
37 assert_select ">reason", "because running tests"
40 get api_user_block_path(block, :format => "json")
41 assert_response :success
42 js = ActiveSupport::JSON.decode(@response.body)
44 assert_equal block.id, js["user_block"]["id"]
47 def test_show_not_found
48 get api_user_block_path(123)
49 assert_response :not_found
50 assert_equal "text/plain", @response.media_type
53 def test_create_no_permission
54 blocked_user = create(:user)
55 assert_empty blocked_user.blocks
57 post api_user_blocks_path(:user => blocked_user.id, :reason => "because", :period => 1)
58 assert_response :unauthorized
59 assert_empty blocked_user.blocks
61 regular_creator_user = create(:user)
62 auth_header = bearer_authorization_header(regular_creator_user, :scopes => %w[read_prefs])
63 post api_user_blocks_path(:user => blocked_user.id, :reason => "because", :period => 1), :headers => auth_header
64 assert_response :forbidden
65 assert_empty blocked_user.blocks
67 auth_header = bearer_authorization_header(regular_creator_user, :scopes => %w[read_prefs write_blocks])
68 post api_user_blocks_path(:user => blocked_user.id, :reason => "because", :period => 1), :headers => auth_header
69 assert_response :forbidden
70 assert_empty blocked_user.blocks
72 moderator_creator_user = create(:moderator_user)
73 auth_header = bearer_authorization_header(moderator_creator_user, :scopes => %w[read_prefs])
74 post api_user_blocks_path(:user => blocked_user.id, :reason => "because", :period => 1), :headers => auth_header
75 assert_response :forbidden
76 assert_empty blocked_user.blocks
79 def test_create_invalid_because_no_user
80 blocked_user = create(:user, :deleted)
81 assert_empty blocked_user.blocks
83 creator_user = create(:moderator_user)
84 auth_header = bearer_authorization_header(creator_user, :scopes => %w[read_prefs write_blocks])
85 post api_user_blocks_path(:reason => "because", :period => 1), :headers => auth_header
86 assert_response :bad_request
87 assert_equal "text/plain", @response.media_type
88 assert_equal "No user was given", @response.body
90 assert_empty blocked_user.blocks
93 def test_create_invalid_because_user_is_unknown
94 creator_user = create(:moderator_user)
95 auth_header = bearer_authorization_header(creator_user, :scopes => %w[read_prefs write_blocks])
96 post api_user_blocks_path(:user => 0, :reason => "because", :period => 1), :headers => auth_header
97 assert_response :not_found
98 assert_equal "text/plain", @response.media_type
101 def test_create_invalid_because_user_is_deleted
102 blocked_user = create(:user, :deleted)
103 assert_empty blocked_user.blocks
105 creator_user = create(:moderator_user)
106 auth_header = bearer_authorization_header(creator_user, :scopes => %w[read_prefs write_blocks])
107 post api_user_blocks_path(:user => blocked_user.id, :reason => "because", :period => 1), :headers => auth_header
108 assert_response :not_found
109 assert_equal "text/plain", @response.media_type
111 assert_empty blocked_user.blocks
114 def test_create_invalid_because_missing_reason
115 create_with_params_and_assert_bad_request("No reason was given", :period => "10")
118 def test_create_invalid_because_missing_period
119 create_with_params_and_assert_bad_request("No period was given", :reason => "because")
122 def test_create_invalid_because_non_numeric_period
123 create_with_params_and_assert_bad_request("Period should be a number of hours", :reason => "because", :period => "one hour")
126 def test_create_invalid_because_negative_period
127 create_with_params_and_assert_bad_request("Period must be between 0 and #{UserBlock::PERIODS.max}", :reason => "go away", :period => "-1")
130 def test_create_invalid_because_excessive_period
131 create_with_params_and_assert_bad_request("Period must be between 0 and #{UserBlock::PERIODS.max}", :reason => "go away", :period => "10000000")
134 def test_create_invalid_because_unknown_needs_view
135 create_with_params_and_assert_bad_request("Needs_view must be true if provided", :reason => "because", :period => "1", :needs_view => "maybe")
138 def test_create_success
139 blocked_user = create(:user)
140 creator_user = create(:moderator_user)
142 assert_empty blocked_user.blocks
143 auth_header = bearer_authorization_header(creator_user, :scopes => %w[read_prefs write_blocks])
144 post api_user_blocks_path(:user => blocked_user.id, :reason => "because", :period => 1), :headers => auth_header
145 assert_response :success
146 assert_equal 1, blocked_user.blocks.length
148 block = blocked_user.blocks.take
149 assert_predicate block, :active?
150 assert_equal "because", block.reason
151 assert_equal creator_user, block.creator
153 assert_equal "application/xml", @response.media_type
154 assert_select "osm>user_block", 1 do
155 assert_select ">@id", block.id.to_s
156 assert_select ">@needs_view", "false"
157 assert_select ">user", 1
158 assert_select ">user>@uid", blocked_user.id.to_s
159 assert_select ">creator", 1
160 assert_select ">creator>@uid", creator_user.id.to_s
161 assert_select ">revoker", 0
162 assert_select ">reason", 1
163 assert_select ">reason", "because"
167 def test_create_success_with_needs_view
168 blocked_user = create(:user)
169 creator_user = create(:moderator_user)
171 assert_empty blocked_user.blocks
172 auth_header = bearer_authorization_header(creator_user, :scopes => %w[read_prefs write_blocks])
173 post api_user_blocks_path(:user => blocked_user.id, :reason => "because", :period => "1", :needs_view => "true"), :headers => auth_header
174 assert_response :success
175 assert_equal 1, blocked_user.blocks.length
177 block = blocked_user.blocks.take
178 assert_predicate block, :active?
179 assert_equal "because", block.reason
180 assert_equal creator_user, block.creator
182 assert_equal "application/xml", @response.media_type
183 assert_select "osm>user_block", 1 do
184 assert_select ">@id", block.id.to_s
185 assert_select ">@needs_view", "true"
186 assert_select ">user", 1
187 assert_select ">user>@uid", blocked_user.id.to_s
188 assert_select ">creator", 1
189 assert_select ">creator>@uid", creator_user.id.to_s
190 assert_select ">revoker", 0
191 assert_select ">reason", 1
192 assert_select ">reason", "because"
198 def create_with_params_and_assert_bad_request(message, **params)
199 blocked_user = create(:user)
200 assert_empty blocked_user.blocks
202 moderator_creator_user = create(:moderator_user)
203 auth_header = bearer_authorization_header(moderator_creator_user, :scopes => %w[read_prefs write_blocks])
205 post api_user_blocks_path({ :user => blocked_user.id }.merge(params)), :headers => auth_header
206 assert_response :bad_request
207 assert_equal "text/plain", @response.media_type
208 assert_equal message, @response.body
210 assert_empty blocked_user.blocks