Defect #42875 ยป 42875.patch
config/boot.rb | ||
---|---|---|
1 | 1 |
# frozen_string_literal: true |
2 | 2 | |
3 |
# Rack 3.1.14 or later limits query parameters to 4096 by default, which can |
|
4 |
# prevent saving workflows with many statuses. |
|
5 |
# Setting RACK_QUERY_PARSER_PARAMS_LIMIT to 65536 allows handling up to |
|
6 |
# approximately 100 statuses. |
|
7 |
# |
|
8 |
# See also: |
|
9 |
# - https://www.redmine.org/issues/42875 |
|
10 |
# - https://github.com/rack/rack/blob/v3.1.16/README.md#configuration |
|
11 |
ENV['RACK_QUERY_PARSER_PARAMS_LIMIT'] ||= '65536' |
|
12 | ||
3 | 13 |
# Set up gems listed in the Gemfile. |
4 | 14 |
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) |
5 | 15 |
test/functional/workflows_controller_test.rb | ||
---|---|---|
211 | 211 |
assert w.assignee |
212 | 212 |
end |
213 | 213 | |
214 |
def test_post_edit_with_large_number_of_statuses |
|
215 |
# This test ensures that workflows with many statuses can be saved. |
|
216 |
# Without setting `ENV['RACK_QUERY_PARSER_PARAMS_LIMIT']`, this raises |
|
217 |
# ActionController::BadRequest exception due to exceeding the default |
|
218 |
# query parameter limit of 4096. |
|
219 |
WorkflowTransition.delete_all |
|
220 | ||
221 |
num_statuses = 40 |
|
222 |
transitions_data = {} |
|
223 | ||
224 |
# Allowed statuses for a new issue (status_id = 0) |
|
225 |
transitions_data['0'] = {} |
|
226 |
(1..num_statuses).each do |status_id| |
|
227 |
transitions_data['0'][status_id.to_s] = {'always' => '1'} |
|
228 |
end |
|
229 | ||
230 |
# Status transitions between statuses |
|
231 |
(1..num_statuses).each do |status_id_from| # rubocop:disable RuboCopStyle/CombinableLoops |
|
232 |
transitions_data[status_id_from.to_s] = {} |
|
233 |
(1..num_statuses).each do |status_id_to| |
|
234 |
# skip self-transitions |
|
235 |
next if status_id_from == status_id_to |
|
236 | ||
237 |
transitions_data[status_id_from.to_s][status_id_to.to_s] = { |
|
238 |
'always' => '1', 'author' => '1', 'assignee' => '1' |
|
239 |
} |
|
240 |
end |
|
241 |
end |
|
242 | ||
243 |
assert_nothing_raised do |
|
244 |
patch :update, :params => { |
|
245 |
:role_id => 2, |
|
246 |
:tracker_id => 1, |
|
247 |
:transitions => transitions_data |
|
248 |
} |
|
249 |
end |
|
250 |
assert_response :found |
|
251 |
end |
|
252 | ||
214 | 253 |
def test_get_permissions |
215 | 254 |
get :permissions |
216 | 255 |