Files
nairobi/spec/models/skip_validation_spec.rb
Javi Martín 4d11d8a395 Specify translation class name in dummy test class
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.
2023-04-13 16:31:28 +02:00

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