Disable allow_mass_assignment_of tests under Rails 5

The `allow_mass_assignment_of` matcher tests `attr_accessible` and
`attr_protected` which was moved to the `protected_attributes` gem in
Rails 4. The gem does not work in Rails 5 and neither does the matcher,
so there is no need to test it. (We should probably remove the matcher
altogether eventually -- Strong Parameters have long replaced
`protected_attributes`.)
This commit is contained in:
Elliot Winkler 2017-07-24 21:36:47 -05:00
parent bbb4075aba
commit c1a81d4b13
2 changed files with 107 additions and 101 deletions

View File

@ -30,5 +30,9 @@ module UnitTests
def rails_gte_4_2?
rails_version >= 4.2
end
def rails_lte_5?
rails_version < 5
end
end
end

View File

@ -1,115 +1,117 @@
require 'unit_spec_helper'
describe Shoulda::Matchers::ActiveModel::AllowMassAssignmentOfMatcher, type: :model do
context '#description' do
context 'without a role' do
it 'includes the attribute name' do
expect(described_class.new(:attr).description).
to eq 'allow mass assignment of attr'
if rails_lte_5?
context '#description' do
context 'without a role' do
it 'includes the attribute name' do
expect(described_class.new(:attr).description).
to eq 'allow mass assignment of attr'
end
end
if active_model_3_1?
context 'with a role' do
it 'includes the attribute name and the role' do
expect(described_class.new(:attr).as(:admin).description).
to eq 'allow mass assignment of attr as admin'
end
end
end
end
context 'an attribute that is blacklisted from mass-assignment' do
it 'rejects being mass-assignable' do
model = define_model(:example, blacklisted: :string) do
attr_protected :blacklisted
end.new
expect(model).not_to allow_mass_assignment_of(:blacklisted)
end
end
context 'an attribute that is not whitelisted for mass-assignment' do
it 'rejects being mass-assignable' do
model = define_model(:example, not_whitelisted: :string,
whitelisted: :string) do
attr_accessible :whitelisted
end.new
expect(model).not_to allow_mass_assignment_of(:not_whitelisted)
end
end
context 'an attribute that is whitelisted for mass-assignment' do
it 'accepts being mass-assignable' do
expect(define_model(:example, whitelisted: :string) do
attr_accessible :whitelisted
end.new).to allow_mass_assignment_of(:whitelisted)
end
end
context 'an attribute not included in the mass-assignment blacklist' do
it 'accepts being mass-assignable' do
model = define_model(:example, not_blacklisted: :string,
blacklisted: :string) do
attr_protected :blacklisted
end.new
expect(model).to allow_mass_assignment_of(:not_blacklisted)
end
end
unless active_model_3_2? || active_model_4_0?
context 'an attribute on a class with no protected attributes' do
it 'accepts being mass-assignable' do
expect(no_protected_attributes).to allow_mass_assignment_of(:attr)
end
it 'assigns a negative failure message' do
matcher = allow_mass_assignment_of(:attr)
expect(matcher.matches?(no_protected_attributes)).to eq true
expect(matcher.failure_message_when_negated).not_to be_nil
end
end
def no_protected_attributes
define_model(:example, attr: :string).new
end
end
context 'an attribute on a class with all protected attributes' do
it 'rejects being mass-assignable' do
expect(all_protected_attributes).not_to allow_mass_assignment_of(:attr)
end
def all_protected_attributes
define_model(:example, attr: :string) do
attr_accessible nil
end.new
end
end
if active_model_3_1?
context 'with a role' do
it 'includes the attribute name and the role' do
expect(described_class.new(:attr).as(:admin).description).
to eq 'allow mass assignment of attr as admin'
context 'an attribute included in the mass-assignment whitelist for admin role only' do
it 'rejects being mass-assignable' do
expect(mass_assignable_as_admin).not_to allow_mass_assignment_of(:attr)
end
it 'accepts being mass-assignable for admin' do
expect(mass_assignable_as_admin).to allow_mass_assignment_of(:attr).as(:admin)
end
def mass_assignable_as_admin
define_model(:example, attr: :string) do
attr_accessible :attr, as: :admin
end.new
end
end
end
end
context 'an attribute that is blacklisted from mass-assignment' do
it 'rejects being mass-assignable' do
model = define_model(:example, blacklisted: :string) do
attr_protected :blacklisted
end.new
expect(model).not_to allow_mass_assignment_of(:blacklisted)
def define_model(name, columns, &block)
super(name, columns, whitelist_attributes: false, &block)
end
end
context 'an attribute that is not whitelisted for mass-assignment' do
it 'rejects being mass-assignable' do
model = define_model(:example, not_whitelisted: :string,
whitelisted: :string) do
attr_accessible :whitelisted
end.new
expect(model).not_to allow_mass_assignment_of(:not_whitelisted)
end
end
context 'an attribute that is whitelisted for mass-assignment' do
it 'accepts being mass-assignable' do
expect(define_model(:example, whitelisted: :string) do
attr_accessible :whitelisted
end.new).to allow_mass_assignment_of(:whitelisted)
end
end
context 'an attribute not included in the mass-assignment blacklist' do
it 'accepts being mass-assignable' do
model = define_model(:example, not_blacklisted: :string,
blacklisted: :string) do
attr_protected :blacklisted
end.new
expect(model).to allow_mass_assignment_of(:not_blacklisted)
end
end
unless active_model_3_2? || active_model_4_0?
context 'an attribute on a class with no protected attributes' do
it 'accepts being mass-assignable' do
expect(no_protected_attributes).to allow_mass_assignment_of(:attr)
end
it 'assigns a negative failure message' do
matcher = allow_mass_assignment_of(:attr)
expect(matcher.matches?(no_protected_attributes)).to eq true
expect(matcher.failure_message_when_negated).not_to be_nil
end
end
def no_protected_attributes
define_model(:example, attr: :string).new
end
end
context 'an attribute on a class with all protected attributes' do
it 'rejects being mass-assignable' do
expect(all_protected_attributes).not_to allow_mass_assignment_of(:attr)
end
def all_protected_attributes
define_model(:example, attr: :string) do
attr_accessible nil
end.new
end
end
if active_model_3_1?
context 'an attribute included in the mass-assignment whitelist for admin role only' do
it 'rejects being mass-assignable' do
expect(mass_assignable_as_admin).not_to allow_mass_assignment_of(:attr)
end
it 'accepts being mass-assignable for admin' do
expect(mass_assignable_as_admin).to allow_mass_assignment_of(:attr).as(:admin)
end
def mass_assignable_as_admin
define_model(:example, attr: :string) do
attr_accessible :attr, as: :admin
end.new
end
end
end
def define_model(name, columns, &block)
super(name, columns, whitelist_attributes: false, &block)
end
end