These tests were failing with Ruby 3.0 because we were getting an error when loading the `translations` association of the dummy class: ``` NameError: uninitialized constant DummyBanner::#<Class:0x000055630e4dccd8>::Translation ``` Specifying the `class_name` of the `translations` association solves the issue.
87 lines
2.6 KiB
Ruby
87 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
|