diff options
Diffstat (limited to 'actionpack/test/controller/parameters/parameters_permit_test.rb')
| -rw-r--r-- | actionpack/test/controller/parameters/parameters_permit_test.rb | 41 | 
1 files changed, 38 insertions, 3 deletions
| diff --git a/actionpack/test/controller/parameters/parameters_permit_test.rb b/actionpack/test/controller/parameters/parameters_permit_test.rb index 437da43d9b..33a91d72d9 100644 --- a/actionpack/test/controller/parameters/parameters_permit_test.rb +++ b/actionpack/test/controller/parameters/parameters_permit_test.rb @@ -8,9 +8,16 @@ class ParametersPermitTest < ActiveSupport::TestCase    end    setup do -    @params = ActionController::Parameters.new({ person: { -      age: "32", name: { first: "David", last: "Heinemeier Hansson" } -    }}) +    @params = ActionController::Parameters.new( +      person: { +        age: '32', +        name: { +          first: 'David', +          last: 'Heinemeier Hansson' +        }, +        addresses: [{city: 'Chicago', state: 'Illinois'}] +      } +    )      @struct_fields = []      %w(0 1 12).each do |number| @@ -107,6 +114,15 @@ class ParametersPermitTest < ActiveSupport::TestCase      assert_equal [], permitted[:id]    end +  test 'do not break params filtering on nil values' do +    params = ActionController::Parameters.new(a: 1, b: [1, 2, 3], c: nil) + +    permitted = params.permit(:a, c: [], b: []) +    assert_equal 1, permitted[:a] +    assert_equal [1, 2, 3], permitted[:b] +    assert_equal nil, permitted[:c] +  end +    test 'key to empty array: arrays of permitted scalars pass' do      [['foo'], [1], ['foo', 'bar'], [1, 2, 3]].each do |array|        params = ActionController::Parameters.new(id: array) @@ -138,6 +154,24 @@ class ParametersPermitTest < ActiveSupport::TestCase      assert_equal :foo, e.param    end +  test "fetch with a default value of a hash does not mutate the object" do +    params = ActionController::Parameters.new({}) +    params.fetch :foo, {} +    assert_equal nil, params[:foo] +  end + +  test 'hashes in array values get wrapped' do +    params = ActionController::Parameters.new(foo: [{}, {}]) +    params[:foo].each do |hash| +      assert !hash.permitted? +    end +  end + +  test 'arrays are converted at most once' do +    params = ActionController::Parameters.new(foo: [{}]) +    assert params[:foo].equal?(params[:foo]) +  end +    test "fetch doesnt raise ParameterMissing exception if there is a default" do      assert_equal "monkey", @params.fetch(:foo, "monkey")      assert_equal "monkey", @params.fetch(:foo) { "monkey" } @@ -206,6 +240,7 @@ class ParametersPermitTest < ActiveSupport::TestCase      assert @params.permitted?      assert @params[:person].permitted?      assert @params[:person][:name].permitted? +    assert @params[:person][:addresses][0].permitted?    end    test "permitted takes a default value when Parameters.permit_all_parameters is set" do | 
