vaguerent/test/unit/vagrant/action/builtin/has_provisioner_test.rb

70 lines
2.6 KiB
Ruby

# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1
require File.expand_path("../../../../base", __FILE__)
describe Vagrant::Action::Builtin::HasProvisioner do
include_context "unit"
let(:provisioner_one) { double("provisioner_one") }
let(:provisioner_two) { double("provisioner_two") }
let(:provisioners) { [provisioner_one, provisioner_two] }
let(:machine) { double("machine") }
let(:ui) { Vagrant::UI::Silent.new }
let(:env) {{ machine: machine, ui: ui, root_path: Pathname.new(".") }}
let(:app) { lambda { |*args| }}
subject { described_class.new(app, env) }
describe "#call" do
before do
allow(provisioner_one).to receive(:communicator_required).and_return(true)
allow(provisioner_one).to receive(:name)
allow(provisioner_one).to receive(:type)
allow(provisioner_two).to receive(:communicator_required).and_return(false)
allow(provisioner_two).to receive(:name)
allow(provisioner_two).to receive(:type)
allow(machine).to receive_message_chain(:config, :vm, :provisioners).and_return(provisioners)
end
context "provider has capability :has_communicator" do
before do
allow(machine).to receive_message_chain(:provider, :capability?).with(:has_communicator).and_return(true)
end
it "does not skip any provisioners if provider has ssh" do
allow(machine).to receive_message_chain(:provider, :capability).with(:has_communicator).and_return(true)
expect(provisioner_one).to_not receive(:communicator_required)
expect(provisioner_two).to_not receive(:communicator_required)
subject.call(env)
expect(env[:skip]).to eq([])
end
it "skips provisioners that require a communicator if provider does not have ssh" do
allow(machine).to receive_message_chain(:provider, :capability).with(:has_communicator).and_return(false)
expect(provisioner_one).to receive(:communicator_required)
expect(provisioner_two).to receive(:communicator_required)
expect(provisioner_one).to receive(:run=).with(:never)
subject.call(env)
expect(env[:skip]).to eq([provisioner_one])
end
end
context "provider does not have capability :has_communicator" do
before do
allow(machine).to receive_message_chain(:provider, :capability?).with(:has_communicator).and_return(false)
end
it "does not skip any provisioners" do
expect(provisioner_one).to_not receive(:communicator_required)
expect(provisioner_two).to_not receive(:communicator_required)
subject.call(env)
expect(env[:skip]).to eq([])
end
end
end
end