vagrant/test/unit/plugins/commands/box/command/prune_test.rb

195 lines
6.2 KiB
Ruby
Raw Normal View History

2016-11-09 08:24:41 +00:00
require File.expand_path("../../../../../base", __FILE__)
require Vagrant.source_root.join("plugins/commands/box/command/prune")
describe VagrantPlugins::CommandBox::Command::Prune do
include_context "unit"
include_context "command plugin helpers"
let(:entry_klass) { Vagrant::MachineIndex::Entry }
let(:iso_env) do
# We have to create a Vagrantfile so there is a root path
isolated_environment.tap do |env|
env.vagrantfile("")
end
end
let(:iso_vagrant_env) { iso_env.create_vagrant_env }
let(:argv) { [] }
# Seems this way of providing a box version triggers box in use.
def new_entry(name, box_name, box_provider, version)
entry_klass.new.tap do |e|
e.name = name
e.vagrantfile_path = "/bar"
e.extra_data["box"] = {
"name" => box_name,
"provider" => box_provider,
"version" => version,
}
end
end
subject { described_class.new(argv, iso_vagrant_env) }
describe "execute" do
context "with no args" do
it "removes the old version and keeps the current one" do
# Let's put some things in the index
iso_env.box3("foobox", "1.0", :virtualbox);
iso_env.box3("foobox", "1.1", :virtualbox);
iso_env.box3("barbox", "1.0", :vmware);
iso_env.box3("barbox", "1.1", :vmware);
iso_vagrant_env.machine_index.set(new_entry("foo", "foobox", "virtualbox", 1))
output = ""
allow(iso_vagrant_env.ui).to receive(:info) do |data|
output << data
end
expect(iso_vagrant_env.boxes.all.count).to eq(4)
expect(subject.execute).to eq(0)
expect(iso_vagrant_env.boxes.all.count).to eq(2)
expect(output).to include("barbox (vmware, 1.1)")
expect(output).to include("Removing box 'barbox' (v1.0) with provider 'vmware'...")
expect(output).to include("foobox (virtualbox, 1.1)")
expect(output).to include("Removing box 'foobox' (v1.0) with provider 'virtualbox'...")
end
it "removes nothing" do
# Let's put some things in the index
iso_env.box3("foobox", "1.0", :virtualbox);
iso_env.box3("barbox", "1.0", :vmware);
iso_vagrant_env.machine_index.set(new_entry("foo", "foobox", "virtualbox", 1))
output = ""
allow(iso_vagrant_env.ui).to receive(:info) do |data|
output << data
end
expect(iso_vagrant_env.boxes.all.count).to eq(2)
expect(subject.execute).to eq(0)
expect(iso_vagrant_env.boxes.all.count).to eq(2)
expect(output).to include("No old versions of boxes to remove...")
end
end
context "with --provider" do
let(:argv) { ["--provider", "virtualbox"] }
it "removes the old versions of the specified provider" do
# Let's put some things in the index
iso_env.box3("foobox", "1.0", :virtualbox);
iso_env.box3("foobox", "1.1", :virtualbox);
iso_env.box3("barbox", "1.0", :vmware);
iso_env.box3("barbox", "1.1", :vmware);
iso_vagrant_env.machine_index.set(new_entry("foo", "foobox", "virtualbox", 1))
output = ""
allow(iso_vagrant_env.ui).to receive(:info) do |data|
output << "\n" + data
end
expect(iso_vagrant_env.boxes.all.count).to eq(4)
expect(subject.execute).to eq(0)
expect(iso_vagrant_env.boxes.all.count).to eq(3)
expect(output).to include("foobox (virtualbox, 1.1)")
expect(output).to include("Removing box 'foobox' (v1.0) with provider 'virtualbox'...")
end
end
context "with --dry-run" do
let(:argv) { ["--dry-run"] }
it "removes the old versions of the specified provider" do
# Let's put some things in the index
iso_env.box3("foobox", "1.0", :virtualbox);
iso_env.box3("foobox", "1.1", :virtualbox);
iso_vagrant_env.machine_index.set(new_entry("foo", "foobox", "virtualbox", 1))
output = ""
allow(iso_vagrant_env.ui).to receive(:info) do |data|
output << "\n" + data
end
expect(iso_vagrant_env.boxes.all.count).to eq(2)
expect(subject.execute).to eq(0)
expect(iso_vagrant_env.boxes.all.count).to eq(2)
expect(output).to include("foobox (virtualbox, 1.1)")
expect(output).to include("Would remove foobox virtualbox 1.0")
end
end
context "with --name" do
let(:argv) { ["--name", "barbox"] }
it "removes the old versions of the specified provider" do
# Let's put some things in the index
iso_env.box3("foobox", "1.0", :virtualbox);
iso_env.box3("foobox", "1.1", :virtualbox);
iso_env.box3("barbox", "1.0", :vmware);
iso_env.box3("barbox", "1.1", :vmware);
iso_vagrant_env.machine_index.set(new_entry("foo", "foobox", "virtualbox", 1))
output = ""
allow(iso_vagrant_env.ui).to receive(:info) do |data|
output << "\n" + data
end
expect(iso_vagrant_env.boxes.all.count).to eq(4)
expect(subject.execute).to eq(0)
expect(iso_vagrant_env.boxes.all.count).to eq(3)
expect(output).to include("barbox (vmware, 1.1)")
expect(output).to include("Removing box 'barbox' (v1.0) with provider 'vmware'...")
end
end
context "with --name and --provider" do
let(:argv) { ["--name", "foobox", "--provider", "virtualbox"] }
it "removed the old versions of that name and provider only" do
# Let's put some things in the index
iso_env.box3("foobox", "1.0", :virtualbox);
iso_env.box3("foobox", "1.1", :virtualbox);
iso_env.box3("foobox", "1.0", :vmware);
iso_env.box3("foobox", "1.1", :vmware);
iso_env.box3("barbox", "1.0", :vmware);
iso_env.box3("barbox", "1.1", :vmware);
iso_vagrant_env.machine_index.set(new_entry("foo", "foobox", "virtualbox", 1))
output = ""
allow(iso_vagrant_env.ui).to receive(:info) do |data|
output << "\n" + data
end
expect(iso_vagrant_env.boxes.all.count).to eq(6)
expect(subject.execute).to eq(0)
expect(iso_vagrant_env.boxes.all.count).to eq(5)
expect(output).to include("Removing box 'foobox' (v1.0) with provider 'virtualbox'...")
end
end
end
end