151 lines
4.3 KiB
Ruby
151 lines
4.3 KiB
Ruby
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
|
|
|
class EnvTest < Test::Unit::TestCase
|
|
def dot_file_expectation
|
|
File.expects(:exists?).at_least_once.returns(true)
|
|
File.expects(:open).with(dotfile, 'r').returns(['foo'])
|
|
end
|
|
|
|
def dotfile(dir=Dir.pwd)
|
|
"#{dir}/#{hobo_mock_config[:dotfile_name]}"
|
|
end
|
|
|
|
def mock_persisted_vm(returnvalue="foovm")
|
|
filemock = mock("filemock")
|
|
filemock.expects(:read).returns("foo")
|
|
Hobo::VM.expects(:find).with("foo").returns(returnvalue)
|
|
File.expects(:open).with(Hobo::Env.dotfile_path).once.yields(filemock)
|
|
Hobo::Env.load_vm!
|
|
end
|
|
|
|
setup do
|
|
Hobo::Env.stubs(:error_and_exit)
|
|
hobo_mock_config
|
|
end
|
|
|
|
context "requiring a VM" do
|
|
should "error and exit if no persisted VM was found" do
|
|
assert_nil Hobo::Env.persisted_vm
|
|
Hobo::Env.expects(:error_and_exit).once
|
|
Hobo::Env.require_persisted_vm
|
|
end
|
|
|
|
should "return and continue if persisted VM is found" do
|
|
mock_persisted_vm
|
|
Hobo::Env.expects(:error_and_exit).never
|
|
Hobo::Env.require_persisted_vm
|
|
end
|
|
end
|
|
|
|
context "loading config" do
|
|
setup do
|
|
@root_path = "/foo"
|
|
Hobo::Env.stubs(:root_path).returns(@root_path)
|
|
File.stubs(:exist?).returns(false)
|
|
Hobo::Config.stubs(:execute!)
|
|
end
|
|
|
|
should "load from the project root" do
|
|
File.expects(:exist?).with(File.join(PROJECT_ROOT, "config", "default.rb")).once
|
|
Hobo::Env.load_config!
|
|
end
|
|
|
|
should "load from the root path" do
|
|
File.expects(:exist?).with(File.join(@root_path, Hobo::Env::HOBOFILE_NAME)).once
|
|
Hobo::Env.load_config!
|
|
end
|
|
|
|
should "load the files only if exist? returns true" do
|
|
File.expects(:exist?).once.returns(true)
|
|
Hobo::Env.expects(:load).once
|
|
Hobo::Env.load_config!
|
|
end
|
|
|
|
should "not load the files if exist? returns false" do
|
|
Hobo::Env.expects(:load).never
|
|
Hobo::Env.load_config!
|
|
end
|
|
|
|
should "execute after loading" do
|
|
File.expects(:exist?).once.returns(true)
|
|
Hobo::Env.expects(:load).once
|
|
Hobo::Config.expects(:execute!).once
|
|
Hobo::Env.load_config!
|
|
end
|
|
end
|
|
|
|
context "initial load" do
|
|
test "load! should load the config and set the persisted_uid" do
|
|
Hobo::Env.expects(:load_config!).once
|
|
Hobo::Env.expects(:load_vm!).once
|
|
Hobo::Env.expects(:load_root_path!).once
|
|
Hobo::Env.load!
|
|
end
|
|
end
|
|
|
|
context "persisting the VM into a file" do
|
|
setup do
|
|
hobo_mock_config
|
|
end
|
|
|
|
test "should save it to the dotfile path" do
|
|
vm = mock("vm")
|
|
vm.stubs(:uuid).returns("foo")
|
|
|
|
filemock = mock("filemock")
|
|
filemock.expects(:write).with(vm.uuid)
|
|
File.expects(:open).with(Hobo::Env.dotfile_path, 'w+').once.yields(filemock)
|
|
Hobo::Env.persist_vm(vm)
|
|
end
|
|
end
|
|
|
|
context "loading the UUID out from the persisted file" do
|
|
test "loading of the uuid from the dotfile" do
|
|
mock_persisted_vm
|
|
assert_equal 'foovm', Hobo::Env.persisted_vm
|
|
end
|
|
|
|
test "uuid should be nil if dotfile didn't exist" do
|
|
File.expects(:open).raises(Errno::ENOENT)
|
|
Hobo::Env.load_vm!
|
|
assert_nil Hobo::Env.persisted_vm
|
|
end
|
|
|
|
test "should build up the dotfile out of the root path and the dotfile name" do
|
|
assert_equal File.join(Hobo::Env.root_path, Hobo.config.dotfile_name), Hobo::Env.dotfile_path
|
|
end
|
|
end
|
|
|
|
context "loading the root path" do
|
|
test "should walk the parent directories looking for hobofile" do
|
|
paths = [
|
|
Pathname.new("/foo/bar/baz"),
|
|
Pathname.new("/foo/bar"),
|
|
Pathname.new("/foo")
|
|
]
|
|
|
|
search_seq = sequence("search_seq")
|
|
paths.each do |path|
|
|
File.expects(:exist?).with("#{path}/#{Hobo::Env::HOBOFILE_NAME}").returns(false).in_sequence(search_seq)
|
|
end
|
|
|
|
assert_nil Hobo::Env.load_root_path!(paths.first)
|
|
end
|
|
|
|
test "should print out an error and exit if not found" do
|
|
path = Pathname.new("/")
|
|
|
|
Hobo::Env.expects(:error_and_exit).once
|
|
Hobo::Env.load_root_path!(path)
|
|
end
|
|
|
|
test "should set the path for the Hobofile" do
|
|
path = "/foo"
|
|
File.expects(:exist?).with("#{path}/#{Hobo::Env::HOBOFILE_NAME}").returns(true)
|
|
Hobo::Env.load_root_path!(Pathname.new(path))
|
|
|
|
assert_equal path, Hobo::Env.root_path
|
|
end
|
|
end
|
|
end
|