summaryrefslogtreecommitdiffstats
path: root/spec/unit
diff options
context:
space:
mode:
Diffstat (limited to 'spec/unit')
-rwxr-xr-xspec/unit/indirector/terminus.rb62
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