--- /dev/null
+#!/usr/bin/env rspec
+
+require "spec_helper"
+
+module MCollective
+ module Generators
+ describe Base do
+ before :each do
+ @erb = mock
+ @erb.stubs(:result)
+ File.stubs(:dirname).returns("/tmp")
+ @base = Base.new(nil, nil, nil, nil, nil, nil, nil)
+ end
+
+ describe "#initialize" do
+ it "should set the correct metaparameters" do
+ res = Base.new("name", "description", "author", "license", "version", "url", "timeout")
+ res.meta.should == {:name => "name",
+ :description => "description",
+ :author => "author",
+ :license => "license",
+ :version => "version",
+ :url => "url",
+ :timeout => "timeout"}
+ end
+ end
+
+ describe "#create_metadata_string" do
+ it "should load the ddl template if it is present" do
+ File.expects(:read).returns("ddl")
+ ERB.expects(:new).with("ddl", nil, "-").returns(@erb)
+ @base.create_metadata_string
+ end
+
+ it "should raise an error if the template is not present" do
+ File.expects(:read).raises(Errno::ENOENT)
+ expect{
+ @base.create_metadata_string
+ }.to raise_error(Errno::ENOENT)
+ end
+ end
+
+ describe "#create_plugin_string " do
+ it "should load the plugin template if it is present" do
+ File.expects(:read).returns("plugin")
+ ERB.expects(:new).with("plugin", nil, "-").returns(@erb)
+ @base.create_plugin_string
+ end
+
+ it "should raise an error if the template is not present" do
+ File.expects(:read).raises(Errno::ENOENT)
+ expect{
+ @base.create_plugin_string
+ }.to raise_error(Errno::ENOENT)
+ end
+ end
+
+ describe "#write_plugins" do
+ it "should fail if the directory already exists" do
+ Dir.expects(:mkdir).raises(Errno::EEXIST)
+ @base.plugin_name = "foo"
+ expect{
+ @base.write_plugins
+ }.to raise_error(RuntimeError)
+ end
+
+ it "should create the directory and the plugin files if it doesn't exist" do
+ Dir.stubs(:pwd).returns("/tmp")
+ @base.stubs(:puts)
+
+ Dir.expects(:mkdir).with("foo")
+ Dir.expects(:mkdir).with("foo/agent")
+ File.expects(:open).with("foo/agent/foo.ddl", "w")
+ File.expects(:open).with("foo/agent/foo.rb", "w")
+
+ @base.plugin_name = "foo"
+ @base.mod_name = "agent"
+ @base.write_plugins
+ end
+ end
+ end
+ end
+end