require 'rails_helper' RSpec.describe ObjectManager::Attribute::Validation::Backend do it 'registers inheriting classes as ObjectManager::Attribute::Validation backends' do backends = spy expect(ObjectManager::Attribute::Validation).to receive(:backends).and_return(backends) backend = Class.new(described_class) expect(backends).to have_received(:add).with(backend) end describe 'backend interface' do subject do described_class.new( record: record, attribute: attribute ) end let(:record) { build(:user) } let(:attribute) { ::ObjectManager::Attribute.find_by(name: 'firstname') } it 'has attr_accessor for record' do expect(subject.record).to eq(record) end it 'has attr_accessor for attribute' do expect(subject.attribute).to eq(attribute) end it 'has attr_accessor for value' do expect(subject.value).to eq(record[attribute.name]) end it 'has attr_accessor for previous_value' do record.save! previous_value = record[attribute.name] record[attribute.name] = 'changed' expect(subject.previous_value).to eq(previous_value) end describe '.invalid_because_attribute' do before do subject.invalid_because_attribute('has value that is ... .') end it 'adds Rails validation error' do expect(record.errors.count).to be(1) end it 'uses ObjectManager::Attribute#name as ActiveModel::Errors identifier' do expect(record.errors.to_h).to have_key(attribute.name.to_sym) end end end end