72 lines
2.0 KiB
Ruby

# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1
require_relative '../base'
describe VagrantPlugins::ProviderVirtualBox::Action::Import do
let(:app) { double("app") }
let(:state) { :test_state }
let(:machine) { double("machine", state: double("state", id: state)) }
let(:action_runner) { double("action_runner") }
let(:env) {
{
machine: machine,
action_runner: action_runner,
destroy_on_error: destroy_on_error,
}
}
subject { described_class.new(app, {}) }
describe "#recover" do
context "when destroy_on_error is false" do
let(:destroy_on_error) { false }
it "does nothing" do
expect(action_runner).to_not receive(:run)
subject.recover(env)
end
end
context "when destroy_on_error is true" do
let(:destroy_on_error) { true }
context "and machine is not_created" do
let(:state) { Vagrant::MachineState::NOT_CREATED_ID }
it "does nothing" do
expect(action_runner).to_not receive(:run)
subject.recover(env)
end
end
context "and machine is created" do
let(:state) { :running }
it "runs the destroy action with the proper environment" do
destroy_stack = double("destroy_stack")
allow(VagrantPlugins::ProviderVirtualBox::Action).to receive(:action_destroy) { destroy_stack }
expect(action_runner).to receive(:run).with(destroy_stack, hash_including(
config_validate: false,
force_confirm_destroy: true,
raw_action_name: :destroy,
action_name: :machine_action_destroy,
))
subject.recover(env)
end
context "but a VagrantError was raised" do
before {
env["vagrant.error"] = Vagrant::Errors::VagrantError.new
}
it "does nothing" do
expect(action_runner).to_not receive(:run)
subject.recover(env)
end
end
end
end
end
end