class PolicyAssertions::Test
Public Instance Methods
assert_permit(user, record, *permissions)
click to toggle source
# File lib/policy_assertions.rb, line 18 def assert_permit(user, record, *permissions) get_permissions(permissions.flatten).each do |permission| policy = find_policy!(user, record) assert policy.public_send(permission), "Expected #{policy.class.name} to grant #{permission} "\ "on #{record} for #{user} but it didn't" end end
assert_strong_parameters(user, record, params_hash, allowed_params)
click to toggle source
# File lib/policy_assertions.rb, line 37 def assert_strong_parameters(user, record, params_hash, allowed_params) policy = find_policy!(user, record) param_key = find_param_key(record) params = ActionController::Parameters.new(param_key => params_hash) strong_params = params.require(param_key) .permit(*policy.permitted_attributes).keys strong_params.each do |param| assert_includes allowed_params, param.to_sym, "User #{user} should not be permitted to "\ "update parameter [#{param}]" end end
refute_permit(user, record, *permissions)
click to toggle source
# File lib/policy_assertions.rb, line 27 def refute_permit(user, record, *permissions) get_permissions(permissions.flatten).each do |permission| policy = find_policy!(user, record) refute policy.public_send(permission), "Expected #{policy.class.name} not to grant #{permission} "\ "on #{record} for #{user} but it did" end end
Also aliased as: assert_not_permitted
Private Instance Methods
calling_method()
click to toggle source
# File lib/policy_assertions.rb, line 79 def calling_method if PolicyAssertions.config.ruby_version > 1 caller_locations(3, 1)[0].label else caller[2][/`.*'/][1..-2] end end
find_param_key(record)
click to toggle source
borrowed from Pundit::PolicyFinder
# File lib/policy_assertions.rb, line 57 def find_param_key(record) if record.respond_to?(:model_name) record.model_name.param_key.to_s elsif record.is_a?(Class) record.to_s.demodulize.underscore else record.class.to_s.demodulize.underscore end end
find_policy!(user, record)
click to toggle source
# File lib/policy_assertions.rb, line 87 def find_policy!(user, record) described_policy = self.respond_to?(:described_class) ? described_class : nil described_policy ? described_policy.new(user, record) : Pundit.policy!(user, record) end
get_permissions(permissions)
click to toggle source
# File lib/policy_assertions.rb, line 67 def get_permissions(permissions) return permissions if permissions.present? name = calling_method fail(MissingBlockParameters) if name.start_with?('block') # remove 'test_' and split # append ? to the permission name[5..-1].split(PolicyAssertions.config.separator).map { |a| "#{a}?" } end