70 lines
2.6 KiB
Ruby
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
|