1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/actionpack/test/controller/parameters/always_permitted_parameters_test.rb
Shuhei Kagawa 1b0526eaac Return super in ActionController::Parameters.const_missing
The current implementation of ActionController::Parameters.const_missing
returns `ActionController::Parameters.always_permitted_parameters` even
if its `super` returns a constant without raising error. This prevents its
subclass in a autoloading module/class from taking advantage of
autoloading constants.

    class SomeParameters < ActionController::Parameters
      def do_something
        DefinedSomewhere.do_something
      end
    end

In the code above, `DefinedSomewhere` is to be autoloaded with
`Module.const_missing` but `ActionController::Parameters.const_missing`
returns `always_permitted_parameters` instead of the autoloaded
constant.

This pull request fixes the issue respecting `const_missing`'s `super`.
2015-03-28 10:40:58 +09:00

36 lines
1.2 KiB
Ruby

require 'abstract_unit'
require 'action_controller/metal/strong_parameters'
require 'minitest/mock'
class AlwaysPermittedParametersTest < ActiveSupport::TestCase
def setup
ActionController::Parameters.action_on_unpermitted_parameters = :raise
ActionController::Parameters.always_permitted_parameters = %w( controller action format )
end
def teardown
ActionController::Parameters.action_on_unpermitted_parameters = false
ActionController::Parameters.always_permitted_parameters = %w( controller action )
end
test "shows deprecations warning on NEVER_UNPERMITTED_PARAMS" do
assert_deprecated do
ActionController::Parameters::NEVER_UNPERMITTED_PARAMS
end
end
test "returns super on missing constant other than NEVER_UNPERMITTED_PARAMS" do
ActionController::Parameters.superclass.stub :const_missing, "super" do
assert_equal "super", ActionController::Parameters::NON_EXISTING_CONSTANT
end
end
test "permits parameters that are whitelisted" do
params = ActionController::Parameters.new({
book: { pages: 65 },
format: "json"
})
permitted = params.permit book: [:pages]
assert permitted.permitted?
end
end