diff --git a/spec/validators/domain_validator_spec.rb b/spec/validators/domain_validator_spec.rb index 0b4cb0d3f09..3cc6564a9d5 100644 --- a/spec/validators/domain_validator_spec.rb +++ b/spec/validators/domain_validator_spec.rb @@ -3,73 +3,45 @@ require 'rails_helper' RSpec.describe DomainValidator do - let(:record) { record_class.new } + subject { record_class.new } context 'with no options' do let(:record_class) do Class.new do include ActiveModel::Validations + def self.name = 'Record' + attr_accessor :domain validates :domain, domain: true end end - describe '#validate_each' do - context 'with a nil value' do - it 'does not add errors' do - record.domain = nil + context 'with a nil value' do + it { is_expected.to allow_value(nil).for(:domain) } + end - expect(record).to be_valid - expect(record.errors).to be_empty - end - end + context 'with a valid domain' do + it { is_expected.to allow_value('host.example').for(:domain) } + end - context 'with a valid domain' do - it 'does not add errors' do - record.domain = 'example.com' + context 'with a domain that is too long' do + let(:long_hostname) { "#{'a' * 300}.com" } - expect(record).to be_valid - expect(record.errors).to be_empty - end - end + it { is_expected.to_not allow_value(long_hostname).for(:domain) } + end - context 'with a domain that is too long' do - it 'adds an error' do - record.domain = "#{'a' * 300}.com" + context 'with a domain with an empty segment' do + it { is_expected.to_not allow_value('.example.com').for(:domain) } + end - expect(record).to_not be_valid - expect(record.errors.where(:domain)).to_not be_empty - end - end + context 'with a domain with an invalid character' do + it { is_expected.to_not allow_value('*.example.com').for(:domain) } + end - context 'with a domain with an empty segment' do - it 'adds an error' do - record.domain = '.example.com' - - expect(record).to_not be_valid - expect(record.errors.where(:domain)).to_not be_empty - end - end - - context 'with a domain with an invalid character' do - it 'adds an error' do - record.domain = '*.example.com' - - expect(record).to_not be_valid - expect(record.errors.where(:domain)).to_not be_empty - end - end - - context 'with a domain that would fail parsing' do - it 'adds an error' do - record.domain = '/' - - expect(record).to_not be_valid - expect(record.errors.where(:domain)).to_not be_empty - end - end + context 'with a domain that would fail parsing' do + it { is_expected.to_not allow_value('/').for(:domain) } end end @@ -78,48 +50,28 @@ RSpec.describe DomainValidator do Class.new do include ActiveModel::Validations + def self.name = 'Record' + attr_accessor :acct validates :acct, domain: { acct: true } end end - describe '#validate_each' do - context 'with a nil value' do - it 'does not add errors' do - record.acct = nil + context 'with a nil value' do + it { is_expected.to allow_value(nil).for(:acct) } + end - expect(record).to be_valid - expect(record.errors).to be_empty - end - end + context 'with no domain' do + it { is_expected.to allow_value('hoge_123').for(:acct) } + end - context 'with no domain' do - it 'does not add errors' do - record.acct = 'hoge_123' + context 'with a valid domain' do + it { is_expected.to allow_value('hoge_123@example.com').for(:acct) } + end - expect(record).to be_valid - expect(record.errors).to be_empty - end - end - - context 'with a valid domain' do - it 'does not add errors' do - record.acct = 'hoge_123@example.com' - - expect(record).to be_valid - expect(record.errors).to be_empty - end - end - - context 'with an invalid domain' do - it 'adds an error' do - record.acct = 'hoge_123@.example.com' - - expect(record).to_not be_valid - expect(record.errors.where(:acct)).to_not be_empty - end - end + context 'with an invalid domain' do + it { is_expected.to_not allow_value('hoge_123@.example.com').for(:acct) } end end end