Sha256: f6f3868512c82bc8ed07bd0c326ee05ca21cfbb28702bbc16cea3c6068219012

Contents?: true

Size: 1.85 KB

Versions: 114

Compression:

Stored size: 1.85 KB

Contents

require "spec_helper"

describe FactoryGirl::EvaluatorClassDefiner do
  let(:simple_attribute)                    { stub("simple attribute",   name: :simple, to_proc: -> { 1 }) }
  let(:relative_attribute)                  { stub("relative attribute", name: :relative, to_proc: -> { simple + 1 }) }
  let(:attribute_that_raises_a_second_time) { stub("attribute that would raise without a cache", name: :raises_without_proper_cache, to_proc: -> { raise "failed" if @run; @run = true; nil }) }

  let(:attributes)    { [simple_attribute, relative_attribute, attribute_that_raises_a_second_time] }
  let(:class_definer) { FactoryGirl::EvaluatorClassDefiner.new(attributes, FactoryGirl::Evaluator) }
  let(:evaluator)     { class_definer.evaluator_class.new(Object, stub("build strategy", add_observer: true)) }

  it "returns an evaluator when accessing the evaluator class" do
    evaluator.should be_a(FactoryGirl::Evaluator)
  end

  it "adds each attribute to the evaluator" do
    evaluator.simple.should == 1
  end

  it "evaluates the block in the context of the evaluator" do
    evaluator.relative.should == 2
  end

  it "only instance_execs the block once even when returning nil" do
    expect {
      2.times { evaluator.raises_without_proper_cache }
    }.to_not raise_error
  end

  it "sets attributes on the evaluator class" do
    class_definer.evaluator_class.attribute_lists.should == [attributes]
  end

  context "with a custom evaluator as a parent class" do
    let(:child_attributes) { [stub("child attribute", name: :simple, to_proc: -> { 1 })] }
    let(:child_definer)    { FactoryGirl::EvaluatorClassDefiner.new(child_attributes, class_definer.evaluator_class) }

    subject { child_definer.evaluator_class }

    it "bases its attribute lists on itself and its parent evaluator" do
      subject.attribute_lists.should == [attributes, child_attributes]
    end
  end
end

Version data entries

114 entries across 62 versions & 5 rubygems

Version Path
classiccms-0.7.5 vendor/bundle/gems/factory_girl-3.2.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.7.5 vendor/bundle/gems/factory_girl-3.3.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.7.4 vendor/bundle/gems/factory_girl-3.3.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.7.4 vendor/bundle/gems/factory_girl-3.2.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.7.3 vendor/bundle/gems/factory_girl-3.3.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.7.3 vendor/bundle/gems/factory_girl-3.2.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.7.2 vendor/bundle/gems/factory_girl-3.3.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.7.2 vendor/bundle/gems/factory_girl-3.2.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.7.1 vendor/bundle/gems/factory_girl-3.3.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.7.1 vendor/bundle/gems/factory_girl-3.2.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.7.0 vendor/bundle/gems/factory_girl-3.3.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.7.0 vendor/bundle/gems/factory_girl-3.2.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.6.9 vendor/bundle/gems/factory_girl-3.3.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.6.9 vendor/bundle/gems/factory_girl-3.2.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.6.8 vendor/bundle/gems/factory_girl-3.2.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.6.8 vendor/bundle/gems/factory_girl-3.3.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.6.7 vendor/bundle/gems/factory_girl-3.2.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.6.7 vendor/bundle/gems/factory_girl-3.3.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.6.6 vendor/bundle/gems/factory_girl-3.2.0/spec/factory_girl/evaluator_class_definer_spec.rb
classiccms-0.6.6 vendor/bundle/gems/factory_girl-3.3.0/spec/factory_girl/evaluator_class_definer_spec.rb