81 lines
2.7 KiB
Ruby
81 lines
2.7 KiB
Ruby
require 'spec_helper'
|
|
require 'ostruct'
|
|
|
|
describe Mongoid::Enum::Validators::MultipleValidator do
|
|
subject { Mongoid::Enum::Validators::MultipleValidator }
|
|
let(:values) { [:lorem, :ipsum, :dolor, :sit] }
|
|
let(:attribute) { :word }
|
|
let(:record) { OpenStruct.new(:errors => {attribute => []}, attribute => values.first) }
|
|
let(:allow_nil) { false }
|
|
let(:validator) { subject.new(:attributes => attribute, :in => values, :allow_nil => allow_nil) }
|
|
|
|
describe ".validate_each" do
|
|
context "when allow_nil: true" do
|
|
let(:allow_nil) { true }
|
|
|
|
context "and value is nil" do
|
|
before(:each) { validator.validate_each(record, attribute, nil) }
|
|
it "validates" do
|
|
expect(record.errors[attribute].empty?).to be_true
|
|
end
|
|
end
|
|
|
|
context "and value is []" do
|
|
before(:each) { validator.validate_each(record, attribute, []) }
|
|
it "validates" do
|
|
expect(record.errors[attribute].empty?).to be_true
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when allow_nil: false" do
|
|
context "and value is nil" do
|
|
before(:each) { validator.validate_each(record, attribute, nil) }
|
|
it "won't validate" do
|
|
expect(record.errors[attribute].any?).to be_true
|
|
expect(record.errors[attribute]).to eq ["is not in #{values.join ", "}"]
|
|
end
|
|
end
|
|
context "and value is []" do
|
|
before(:each) { validator.validate_each(record, attribute, []) }
|
|
it "won't validate" do
|
|
expect(record.errors[attribute].any?).to be_true
|
|
expect(record.errors[attribute]).to eq ["is not in #{values.join ", "}"]
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when value is included" do
|
|
let(:allow_nil) { rand(2).zero? }
|
|
before(:each) { validator.validate_each(record, attribute, [values.sample]) }
|
|
it "validates" do
|
|
expect(record.errors[attribute].empty?).to be_true
|
|
end
|
|
end
|
|
|
|
context "when value is not included" do
|
|
let(:allow_nil) { rand(2).zero? }
|
|
before(:each) { validator.validate_each(record, attribute, [:amet]) }
|
|
it "won't validate" do
|
|
expect(record.errors[attribute].any?).to be_true
|
|
end
|
|
end
|
|
|
|
context "when multiple values included" do
|
|
let(:allow_nil) { rand(2).zero? }
|
|
before(:each) { validator.validate_each(record, attribute, [values.first, values.last]) }
|
|
it "validates" do
|
|
expect(record.errors[attribute].empty?).to be_true
|
|
end
|
|
end
|
|
|
|
context "when one value is not included "do
|
|
let(:allow_nil) { rand(2).zero? }
|
|
before(:each) { validator.validate_each(record, attribute, [values.first, values.last, :amet]) }
|
|
it "won't validate" do
|
|
expect(record.errors[attribute].any?).to be_true
|
|
end
|
|
end
|
|
end
|
|
end
|