spec/tests/validations_spec.rb in attestor-0.0.1 vs spec/tests/validations_spec.rb in attestor-0.1.0

- old
+ new

@@ -1,90 +1,95 @@ # encoding: utf-8 +require "support/policies" # for #valid_policy and #invalid_policy definitions + describe Attestor::Validations do - let(:collection_class) { Attestor::Validations::Collection } + let(:validators_class) { Attestor::Validations::Validators } + let(:validator_class) { Attestor::Validations::Validator } + let(:collection_class) { Attestor::Validations::Validators } let(:item_class) { Attestor::Validations::Item } let(:message_class) { Attestor::Validations::Message } let(:invalid_error) { Attestor::InvalidError } let(:test_class) { Class.new.send(:include, described_class) } before { Test = test_class } after { Object.send :remove_const, :Test } subject { test_class.new } - describe ".validations" do + describe ".validators" do - it "returns a Collection" do - expect(test_class.validations).to be_kind_of collection_class + it "returns Validators" do + expect(test_class.validators).to be_kind_of validators_class end it "is empty by default" do - expect(test_class.validations.to_a).to be_empty + expect(test_class.validators.to_a).to be_empty end - end # describe .validations + end # describe .validators describe ".validate" do context "without options" do before { test_class.validate :foo } - it "adds the item to the collection" do - expect(test_class.validations.to_a).to eq [:foo] + it "registers a validator" do + expect(test_class.validators.map(&:name)).to eq [:foo] end + it "sets a validator's policy to false" do + expect(test_class.validators.first).not_to be_policy + end + end # context - context "with options" do + context "with restrictions" do before { test_class.validate :foo, only: %w(bar baz), except: "bar" } it "uses options" do - expect(test_class.validations.to_a).to eq [:foo] - expect(test_class.validations.set(:baz).to_a).to eq [:foo] - expect(test_class.validations.set(:bar).to_a).to eq [] + expect(test_class.validators.map(&:name)).to eq [:foo] + expect(test_class.validators.set(:baz).map(&:name)).to eq [:foo] + expect(test_class.validators.set(:bar).map(&:name)).to eq [] end end # context end # describe .validate - describe "#validate" do + describe ".follow_policy" do - before do - test_class.validate :foo - test_class.validate :bar, only: :all - test_class.validate :baz, only: :foo - %i(foo bar baz).each { |method| allow(subject).to receive(method) } - end + context "without options" do - context "without an argument" do + before { test_class.follow_policy :foo } - it "calls validations for :all context" do - expect(subject).to receive(:foo) - expect(subject).to receive(:bar) - expect(subject).not_to receive(:baz) - subject.validate + it "registers a validator" do + expect(test_class.validators.map(&:name)).to eq [:foo] end + it "sets a validator's policy to true" do + expect(test_class.validators.first).to be_policy + end + end # context - context ":foo" do + context "with restrictions" do - it "calls validations for :foo context" do - expect(subject).to receive(:foo) - expect(subject).to receive(:baz) - expect(subject).not_to receive(:bar) - subject.validate :foo + before { test_class.follow_policy :foo, only: %w(bar baz), except: "bar" } + + it "uses options" do + expect(test_class.validators.map(&:name)).to eq [:foo] + expect(test_class.validators.set(:baz).map(&:name)).to eq [:foo] + expect(test_class.validators.set(:bar).map(&:name)).to eq [] end end # context - end # describe #validate + end # describe .follow_policy describe "#invalid" do shared_examples "raising an error" do |name, options = {}| @@ -120,7 +125,43 @@ it_behaves_like "raising an error", :foo, bar: :baz end end # invalid + + describe "#validate" do + + before do + test_class.validate :foo + test_class.validate :bar, only: :all + test_class.follow_policy :baz, only: :foo + + allow(subject).to receive(:foo) + allow(subject).to receive(:bar) + allow(subject).to receive(:baz) { valid_policy } + end + + context "without an argument" do + + it "calls validators for :all context" do + expect(subject).to receive(:foo) + expect(subject).to receive(:bar) + expect(subject).not_to receive(:baz) + subject.validate + end + + end # context + + context ":foo" do + + it "calls validators for :foo context" do + expect(subject).to receive(:foo) + expect(subject).to receive(:baz) + expect(subject).not_to receive(:bar) + subject.validate :foo + end + + end # context + + end # describe #validate end # describe Attestor::Validations