diff --git a/lib/shoulda/matchers/action_controller/permit_matcher.rb b/lib/shoulda/matchers/action_controller/permit_matcher.rb index 8e8b5c48..ef184aaf 100644 --- a/lib/shoulda/matchers/action_controller/permit_matcher.rb +++ b/lib/shoulda/matchers/action_controller/permit_matcher.rb @@ -250,7 +250,12 @@ module Shoulda parameters_double_registry.register Doublespeak.with_doubles_activated do - context.__send__(verb, action, request_params) + Shoulda::Matchers::RailsShim.make_controller_request( + context, + verb, + action, + request_params, + ) end unpermitted_parameter_names.empty? diff --git a/lib/shoulda/matchers/rails_shim.rb b/lib/shoulda/matchers/rails_shim.rb index 7aeab629..1fea4eb1 100644 --- a/lib/shoulda/matchers/rails_shim.rb +++ b/lib/shoulda/matchers/rails_shim.rb @@ -7,6 +7,10 @@ module Shoulda Gem::Requirement.new('>= 4.1').satisfied_by?(action_pack_version) end + def action_pack_gte_5? + Gem::Requirement.new('>= 5').satisfied_by?(action_pack_version) + end + def action_pack_version Gem::Version.new(::ActionPack::VERSION::STRING) end @@ -43,7 +47,7 @@ module Shoulda def make_controller_request(context, verb, action, request_params) params = - if active_record_major_version >= 5 + if action_pack_gte_5? { params: request_params } else request_params @@ -123,17 +127,6 @@ module Shoulda I18n.translate(primary_translation_key, translate_options) end end - - def self.make_controller_request(context, verb, action, request_params) - params = - if active_record_major_version >= 5 - { params: request_params } - else - request_params - end - - context.__send__(verb, action, params) - end end end end diff --git a/spec/support/unit/helpers/action_pack_versions.rb b/spec/support/unit/helpers/action_pack_versions.rb new file mode 100644 index 00000000..86606f7b --- /dev/null +++ b/spec/support/unit/helpers/action_pack_versions.rb @@ -0,0 +1,18 @@ +module UnitTests + module ActionPackVersions + extend self + + def self.configure_example_group(example_group) + example_group.include(self) + example_group.extend(self) + end + + def action_pack_gte_5? + action_pack_version =~ '>= 5' + end + + def action_pack_version + Tests::Version.new(ActionPack::VERSION::STRING) + end + end +end diff --git a/spec/unit/shoulda/matchers/action_controller/permit_matcher_spec.rb b/spec/unit/shoulda/matchers/action_controller/permit_matcher_spec.rb index 1a1a5a55..b8857df9 100644 --- a/spec/unit/shoulda/matchers/action_controller/permit_matcher_spec.rb +++ b/spec/unit/shoulda/matchers/action_controller/permit_matcher_spec.rb @@ -498,7 +498,12 @@ describe Shoulda::Matchers::ActionController::PermitMatcher, type: :controller d matcher.matches?(controller) - expect(context).to have_received(:post).with(:create, {}) + expect_to_have_made_controller_request( + verb: :post, + action: :create, + params: {}, + context: context, + ) end end @@ -511,7 +516,12 @@ describe Shoulda::Matchers::ActionController::PermitMatcher, type: :controller d matcher.matches?(controller) - expect(context).to have_received(:patch).with(:update, {}) + expect_to_have_made_controller_request( + verb: :patch, + action: :update, + params: {}, + context: context, + ) end else it 'PUTs to the controller' do @@ -521,7 +531,12 @@ describe Shoulda::Matchers::ActionController::PermitMatcher, type: :controller d matcher.matches?(controller) - expect(context).to have_received(:put).with(:update, {}) + expect_to_have_made_controller_request( + verb: :put, + action: :update, + params: {}, + context: context, + ) end end end @@ -536,7 +551,12 @@ describe Shoulda::Matchers::ActionController::PermitMatcher, type: :controller d matcher.matches?(controller) - expect(context).to have_received(:delete).with(:hide, {}) + expect_to_have_made_controller_request( + verb: :delete, + action: :hide, + params: {}, + context: context, + ) end end end @@ -598,4 +618,12 @@ describe Shoulda::Matchers::ActionController::PermitMatcher, type: :controller d def build_context double('context', post: nil, put: nil, patch: nil, delete: nil) end + + def expect_to_have_made_controller_request(context:, verb:, action:, params:) + if action_pack_gte_5? + expect(context).to have_received(verb).with(action, params: params) + else + expect(context).to have_received(verb).with(action, params) + end + end end diff --git a/spec/unit_spec_helper.rb b/spec/unit_spec_helper.rb index ba99e6b0..dfbe21d6 100644 --- a/spec/unit_spec_helper.rb +++ b/spec/unit_spec_helper.rb @@ -10,6 +10,7 @@ Dir[ File.join(File.expand_path('../support/unit/**/*.rb', __FILE__)) ].sort.eac end RSpec.configure do |config| + UnitTests::ActionPackVersions.configure_example_group(config) UnitTests::ActiveModelHelpers.configure_example_group(config) UnitTests::ActiveModelVersions.configure_example_group(config) UnitTests::ClassBuilder.configure_example_group(config)