mirror of
https://github.com/thoughtbot/shoulda-matchers.git
synced 2022-11-09 12:01:38 -05:00
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:
parent
bbb4075aba
commit
c1a81d4b13
2 changed files with 107 additions and 101 deletions
|
@ -30,5 +30,9 @@ module UnitTests
|
||||||
def rails_gte_4_2?
|
def rails_gte_4_2?
|
||||||
rails_version >= 4.2
|
rails_version >= 4.2
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def rails_lte_5?
|
||||||
|
rails_version < 5
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,115 +1,117 @@
|
||||||
require 'unit_spec_helper'
|
require 'unit_spec_helper'
|
||||||
|
|
||||||
describe Shoulda::Matchers::ActiveModel::AllowMassAssignmentOfMatcher, type: :model do
|
describe Shoulda::Matchers::ActiveModel::AllowMassAssignmentOfMatcher, type: :model do
|
||||||
context '#description' do
|
if rails_lte_5?
|
||||||
context 'without a role' do
|
context '#description' do
|
||||||
it 'includes the attribute name' do
|
context 'without a role' do
|
||||||
expect(described_class.new(:attr).description).
|
it 'includes the attribute name' do
|
||||||
to eq 'allow mass assignment of attr'
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
if active_model_3_1?
|
if active_model_3_1?
|
||||||
context 'with a role' do
|
context 'an attribute included in the mass-assignment whitelist for admin role only' do
|
||||||
it 'includes the attribute name and the role' do
|
it 'rejects being mass-assignable' do
|
||||||
expect(described_class.new(:attr).as(:admin).description).
|
expect(mass_assignable_as_admin).not_to allow_mass_assignment_of(:attr)
|
||||||
to eq 'allow mass assignment of attr as admin'
|
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
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
context 'an attribute that is blacklisted from mass-assignment' do
|
def define_model(name, columns, &block)
|
||||||
it 'rejects being mass-assignable' do
|
super(name, columns, whitelist_attributes: false, &block)
|
||||||
model = define_model(:example, blacklisted: :string) do
|
|
||||||
attr_protected :blacklisted
|
|
||||||
end.new
|
|
||||||
|
|
||||||
expect(model).not_to allow_mass_assignment_of(:blacklisted)
|
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
Loading…
Reference in a new issue