195 lines
6.2 KiB
Ruby
195 lines
6.2 KiB
Ruby
|
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
|