vaguerent/test/unit/vagrant/util/checkpoint_client_test.rb
Brian Cain 4a7bff3325
Fixes #10463: Display version update on stderr instead of stdout
This commit updates the behavior of printing the checkpoint version
check for Vagrant. To allow users to filter out the message, it updates
the version check to go to stderr. It updates the UI class for printing
the version check to be a "basic" class, so that the message continues
to be the same color instead of a red error message.
2018-12-04 15:40:28 -08:00

184 lines
4.8 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
let(:environment){ {} }
before{ with_temp_env(environment){ 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
context "with VAGRANT_CHECKPOINT_DISABLE set" do
let(:environment){ {"VAGRANT_CHECKPOINT_DISABLE" => "1"} }
it "should not be enabled after setup" do
expect(subject.enabled).to be(false)
end
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 display 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(:error).at_least(:once)
subject.version_check
end
end
end
end