Sha256: e8e2678d301fe7383e681e488026914bbea48cc34fefe16b33e79230fee3a80d

Contents?: true

Size: 1.61 KB

Versions: 1

Compression:

Stored size: 1.61 KB

Contents

require 'spec_helper'

RSpec.describe CountValidator do
  before do
    stub_const('OwnerClass', Class.new(Owner))
  end

  describe 'success' do
    let(:owner) { OwnerClass.new }

    before do
      OwnerClass.validates :pets, :count => {:minimum => 2}
      owner.pets = [Pet.new, Pet.new]
    end

    it { expect(owner).to be_valid }
  end

  describe 'failure' do
    let(:owner) { OwnerClass.new }

    before do
      OwnerClass.validates :pets, :count => {:minimum => 2}
    end

    it do
      expect(owner).to be_invalid
      expect(owner.errors).to include(:pets)
    end
  end

  context 'when associated records are marked for destruction' do
    let(:owner) { OwnerClass.new(pets: [Pet.new, Pet.new]) }

    before do
      OwnerClass.validates :pets, :count => {:maximum => 1}
      owner.pets.last.mark_for_destruction
    end

    it 'does not count associated records marked for destruction' do
      expect(owner).to be_valid
    end
  end

  context 'with no optional error messages' do
    let(:owner) { OwnerClass.new }

    before do
      OwnerClass.validates :pets, :count => {:minimum => 1}
      owner.save
    end

    it "uses it's own default error messages" do
      expect(owner.errors[:pets]).to eq([I18n.t('errors.messages.count_greater_than_or_equal_to.one')])
    end
  end

  context 'with optional error message' do
    let(:owner) { OwnerClass.new }

    before do
      OwnerClass.validates :pets, :count => {:minimum => 1, :too_short => 'optional message'}
      owner.save
    end

    it 'uses optional error message' do
      expect(owner.errors[:pets]).to eq(['optional message'])
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
apress-validators-0.1.0 spec/app/validators/count_validator_spec.rb