2017-07-24 16:20:53 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-08-06 12:54:50 -04:00
|
|
|
require "abstract_unit"
|
|
|
|
require "action_controller/metal/strong_parameters"
|
2016-10-11 09:29:20 -04:00
|
|
|
require "active_support/core_ext/object/deep_dup"
|
2016-07-07 05:48:13 -04:00
|
|
|
|
|
|
|
class ParametersDupTest < ActiveSupport::TestCase
|
|
|
|
setup do
|
|
|
|
ActionController::Parameters.permit_all_parameters = false
|
|
|
|
|
|
|
|
@params = ActionController::Parameters.new(
|
|
|
|
person: {
|
2016-08-06 12:54:50 -04:00
|
|
|
age: "32",
|
2016-07-07 05:48:13 -04:00
|
|
|
name: {
|
2016-08-06 12:54:50 -04:00
|
|
|
first: "David",
|
|
|
|
last: "Heinemeier Hansson"
|
2016-07-07 05:48:13 -04:00
|
|
|
},
|
2016-08-16 03:30:11 -04:00
|
|
|
addresses: [{ city: "Chicago", state: "Illinois" }]
|
2016-07-07 05:48:13 -04:00
|
|
|
}
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
2016-07-08 12:48:21 -04:00
|
|
|
test "a duplicate maintains the original's permitted status" do
|
|
|
|
@params.permit!
|
|
|
|
dupped_params = @params.dup
|
2018-01-25 18:14:09 -05:00
|
|
|
assert_predicate dupped_params, :permitted?
|
2016-07-08 12:48:21 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
test "a duplicate maintains the original's parameters" do
|
|
|
|
@params.permit!
|
|
|
|
dupped_params = @params.dup
|
|
|
|
assert_equal @params.to_h, dupped_params.to_h
|
|
|
|
end
|
|
|
|
|
|
|
|
test "changes to a duplicate's parameters do not affect the original" do
|
2016-07-07 05:48:13 -04:00
|
|
|
dupped_params = @params.dup
|
|
|
|
dupped_params.delete(:person)
|
|
|
|
assert_not_equal @params, dupped_params
|
|
|
|
end
|
2016-07-08 12:48:21 -04:00
|
|
|
|
2016-07-11 21:14:02 -04:00
|
|
|
test "changes to a duplicate's permitted status do not affect the original" do
|
2016-07-08 12:48:21 -04:00
|
|
|
dupped_params = @params.dup
|
|
|
|
dupped_params.permit!
|
|
|
|
assert_not_equal @params, dupped_params
|
|
|
|
end
|
2016-10-11 09:29:20 -04:00
|
|
|
|
|
|
|
test "deep_dup content" do
|
|
|
|
dupped_params = @params.deep_dup
|
|
|
|
dupped_params[:person][:age] = "45"
|
|
|
|
dupped_params[:person][:addresses].clear
|
|
|
|
|
|
|
|
assert_not_equal @params[:person][:age], dupped_params[:person][:age]
|
|
|
|
assert_not_equal @params[:person][:addresses], dupped_params[:person][:addresses]
|
|
|
|
end
|
|
|
|
|
|
|
|
test "deep_dup @permitted" do
|
|
|
|
dupped_params = @params.deep_dup
|
|
|
|
dupped_params.permit!
|
|
|
|
|
2018-01-25 18:14:09 -05:00
|
|
|
assert_not_predicate @params, :permitted?
|
2016-10-11 09:29:20 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
test "deep_dup @permitted is being copied" do
|
|
|
|
@params.permit!
|
2018-01-25 18:14:09 -05:00
|
|
|
assert_predicate @params.deep_dup, :permitted?
|
2016-10-11 09:29:20 -04:00
|
|
|
end
|
2016-07-07 05:48:13 -04:00
|
|
|
end
|