vaguerent/test/vagrant/config/vm/provisioner_test.rb

93 lines
2.7 KiB
Ruby

require "test_helper"
class ConfigVMProvisionerTest < Test::Unit::TestCase
setup do
@klass = Vagrant::Config::VMConfig::Provisioner
@top = Vagrant::Config::Top.new(nil)
end
context "initializing" do
should "expose the top instance that the provisioner belongs to" do
instance = @klass.new(@top, :chef_solo)
assert_equal @top, instance.top
end
should "expose the shortcut used" do
instance = @klass.new(@top, :chef_solo)
assert_equal :chef_solo, instance.shortcut
end
should "expose the provisioner class if its a valid shortcut" do
instance = @klass.new(@top, :chef_solo)
assert_equal Vagrant::Provisioners::ChefSolo, instance.provisioner
end
should "expose the provisioner class if its a valid class" do
instance = @klass.new(@top, Vagrant::Provisioners::ChefSolo)
assert_equal Vagrant::Provisioners::ChefSolo, instance.provisioner
end
should "have a nil provisioner class if invalid" do
instance = @klass.new(@top, :i_shall_never_exist)
assert_nil instance.provisioner
end
should "have a nil config instance if invalid" do
instance = @klass.new(@top, :i_shall_never_exist)
assert_nil instance.config
end
should "set the top of the config object to the given top" do
instance = @klass.new(@top, :chef_solo)
assert_equal @top, instance.config.top
end
should "configure the provisioner if valid" do
instance = @klass.new(@top, :chef_solo) do |chef|
chef.cookbooks_path = "foo"
end
assert_equal "foo", instance.config.cookbooks_path
end
should "configure the provisioner with a hash if valid" do
instance = @klass.new(@top, :chef_solo, :cookbooks_path => "foo")
assert_equal "foo", instance.config.cookbooks_path
end
end
context "validation" do
setup do
@errors = Vagrant::Config::ErrorRecorder.new
end
should "be invalid if provisioner is valid" do
instance = @klass.new(@top, :i_shall_never_exist)
instance.validate(@errors)
assert !@errors.errors.empty?
end
should "be invalid if provisioner doesn't inherit from provisioners base" do
klass = Class.new
instance = @klass.new(@top, klass)
instance.validate(@errors)
assert !@errors.errors.empty?
end
should "be valid with a valid provisioner" do
instance = @klass.new(@top, :chef_solo) do |chef|
chef.add_recipe "foo"
end
instance.validate(@errors)
assert @errors.errors.empty?
end
should "be invalid if a provisioner's config is invalid" do
instance = @klass.new(@top, :chef_solo)
instance.validate(@errors)
assert !@errors.errors.empty?
end
end
end