Sha256: 75e33a136f6017495a28b89b2f03ac7cfb6732350ca83ca4a826f49dc7f3248d

Contents?: true

Size: 1.71 KB

Versions: 1

Compression:

Stored size: 1.71 KB

Contents

require 'spec_helper'

describe 'Validation' do
  subject(:validator) { user_validator.new(params) }

  let(:user_params) do
    Class.new {
      include ROM::Model::Params

      attribute :name, String
      attribute :email, String
    }
  end

  let(:user_validator) do
    Class.new {
      include ROM::Model::Validator

      relation :users

      validates :name, presence: true, uniqueness: { message: 'TAKEN!' }
      validates :email, uniqueness: true

      def self.name
        'UserValidator'
      end
    }
  end

  describe '#call' do
    let(:params) { {} }

    it 'raises validation error when params are not valid' do
      expect { validator.call }.to raise_error(ROM::Model::ValidationError)
    end
  end

  describe "#validate" do
    let(:params) { {} }

    it "sets errors when params are not valid" do
      validator.validate
      expect(validator.errors[:name]).to eql(["can't be blank"])
    end
  end

  describe ':presence' do
    let(:params) { user_params.new(name: '') }

    it 'sets error messages' do
      expect(validator).to_not be_valid
      expect(validator.errors[:name]).to eql(["can't be blank"])
    end
  end

  describe ':uniqueness' do
    let(:params) { user_params.new(name: 'Jane', email: 'jane@doe.org') }

    before do
      rom.relations.users.insert(name: 'Jane', email: 'jane@doe.org')
    end

    it 'sets default error messages' do
      expect(validator).to_not be_valid
      expect(validator.errors[:email]).to eql(['has already been taken'])
    end

    it 'sets custom error messages' do
      rom.relations.users.insert(name: 'Jane', email: 'jane@doe.org')

      expect(validator).to_not be_valid
      expect(validator.errors[:name]).to eql(['TAKEN!'])
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rom-rails-0.3.0.beta1 spec/unit/validator_spec.rb