Skip to content

Commit

Permalink
better coverage for _only methods
Browse files Browse the repository at this point in the history
  • Loading branch information
martinemde committed Aug 10, 2024
1 parent 8525cc3 commit 8f7c3cb
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 6 deletions.
11 changes: 5 additions & 6 deletions actionpack/lib/action_controller/metal/strong_parameters.rb
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,10 @@ class InvalidParameterKey < ArgumentError
#
# Provides methods for filtering and requiring params:
#
# - `expect` to safely permit and require parameters in one step.
# - `allow` is the same as `expect`, but for optional parameters.
# - `permit` to filter params for mass assignment.
# - `require` to require a parameter or raise an error.
# * `expect` to safely permit and require parameters in one step.
# * `allow` is the same as `expect`, but for optional parameters.
# * `permit` to filter params for mass assignment.
# * `require` to require a parameter or raise an error.
#
# params = ActionController::Parameters.new({
# person: {
Expand All @@ -97,8 +97,7 @@ class InvalidParameterKey < ArgumentError
# })
#
# permitted = params.expect(person: [:name, :age])
# permitted # => #<ActionController::Parameters {"name"=>"Francesco", "age"=>22} permitted: true>
# permitted.permitted? # => true
# permitted # => #<ActionController::Parameters {"name"=>"Francesco", "age"=>22} permitted: true>
#
# Person.first.update!(permitted)
# # => #<Person id: 1, name: "Francesco", age: 22, role: "user">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,44 @@ def teardown
end
end

test "permit_only overrides log on unexpected params" do
params = ActionController::Parameters.new(
book: { pages: 65 },
fishing: "Turnips")

assert_raises(ActionController::UnpermittedParameters) do
params.permit_only(book: [:pages])
end
end

test "permit_only overrides log on unexpected nested params" do
params = ActionController::Parameters.new(
book: { pages: 65, title: "Green Cats and where to find them." })
unpermitted = nil

assert_raises(ActionController::UnpermittedParameters) do
params.permit_only(book: [:pages])
end
end

test "expect_only overrides log on unexpected nested params" do
params = ActionController::Parameters.new(
book: { pages: 65, title: "Green Cats and where to find them." })

assert_raises(ActionController::UnpermittedParameters) do
params.expect_only(book: [:pages])
end
end

test "allow_only overrides log on unexpected nested params" do
params = ActionController::Parameters.new(
book: { pages: 65, title: "Green Cats and where to find them." })

assert_raises(ActionController::UnpermittedParameters) do
params.allow_only(book: [:pages])
end
end

private
def assert_logged(message)
old_logger = ActionController::Base.logger
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,73 @@ def teardown
params.allow(:id)
end
end

test "permit_only with block overrides raise on unexpected params" do
params = ActionController::Parameters.new(
book: { pages: 65 },
fishing: "Turnips")
unpermitted = nil

assert_nothing_raised do
params.permit_only(book: [:pages]) { |keys| unpermitted = keys }
end

assert_equal ["fishing"], unpermitted
end

test "permit_only with block overrides raise on unexpected nested params" do
params = ActionController::Parameters.new(
book: { pages: 65, title: "Green Cats and where to find them." })
unpermitted = nil

assert_nothing_raised do
params.permit_only(book: [:pages]) { |keys| unpermitted = keys }
end

assert_equal ["title"], unpermitted
end

test "expect_only does not raise on unexpected root params" do
params = ActionController::Parameters.new(
book: { pages: 65 },
fishing: "Turnips")

assert_nothing_raised do
params.expect_only(book: [:pages])
end
end

test "expect_only with block overrides raise on unexpected nested params" do
params = ActionController::Parameters.new(
book: { pages: 65, title: "Green Cats and where to find them." })
unpermitted = nil

assert_nothing_raised do
params.expect_only(book: [:pages]) { |keys| unpermitted = keys }
end

assert_equal ["title"], unpermitted
end

test "allow_only does not raise on unexpected root params" do
params = ActionController::Parameters.new(
book: { pages: 65 },
fishing: "Turnips")

assert_nothing_raised do
params.allow_only(book: [:pages])
end
end

test "allow_only with block overrides raise on unexpected nested params" do
params = ActionController::Parameters.new(
book: { pages: 65, title: "Green Cats and where to find them." })
unpermitted = nil

assert_nothing_raised do
params.allow_only(book: [:pages]) { |keys| unpermitted = keys }
end

assert_equal ["title"], unpermitted
end
end

0 comments on commit 8f7c3cb

Please sign in to comment.