This rule was added in rubocop 1.79. We were inconsistent about it, so we're adding it to get more consistency.
89 lines
2.6 KiB
Ruby
89 lines
2.6 KiB
Ruby
require "rails_helper"
|
|
|
|
describe SkipValidation do
|
|
describe ".skip_validation" do
|
|
before do
|
|
dummy_model = Class.new do
|
|
include ActiveModel::Model
|
|
include SkipValidation
|
|
|
|
attr_accessor :title, :description
|
|
|
|
validates :title, presence: true, length: { in: 10..60, allow_nil: true }
|
|
validates :description, presence: true
|
|
end
|
|
|
|
stub_const("DummyModel", dummy_model)
|
|
end
|
|
|
|
it "accepts validator classes as parameters" do
|
|
DummyModel.skip_validation :title, ActiveModel::Validations::PresenceValidator
|
|
|
|
expect(DummyModel.new(title: nil, description: "Something")).to be_valid
|
|
end
|
|
|
|
it "accepts symbols as parameters" do
|
|
DummyModel.skip_validation :title, :presence
|
|
|
|
expect(DummyModel.new(title: nil, description: "Something")).to be_valid
|
|
end
|
|
|
|
it "does not affect other attributes" do
|
|
DummyModel.skip_validation :title, :presence
|
|
|
|
expect(DummyModel.new(title: nil, description: nil)).not_to be_valid
|
|
end
|
|
|
|
it "does not affect other validations" do
|
|
DummyModel.skip_validation :title, :presence
|
|
|
|
expect(DummyModel.new(title: "Short", description: "Something")).not_to be_valid
|
|
end
|
|
|
|
it "works with validators other than presence" do
|
|
DummyModel.skip_validation :title, :length
|
|
|
|
expect(DummyModel.new(title: "Short", description: "Something")).to be_valid
|
|
expect(DummyModel.new(title: nil, description: "Something")).not_to be_valid
|
|
end
|
|
end
|
|
|
|
describe ".skip_translation_validation" do
|
|
before do
|
|
dummy_banner = Class.new(ApplicationRecord) do
|
|
def self.name
|
|
"DummyBanner"
|
|
end
|
|
self.table_name = "banners"
|
|
|
|
translates :title, touch: true
|
|
translates :description, touch: true
|
|
include Globalizable
|
|
|
|
has_many :translations, class_name: "DummyBanner::Translation", foreign_key: "banner_id"
|
|
|
|
validates_translation :title, presence: true
|
|
validates_translation :description, presence: true
|
|
end
|
|
|
|
stub_const("DummyBanner", dummy_banner)
|
|
end
|
|
|
|
it "removes the validation from the translatable attribute" do
|
|
DummyBanner.skip_translation_validation :title, :presence
|
|
|
|
custom_banner = DummyBanner.new(build(:banner).attributes.merge(title: nil))
|
|
|
|
expect { custom_banner.save! }.not_to raise_exception
|
|
end
|
|
|
|
it "does not affect other validations" do
|
|
DummyBanner.skip_translation_validation :title, :presence
|
|
|
|
custom_banner = DummyBanner.new(build(:banner).attributes.merge(description: nil))
|
|
|
|
expect { custom_banner.save! }.to raise_exception(ActiveRecord::RecordInvalid)
|
|
end
|
|
end
|
|
end
|