12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- 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
|