2012-01-11 21:22:55 -08:00

70 lines
1.6 KiB
Ruby

require File.expand_path("../../../base", __FILE__)
require "vagrant/registry"
describe Vagrant::Config::Top do
include_context "unit"
let(:registry) { Vagrant::Registry.new }
let(:instance) { described_class.new(registry) }
it "should load in the proper config class" do
registry.register(:foo, Object)
instance.foo.should be_kind_of(Object)
end
it "should load the proper config class only once" do
registry.register(:foo, Object)
obj = instance.foo
instance.foo.should eql(obj)
end
it "still raises a method missing error if invalid key" do
expect { instance.foo }.to raise_error(NoMethodError)
end
describe "merging" do
let(:foo_class) do
Class.new do
attr_accessor :one
attr_accessor :two
def merge(other)
result = self.class.new
result.one = other.one || one
result.two = other.two || two
result
end
end
end
it "merges each key by calling `merge` on the class" do
registry.register(:foo, foo_class)
instance.foo.one = 1
instance.foo.two = 2
another = described_class.new(registry)
another.foo.one = 2
result = instance.merge(another)
result.foo.one.should == 2
result.foo.two.should == 2
end
it "merges keys that aren't in the source instance" do
reg = Vagrant::Registry.new
reg.register(:foo, foo_class)
another = described_class.new(reg)
another.foo.one = 2
result = instance.merge(another)
result.foo.one.should == 2
result.foo.two.should be_nil
end
end
end