diff options
author | Luke Kanies <luke@madstop.com> | 2007-09-21 15:49:25 -0500 |
---|---|---|
committer | Luke Kanies <luke@madstop.com> | 2007-09-21 15:49:25 -0500 |
commit | 02275f0b29cee70e3f02d6d8f911eaaf3fad579d (patch) | |
tree | 83e6aa336221432bc40eea72013cff4571bacd81 /spec/unit | |
parent | da0555d948b837e7c16bdca164780c9e71353e4a (diff) | |
download | puppet-02275f0b29cee70e3f02d6d8f911eaaf3fad579d.tar.gz puppet-02275f0b29cee70e3f02d6d8f911eaaf3fad579d.tar.xz puppet-02275f0b29cee70e3f02d6d8f911eaaf3fad579d.zip |
Adding automatic association between terminus subclasses and
the indirection they're working with. It looks like I'll be
moving terminus registration to the indirection rather than the
top-level Indirector.
Diffstat (limited to 'spec/unit')
-rwxr-xr-x | spec/unit/indirector/terminus.rb | 62 |
1 files changed, 58 insertions, 4 deletions
diff --git a/spec/unit/indirector/terminus.rb b/spec/unit/indirector/terminus.rb index 1660315ca..c5f5c064a 100755 --- a/spec/unit/indirector/terminus.rb +++ b/spec/unit/indirector/terminus.rb @@ -4,7 +4,13 @@ require 'puppet/indirector' describe Puppet::Indirector::Terminus do before do - @terminus = Class.new(Puppet::Indirector::Terminus) + @indirection = stub 'indirection', :name => :mystuff + Puppet::Indirector::Indirection.stubs(:instance).with(:mystuff).returns(@indirection) + @terminus = Class.new(Puppet::Indirector::Terminus) do + def self.to_s + "Terminus::Type::MyStuff" + end + end end it "should support the documentation methods" do @@ -39,16 +45,64 @@ describe Puppet::Indirector::Terminus do it "should fail when provided a name that does not resolve to an indirection" do Puppet::Indirector::Indirection.expects(:instance).with(:myind).returns(nil) proc { @terminus.indirection = :myind }.should raise_error(ArgumentError) - @terminus.indirection.should be_nil + + # It shouldn't overwrite our existing one (or, more normally, it shouldn't set + # anything). + @terminus.indirection.should equal(@indirection) + end +end + +describe Puppet::Indirector::Terminus, " when being subclassed" do + it "should associate the subclass with an indirection based on the subclass constant" do + indirection = mock 'indirection' + Puppet::Indirector::Indirection.expects(:instance).with(:myindirection).returns(indirection) + + klass = Class.new(Puppet::Indirector::Terminus) do + def self.to_s + "Puppet::Indirector::Terminus::MyIndirection" + end + end + + klass.indirection.should equal(indirection) + end + + it "should fail when the terminus subclass does not include its parent class in the constant path" do + indirection = mock 'indirection' + Puppet::Indirector::Indirection.expects(:instance).with(:myindirection).returns(indirection) + + proc { + klass = Class.new(Puppet::Indirector::Terminus) do + def self.to_s + "MyIndirection" + end + end + }.should raise_error(ArgumentError) + end + + it "should set the subclass's name to the terminus type" do + indirection = mock 'indirection' + Puppet::Indirector::Indirection.expects(:instance).with(:myindirection).returns(indirection) + + klass = Class.new(Puppet::Indirector::Terminus) do + def self.to_s + "Puppet::Indirector::Terminus::Yaml::MyIndirection" + end + end + + klass.name.should == :yaml end end describe Puppet::Indirector::Terminus, " when a terminus instance" do before do @indirection = stub 'indirection', :name => :myyaml - @terminus_class = Class.new(Puppet::Indirector::Terminus) + Puppet::Indirector::Indirection.stubs(:instance).with(:mystuff).returns(@indirection) + @terminus_class = Class.new(Puppet::Indirector::Terminus) do + def self.to_s + "Terminus::Type::MyStuff" + end + end @terminus_class.name = :test - @terminus_class.stubs(:indirection).returns(@indirection) @terminus = @terminus_class.new end |