110 lines
2.9 KiB
Ruby
110 lines
2.9 KiB
Ruby
# Copyright (c) HashiCorp, Inc.
|
|
# SPDX-License-Identifier: BUSL-1.1
|
|
|
|
require File.expand_path("../../../base", __FILE__)
|
|
|
|
require "vagrant/util/command_deprecation"
|
|
|
|
describe Vagrant::Util do
|
|
include_context "unit"
|
|
|
|
let(:app){ lambda{|env|} }
|
|
let(:argv){[]}
|
|
let(:env){ {ui: Vagrant::UI::Silent.new} }
|
|
|
|
let(:command_class) do
|
|
Class.new(Vagrant.plugin("2", :command)) do
|
|
def self.synopsis
|
|
"base synopsis"
|
|
end
|
|
def self.name
|
|
"VagrantPlugins::CommandTest::Command"
|
|
end
|
|
def execute
|
|
@env[:ui].info("COMMAND CONTENT")
|
|
0
|
|
end
|
|
end
|
|
end
|
|
|
|
let(:command){ command_class.new(app, env) }
|
|
|
|
describe Vagrant::Util::CommandDeprecation do
|
|
before{ command_class.include(Vagrant::Util::CommandDeprecation) }
|
|
|
|
it "should add deprecation warning to synopsis" do
|
|
expect(command_class.synopsis).to include('[DEPRECATED]')
|
|
command.class.synopsis
|
|
end
|
|
|
|
it "should add deprecation warning to #execute" do
|
|
expect(env[:ui]).to receive(:warn).with(/DEPRECATION WARNING/)
|
|
command.execute
|
|
end
|
|
|
|
it "should execute original command" do
|
|
expect(env[:ui]).to receive(:info).with("COMMAND CONTENT")
|
|
command.execute
|
|
end
|
|
|
|
it "should return with a 0 value" do
|
|
expect(command.execute).to eq(0)
|
|
end
|
|
|
|
context "with custom name defined" do
|
|
before do
|
|
command_class.class_eval do
|
|
def deprecation_command_name
|
|
"custom-name"
|
|
end
|
|
end
|
|
end
|
|
|
|
it "should use custom name within warning message" do
|
|
expect(env[:ui]).to receive(:warn).with(/custom-name/)
|
|
command.execute
|
|
end
|
|
end
|
|
|
|
context "with deprecated subcommand" do
|
|
let(:command_class) do
|
|
Class.new(Vagrant.plugin("2", :command)) do
|
|
def self.name
|
|
"VagrantPlugins::CommandTest::Command::Action"
|
|
end
|
|
def execute
|
|
@env[:ui].info("COMMAND CONTENT")
|
|
0
|
|
end
|
|
end
|
|
end
|
|
|
|
it "should not modify empty synopsis" do
|
|
expect(command_class.synopsis.to_s).to be_empty
|
|
end
|
|
|
|
it "should extract command name and subname" do
|
|
expect(command.deprecation_command_name).to eq("test action")
|
|
end
|
|
end
|
|
end
|
|
|
|
describe Vagrant::Util::CommandDeprecation::Complete do
|
|
before{ command_class.include(Vagrant::Util::CommandDeprecation::Complete) }
|
|
|
|
it "should add deprecation warning to synopsis" do
|
|
expect(command_class.synopsis).to include('[DEPRECATED]')
|
|
command.class.synopsis
|
|
end
|
|
|
|
it "should raise a deprecation error when executed" do
|
|
expect{ command.execute }.to raise_error(Vagrant::Errors::CommandDeprecated)
|
|
end
|
|
|
|
it "should not run original command" do
|
|
expect(env[:ui]).not_to receive(:info).with("COMMAND CONTENT")
|
|
expect{ command.execute }.to raise_error(Vagrant::Errors::CommandDeprecated)
|
|
end
|
|
end
|
|
end
|