spec/tests/validations_spec.rb in attestor-1.0.0 vs spec/tests/validations_spec.rb in attestor-2.0.0

- old
+ new

@@ -29,23 +29,47 @@ end # describe .validators describe ".validate" do - context "without options" do + context "with a name" do before { test_class.validate :foo } it "registers a validator" do - expect(test_class.validators.map(&:name)).to eq [:foo] - expect(test_class.validators.first).not_to be_kind_of delegator_class + item = test_class.validators.first + expect(item).to be_kind_of validator_class + expect(item).not_to be_kind_of delegator_class end + it "assigns the name to the validator" do + item = test_class.validators.first + expect(item.name).to eq :foo + end + end # context - context "with restrictions" do + context "with a block" do + let(:block) { proc { foo } } + before { test_class.validate(&block) } + + it "registers a validator" do + item = test_class.validators.first + expect(item).to be_kind_of validator_class + expect(item).not_to be_kind_of delegator_class + end + + it "assigns the block to the validator" do + item = test_class.validators.first + expect(item.block).to eq block + end + + end # context + + context "with options" do + before { test_class.validate :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] @@ -56,23 +80,45 @@ end # describe .validate describe ".validates" do - context "without options" do + context "with a name" do before { test_class.validates :foo } it "registers a delegator" do - expect(test_class.validators.map(&:name)).to eq [:foo] - expect(test_class.validators.first).to be_kind_of delegator_class + item = test_class.validators.first + expect(item).to be_kind_of delegator_class end + it "assigns the name to the delegator" do + item = test_class.validators.first + expect(item.name).to eq :foo + end + end # context - context "with restrictions" do + context "with a block" do + let(:block) { proc { foo } } + before { test_class.validates(&block) } + + it "registers a delegator" do + item = test_class.validators.first + expect(item).to be_kind_of delegator_class + end + + it "assigns the block to the delegator" do + item = test_class.validators.first + expect(item.block).to eq block + end + + end # context + + context "with options" do + before { test_class.validates :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] @@ -85,11 +131,17 @@ describe "#invalid" do shared_examples "raising an error" do |name, options = {}| - let(:message) { message_class.new(name, subject, options) } + let(:message) { double } + before do + allow(message_class) + .to receive(:new) + .with(name, subject, options) + .and_return message + end it "raises an InvalidError" do expect { invalid }.to raise_error invalid_error end @@ -120,10 +172,46 @@ end end # invalid + describe "#validate!" do + + before do + test_class.validate :foo + test_class.validate :bar, only: :all + test_class.validates :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! + describe "#validate" do before do test_class.validate :foo test_class.validate :bar, only: :all @@ -154,8 +242,8 @@ subject.validate :foo end end # context - end # describe #validate + end # describe #validate! end # describe Attestor::Validations