Sha256: 603d357d8abc0d31e30b92d9cd41c4e0c937e625c39a8b0b55daab9e1e3769e3

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

require 'spec_helper'

describe ObjectAttorney do

  context "given an attorney with a custom validation" do
    before do
      @custom_validator = Struct.new(:user) do
        include ObjectAttorney

        defend :user

        validate :phone_number_country_code, if: :should_validate_country_code

        def phone_number_country_code(user)
          return if user.phone_number.split(' ')[0] == '123'

          user.errors.add(:phone_number, 'invalid country code')
        end

        def should_validate_country_code(user)
          !user.dont_validate
        end
      end
    end

    context "given a user with an invalid phone_number" do
      before do
        @user = User.new(phone_number: 'bad number')
        @custom_validator.new(@user).valid?
      end

      it "@user.errors should mention the bad phone_number error" do
        expect(@user.errors.added?(:phone_number, 'invalid country code')).to be true
      end

      context "and preventing the validation" do
        before do
          @user = User.new(phone_number: 'really bad number', dont_validate: true)
          @custom_validator.new(@user).valid?
        end

        it "@user.errors should be empty" do
          expect(@user.errors.empty?).to be true
        end
      end
    end

    context "given a user with a valid phone_number" do
      before do
        @user = User.new(phone_number: '123 123')
        @custom_validator.new(@user).valid?
      end

      it "@user.errors should be empty" do
        expect(@user.errors.empty?).to be true
      end
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
object_attorney-3.0.2 spec/object_attorney/custom_validation_spec.rb