57 lines
1.6 KiB
Ruby
57 lines
1.6 KiB
Ruby
# Copyright (c) HashiCorp, Inc.
|
|
# SPDX-License-Identifier: BUSL-1.1
|
|
|
|
require File.expand_path("../../../../base", __FILE__)
|
|
|
|
describe Vagrant::Action::Builtin::Confirm do
|
|
let(:app) { lambda { |env| } }
|
|
let(:env) { { ui: Vagrant::UI::Silent.new } }
|
|
let(:message) { "foo" }
|
|
|
|
["y", "Y"].each do |valid|
|
|
it "should set the result to true if '#{valid}' is given" do
|
|
expect(env[:ui]).to receive(:ask).with(message).and_return(valid)
|
|
described_class.new(app, env, message).call(env)
|
|
expect(env[:result]).to be
|
|
end
|
|
end
|
|
|
|
it "should set the result to true if force matches" do
|
|
force_key = :tubes
|
|
env[force_key] = true
|
|
described_class.new(app, env, message, force_key).call(env)
|
|
expect(env[:result]).to be
|
|
end
|
|
|
|
it "should ask if force is not true" do
|
|
force_key = :tubes
|
|
env[force_key] = false
|
|
expect(env[:ui]).to receive(:ask).with(message).and_return("nope")
|
|
described_class.new(app, env, message).call(env)
|
|
expect(env[:result]).not_to be
|
|
end
|
|
|
|
it "should set result to false if anything else is given" do
|
|
expect(env[:ui]).to receive(:ask).with(message).and_return("nope")
|
|
described_class.new(app, env, message).call(env)
|
|
expect(env[:result]).not_to be
|
|
end
|
|
|
|
it "should ask multiple times if an allowed set is given and response isn't in that set" do
|
|
times = 0
|
|
allow(env[:ui]).to receive(:ask) do |arg|
|
|
expect(arg).to eql(message)
|
|
times += 1
|
|
|
|
if times <= 3
|
|
"nope"
|
|
else
|
|
"y"
|
|
end
|
|
end
|
|
described_class.new(app, env, message, allowed: ["y", "N"]).call(env)
|
|
expect(env[:result]).to be(true)
|
|
expect(times).to eq(4)
|
|
end
|
|
end
|