vagrant/test/unit/vagrant/util/checkpoint_client_test.rb

175 lines
4.5 KiB
Ruby

require File.expand_path("../../../base", __FILE__)
require "vagrant/util/checkpoint_client"
describe Vagrant::Util::CheckpointClient do
include_context "unit"
let(:iso_env) { isolated_environment }
let(:env) { iso_env.create_vagrant_env }
let(:result) { {} }
let(:prefixed_ui) { double("prefixed_ui") }
subject{ Vagrant::Util::CheckpointClient.instance }
after{ subject.reset! }
before do
allow(subject).to receive(:result).and_return(result)
allow(Vagrant::UI::Prefixed).to receive(:new).and_return(prefixed_ui)
end
it "should not be enabled by default" do
expect(subject.enabled).to be(false)
end
describe "#setup" do
before{ subject.setup(env) }
it "should enable after setup" do
expect(subject.enabled).to be(true)
end
it "should generate required paths" do
expect(subject.files).not_to be_empty
end
end
describe "#check" do
context "without #setup" do
it "should not start the check" do
expect(Thread).not_to receive(:new)
subject.check
end
end
context "with setup" do
before{ subject.setup(env) }
it "should start the check" do
expect(Thread).to receive(:new)
subject.check
end
it "should call checkpoint" do
expect(Thread).to receive(:new).and_yield
expect(Checkpoint).to receive(:check)
subject.check
end
end
end
describe "#display" do
it "should only dislay once" do
expect(subject).to receive(:version_check).once
expect(subject).to receive(:alerts_check).once
2.times{ subject.display }
end
it "should not display cached information" do
expect(subject).to receive(:result).and_return("cached" => true).at_least(:once)
expect(subject).not_to receive(:version_check)
expect(subject).not_to receive(:alerts_check)
subject.display
end
end
describe "#alerts_check" do
let(:critical){
[{"level" => "critical", "message" => "critical message",
"url" => "http://example.com", "date" => Time.now.to_i}]
}
let(:warn){
[{"level" => "warn", "message" => "warn message",
"url" => "http://example.com", "date" => Time.now.to_i}]
}
let(:info){
[{"level" => "info", "message" => "info message",
"url" => "http://example.com", "date" => Time.now.to_i}]
}
before{ subject.setup(env) }
context "with no alerts" do
it "should not display alerts" do
expect(prefixed_ui).not_to receive(:info)
subject.alerts_check
end
end
context "with critical alerts" do
let(:result) { {"alerts" => critical} }
it "should display critical alert" do
expect(prefixed_ui).to receive(:error)
subject.alerts_check
end
end
context "with warn alerts" do
let(:result) { {"alerts" => warn} }
it "should display warn alerts" do
expect(prefixed_ui).to receive(:warn)
subject.alerts_check
end
end
context "with info alerts" do
let(:result) { {"alerts" => info} }
it "should display info alerts" do
expect(prefixed_ui).to receive(:info)
subject.alerts_check
end
end
context "with mixed alerts" do
let(:result) { {"alerts" => info + warn + critical} }
it "should display all alert types" do
expect(prefixed_ui).to receive(:info)
expect(prefixed_ui).to receive(:warn)
expect(prefixed_ui).to receive(:error)
subject.alerts_check
end
end
end
describe "#version_check" do
before{ subject.setup(env) }
let(:new_version){ Gem::Version.new(Vagrant::VERSION).bump.to_s }
let(:old_version){ Gem::Version.new("1.0.0") }
context "latest version is same as current version" do
let(:result) { {"current_version" => Vagrant::VERSION } }
it "should not display upgrade information" do
expect(prefixed_ui).not_to receive(:info)
subject.version_check
end
end
context "latest version is older than current version" do
let(:result) { {"current_version" => old_version} }
it "should not display upgrade information" do
expect(prefixed_ui).not_to receive(:info)
subject.version_check
end
end
context "latest version is newer than current version" do
let(:result) { {"current_version" => new_version} }
it "should not display upgrade information" do
expect(prefixed_ui).not_to receive(:info).at_least(:once)
subject.version_check
end
end
end
end