diff options
Diffstat (limited to 'actionpack/test/controller/parameters')
| -rw-r--r-- | actionpack/test/controller/parameters/parameters_permit_test.rb | 28 | 
1 files changed, 28 insertions, 0 deletions
| diff --git a/actionpack/test/controller/parameters/parameters_permit_test.rb b/actionpack/test/controller/parameters/parameters_permit_test.rb index 87816515e7..f23aa599c1 100644 --- a/actionpack/test/controller/parameters/parameters_permit_test.rb +++ b/actionpack/test/controller/parameters/parameters_permit_test.rb @@ -297,4 +297,32 @@ class ParametersPermitTest < ActiveSupport::TestCase      assert @params.to_h.is_a? ActiveSupport::HashWithIndifferentAccess      assert_not @params.to_h.is_a? ActionController::Parameters    end + +  test "to_h only deep dups Ruby collections" do +    company = Class.new do +      attr_reader :dupped +      def dup; @dupped = true; end +    end.new + +    params = ActionController::Parameters.new(prem: { likes: %i( dancing ) }) +    assert_equal({ 'prem' => { 'likes' => %i( dancing ) } }, params.permit!.to_h) + +    params = ActionController::Parameters.new(companies: [ company, :acme ]) +    assert_equal({ 'companies' => [ company, :acme ] }, params.permit!.to_h) +    assert_not company.dupped +  end + +  test "to_unsafe_h only deep dups Ruby collections" do +    company = Class.new do +      attr_reader :dupped +      def dup; @dupped = true; end +    end.new + +    params = ActionController::Parameters.new(prem: { likes: %i( dancing ) }) +    assert_equal({ 'prem' => { 'likes' => %i( dancing ) } }, params.to_unsafe_h) + +    params = ActionController::Parameters.new(companies: [ company, :acme ]) +    assert_equal({ 'companies' => [ company, :acme ] }, params.to_unsafe_h) +    assert_not company.dupped +  end  end | 
