Fix tests for CLI::Options DSL.

This commit is contained in:
Markus Reiter 2017-05-21 02:32:46 +02:00
parent df1864ee43
commit 02a1e2781f
14 changed files with 103 additions and 146 deletions

View File

@ -1,69 +1,64 @@
describe Hbc::CLI::Audit, :cask do
let(:auditor) { double }
let(:cask) { double }
describe "selection of Casks to audit" do
it "audits all Casks if no tokens are given" do
allow(Hbc).to receive(:all).and_return([cask, cask])
expect(auditor).to receive(:audit).twice.and_return(true)
expect(Hbc::Auditor).to receive(:audit).twice.and_return(true)
run_audit
Hbc::CLI::Audit.run
end
it "audits specified Casks if tokens are given" do
cask_token = "nice-app"
expect(Hbc::CaskLoader).to receive(:load).with(cask_token).and_return(cask)
expect(auditor).to receive(:audit)
expect(Hbc::Auditor).to receive(:audit)
.with(cask, audit_download: false, check_token_conflicts: false)
.and_return(true)
run_audit(cask_token)
Hbc::CLI::Audit.run(cask_token)
end
end
describe "rules for downloading a Cask" do
it "does not download the Cask per default" do
allow(Hbc::CaskLoader).to receive(:load).and_return(cask)
expect(auditor).to receive(:audit)
expect(Hbc::Auditor).to receive(:audit)
.with(cask, audit_download: false, check_token_conflicts: false)
.and_return(true)
run_audit("casktoken")
Hbc::CLI::Audit.run("casktoken")
end
it "download a Cask if --download flag is set" do
allow(Hbc::CaskLoader).to receive(:load).and_return(cask)
expect(auditor).to receive(:audit)
expect(Hbc::Auditor).to receive(:audit)
.with(cask, audit_download: true, check_token_conflicts: false)
.and_return(true)
run_audit("casktoken", "--download")
Hbc::CLI::Audit.run("casktoken", "--download")
end
end
describe "rules for checking token conflicts" do
it "does not check for token conflicts per default" do
allow(Hbc::CaskLoader).to receive(:load).and_return(cask)
expect(auditor).to receive(:audit)
expect(Hbc::Auditor).to receive(:audit)
.with(cask, audit_download: false, check_token_conflicts: false)
.and_return(true)
run_audit("casktoken")
Hbc::CLI::Audit.run("casktoken")
end
it "checks for token conflicts if --token-conflicts flag is set" do
allow(Hbc::CaskLoader).to receive(:load).and_return(cask)
expect(auditor).to receive(:audit)
expect(Hbc::Auditor).to receive(:audit)
.with(cask, audit_download: false, check_token_conflicts: true)
.and_return(true)
run_audit("casktoken", "--token-conflicts")
Hbc::CLI::Audit.run("casktoken", "--token-conflicts")
end
end
def run_audit(*args)
Hbc::CLI::Audit.new(*args, auditor: auditor).run
end
end

View File

@ -1,6 +1,6 @@
describe Hbc::CLI::Cat, :cask do
describe "given a basic Cask" do
let(:expected_output) {
let(:basic_cask_content) {
<<-EOS.undent
cask 'basic-cask' do
version '1.2.3'
@ -17,19 +17,19 @@ describe Hbc::CLI::Cat, :cask do
it "displays the Cask file content about the specified Cask" do
expect {
Hbc::CLI::Cat.run("basic-cask")
}.to output(expected_output).to_stdout
}.to output(basic_cask_content).to_stdout
end
it "throws away additional Cask arguments and uses the first" do
it "can display multiple Casks" do
expect {
Hbc::CLI::Cat.run("basic-cask", "local-caffeine")
}.to output(expected_output).to_stdout
Hbc::CLI::Cat.run("basic-cask", "basic-cask")
}.to output(basic_cask_content * 2).to_stdout
end
it "throws away stray options" do
it "fails when option is unknown" do
expect {
Hbc::CLI::Cat.run("--notavalidoption", "basic-cask")
}.to output(expected_output).to_stdout
}.to raise_error(/invalid option/)
end
end
@ -51,7 +51,7 @@ describe Hbc::CLI::Cat, :cask do
it "raises an exception" do
expect {
Hbc::CLI::Cat.run("--notavalidoption")
}.to raise_error(Hbc::CaskUnspecifiedError)
}.to raise_error(/invalid option/)
end
end
end

View File

@ -2,7 +2,11 @@ describe Hbc::CLI::Cleanup, :cask do
let(:cache_location) { Pathname.new(Dir.mktmpdir).realpath }
let(:outdated_only) { false }
subject { described_class.new(*cask_tokens, cache_location: cache_location, outdated_only: outdated_only) }
subject { described_class.new(*cask_tokens, cache_location: cache_location) }
before(:each) do
allow_any_instance_of(described_class).to receive(:outdated_only?).and_return(outdated_only)
end
after do
cache_location.rmtree

View File

@ -36,16 +36,10 @@ describe Hbc::CLI::Create, :cask do
EOS
end
it "throws away additional Cask arguments and uses the first" do
command = described_class.new("additional-cask", "another-cask")
expect(command).to receive(:exec_editor).with(Hbc::CaskLoader.path("additional-cask"))
command.run
end
it "throws away stray options" do
command = described_class.new("--notavalidoption", "yet-another-cask")
expect(command).to receive(:exec_editor).with(Hbc::CaskLoader.path("yet-another-cask"))
command.run
it "raises an exception when more than one Cask is given" do
expect {
described_class.run("additional-cask", "another-cask")
}.to raise_error(/Only one Cask can be created at a time./)
end
it "raises an exception when the Cask already exists" do
@ -68,11 +62,17 @@ describe Hbc::CLI::Create, :cask do
end
end
describe "when no Cask is specified, but an invalid option" do
it "raises an exception" do
context "when an invalid option is specified" do
it "raises an exception when no Cask is specified" do
expect {
described_class.run("--notavalidoption")
}.to raise_error(Hbc::CaskUnspecifiedError)
}.to raise_error(/invalid option/)
end
it "raises an exception" do
expect {
described_class.run("--notavalidoption", "yet-another-cask")
}.to raise_error(/invalid option/)
end
end
end

View File

@ -9,10 +9,10 @@ describe Hbc::CLI::Edit, :cask do
command.run
end
it "throws away additional arguments and uses the first" do
command = described_class.new("local-caffeine", "local-transmission")
expect(command).to receive(:exec_editor).with(Hbc::CaskLoader.path("local-caffeine"))
command.run
it "raises an error when given more than one argument" do
expect {
described_class.new("local-caffeine", "local-transmission")
}.to raise_error(/Only one Cask can be created at a time./)
end
it "raises an exception when the Cask doesnt exist" do
@ -33,7 +33,7 @@ describe Hbc::CLI::Edit, :cask do
it "raises an exception" do
expect {
described_class.run("--notavalidoption")
}.to raise_error(Hbc::CaskUnspecifiedError)
}.to raise_error(/invalid option/)
end
end
end

View File

@ -69,7 +69,7 @@ describe Hbc::CLI::Fetch, :cask do
it "raises an exception" do
expect {
Hbc::CLI::Fetch.run("--notavalidoption")
}.to raise_error(Hbc::CaskUnspecifiedError)
}.to raise_error(/invalid option/)
end
end
end

View File

@ -45,7 +45,7 @@ describe Hbc::CLI::Info, :cask do
it "throws away stray options" do
expect {
Hbc::CLI::Info.run("--notavalidoption", "local-caffeine", "local-transmission")
}.to output(expected_output).to_stdout
}.to raise_error(/invalid option/)
end
end
@ -102,7 +102,7 @@ describe Hbc::CLI::Info, :cask do
it "raises an exception" do
expect {
Hbc::CLI::Info.run("--notavalidoption")
}.to raise_error(Hbc::CaskUnspecifiedError)
}.to raise_error(/invalid option/)
end
end
end

View File

@ -40,7 +40,7 @@ describe Hbc::CLI::Install, :cask do
end
expect {
Hbc::CLI::Install.run("local-transmission", "")
Hbc::CLI::Install.run("local-transmission")
}.to output(/Warning: A Cask for local-transmission is already installed./).to_stderr
end
@ -115,7 +115,11 @@ describe Hbc::CLI::Install, :cask do
end
describe "with an invalid option" do
with_options.call(["--notavalidoption"])
it "raises an error" do
expect {
Hbc::CLI::Install.run("--notavalidoption")
}.to raise_error(/invalid option/)
end
end
end
end

View File

@ -1,6 +1,6 @@
describe Hbc::CLI, :cask do
it "supports setting the appdir" do
Hbc::CLI.process_options %w[help --appdir=/some/path/foo]
Hbc::CLI.new.process_options("help", "--appdir=/some/path/foo")
expect(Hbc.appdir).to eq(Pathname.new("/some/path/foo"))
end
@ -8,13 +8,13 @@ describe Hbc::CLI, :cask do
it "supports setting the appdir from ENV" do
ENV["HOMEBREW_CASK_OPTS"] = "--appdir=/some/path/bar"
Hbc::CLI.process_options %w[help]
Hbc::CLI.new.process_options("help")
expect(Hbc.appdir).to eq(Pathname.new("/some/path/bar"))
end
it "supports setting the prefpanedir" do
Hbc::CLI.process_options %w[help --prefpanedir=/some/path/foo]
Hbc::CLI.new.process_options("help", "--prefpanedir=/some/path/foo")
expect(Hbc.prefpanedir).to eq(Pathname.new("/some/path/foo"))
end
@ -22,13 +22,13 @@ describe Hbc::CLI, :cask do
it "supports setting the prefpanedir from ENV" do
ENV["HOMEBREW_CASK_OPTS"] = "--prefpanedir=/some/path/bar"
Hbc::CLI.process_options %w[help]
Hbc::CLI.new.process_options("help")
expect(Hbc.prefpanedir).to eq(Pathname.new("/some/path/bar"))
end
it "supports setting the qlplugindir" do
Hbc::CLI.process_options %w[help --qlplugindir=/some/path/foo]
Hbc::CLI.new.process_options("help", "--qlplugindir=/some/path/foo")
expect(Hbc.qlplugindir).to eq(Pathname.new("/some/path/foo"))
end
@ -36,13 +36,13 @@ describe Hbc::CLI, :cask do
it "supports setting the qlplugindir from ENV" do
ENV["HOMEBREW_CASK_OPTS"] = "--qlplugindir=/some/path/bar"
Hbc::CLI.process_options %w[help]
Hbc::CLI.new.process_options("help")
expect(Hbc.qlplugindir).to eq(Pathname.new("/some/path/bar"))
end
it "supports setting the colorpickerdir" do
Hbc::CLI.process_options %w[help --colorpickerdir=/some/path/foo]
Hbc::CLI.new.process_options("help", "--colorpickerdir=/some/path/foo")
expect(Hbc.colorpickerdir).to eq(Pathname.new("/some/path/foo"))
end
@ -50,13 +50,13 @@ describe Hbc::CLI, :cask do
it "supports setting the colorpickerdir from ENV" do
ENV["HOMEBREW_CASK_OPTS"] = "--colorpickerdir=/some/path/bar"
Hbc::CLI.process_options %w[help]
Hbc::CLI.new.process_options("help")
expect(Hbc.colorpickerdir).to eq(Pathname.new("/some/path/bar"))
end
it "supports setting the dictionarydir" do
Hbc::CLI.process_options %w[help --dictionarydir=/some/path/foo]
Hbc::CLI.new.process_options("help", "--dictionarydir=/some/path/foo")
expect(Hbc.dictionarydir).to eq(Pathname.new("/some/path/foo"))
end
@ -64,13 +64,13 @@ describe Hbc::CLI, :cask do
it "supports setting the dictionarydir from ENV" do
ENV["HOMEBREW_CASK_OPTS"] = "--dictionarydir=/some/path/bar"
Hbc::CLI.process_options %w[help]
Hbc::CLI.new.process_options("help")
expect(Hbc.dictionarydir).to eq(Pathname.new("/some/path/bar"))
end
it "supports setting the fontdir" do
Hbc::CLI.process_options %w[help --fontdir=/some/path/foo]
Hbc::CLI.new.process_options("help", "--fontdir=/some/path/foo")
expect(Hbc.fontdir).to eq(Pathname.new("/some/path/foo"))
end
@ -78,13 +78,13 @@ describe Hbc::CLI, :cask do
it "supports setting the fontdir from ENV" do
ENV["HOMEBREW_CASK_OPTS"] = "--fontdir=/some/path/bar"
Hbc::CLI.process_options %w[help]
Hbc::CLI.new.process_options("help")
expect(Hbc.fontdir).to eq(Pathname.new("/some/path/bar"))
end
it "supports setting the servicedir" do
Hbc::CLI.process_options %w[help --servicedir=/some/path/foo]
Hbc::CLI.new.process_options("help", "--servicedir=/some/path/foo")
expect(Hbc.servicedir).to eq(Pathname.new("/some/path/foo"))
end
@ -92,42 +92,22 @@ describe Hbc::CLI, :cask do
it "supports setting the servicedir from ENV" do
ENV["HOMEBREW_CASK_OPTS"] = "--servicedir=/some/path/bar"
Hbc::CLI.process_options %w[help]
Hbc::CLI.new.process_options("help")
expect(Hbc.servicedir).to eq(Pathname.new("/some/path/bar"))
end
it "allows additional options to be passed through" do
rest = Hbc::CLI.process_options %w[edit foo --create --appdir=/some/path/qux]
rest = Hbc::CLI.new.process_options("edit", "foo", "--create", "--appdir=/some/path/qux")
expect(Hbc.appdir).to eq(Pathname.new("/some/path/qux"))
expect(rest).to eq(%w[edit foo --create])
end
describe "when a mandatory argument is missing" do
it "shows a user-friendly error message" do
expect {
Hbc::CLI.process_options %w[install -f]
}.to raise_error(ArgumentError)
end
end
describe "given an ambiguous option" do
it "shows a user-friendly error message" do
expect {
Hbc::CLI.process_options %w[edit -c]
}.to raise_error(ArgumentError)
end
end
describe "--help" do
it "sets the Cask help method to true" do
begin
Hbc::CLI.process_options %w[foo --help]
expect(Hbc::CLI.help?).to be true
ensure
Hbc::CLI.help = false
end
command = Hbc::CLI.new("foo", "--help")
expect(command.help?).to be true
end
end
end

View File

@ -13,13 +13,13 @@ describe Hbc::CLI::Outdated, :cask do
shutup do
installed.each { |cask| InstallHelper.install_with_caskfile(cask) }
end
allow(Hbc::CLI).to receive(:verbose?).and_return(true)
allow_any_instance_of(described_class).to receive(:verbose?).and_return(true)
end
describe 'without --greedy it ignores the Casks with "vesion latest" or "auto_updates true"' do
it "checks all the installed Casks when no token is provided" do
expect {
Hbc::CLI::Outdated.run
described_class.run
}.to output(<<-EOS.undent).to_stdout
local-caffeine (1.2.2) != 1.2.3
local-transmission (2.60) != 2.61
@ -28,7 +28,7 @@ describe Hbc::CLI::Outdated, :cask do
it "checks only the tokens specified in the command line" do
expect {
Hbc::CLI::Outdated.run("local-caffeine")
described_class.run("local-caffeine")
}.to output(<<-EOS.undent).to_stdout
local-caffeine (1.2.2) != 1.2.3
EOS
@ -36,26 +36,32 @@ describe Hbc::CLI::Outdated, :cask do
it 'ignores "auto_updates" and "latest" Casks even when their tokens are provided in the command line' do
expect {
Hbc::CLI::Outdated.run("local-caffeine", "auto-updates", "version-latest-string")
described_class.run("local-caffeine", "auto-updates", "version-latest-string")
}.to output(<<-EOS.undent).to_stdout
local-caffeine (1.2.2) != 1.2.3
EOS
end
end
describe "--quiet overrides --verbose" do
before do
allow_any_instance_of(described_class).to receive(:verbose?).and_call_original
end
it "lists only the names (no versions) of the outdated Casks with --quiet" do
expect {
Hbc::CLI::Outdated.run("--quiet")
described_class.run("--verbose", "--quiet")
}.to output(<<-EOS.undent).to_stdout
local-caffeine
local-transmission
EOS
end
end
describe "with --greedy it checks additional Casks" do
it 'includes the Casks with "auto_updates true" or "version latest" with --greedy' do
expect {
Hbc::CLI::Outdated.run("--greedy")
described_class.run("--greedy")
}.to output(<<-EOS.undent).to_stdout
auto-updates (2.57) != 2.61
local-caffeine (1.2.2) != 1.2.3
@ -69,7 +75,7 @@ describe Hbc::CLI::Outdated, :cask do
InstallHelper.install_with_caskfile(cask)
expect {
Hbc::CLI::Outdated.run("--greedy")
described_class.run("--greedy")
}.to output(<<-EOS.undent).to_stdout
local-caffeine (1.2.2) != 1.2.3
local-transmission (2.60) != 2.61

View File

@ -77,7 +77,7 @@ describe Hbc::CLI::Style, :cask do
subject { cli.cask_paths }
before do
allow(described_class).to receive(:cask_tokens_from).and_return(tokens)
allow(cli).to receive(:args).and_return(tokens)
end
context "when no cask tokens are given" do
@ -147,33 +147,4 @@ describe Hbc::CLI::Style, :cask do
expect(subject).to include("--auto-correct", *default_args)
end
end
describe "#fix?" do
subject { cli.fix? }
context "when --fix is passed as an argument" do
let(:args) { ["adium", "--fix"] }
it { is_expected.to be_truthy }
end
context "when --correct is passed as an argument" do
let(:args) { ["adium", "--correct"] }
it { is_expected.to be_truthy }
end
context "when --auto-correct is passed as an argument" do
let(:args) { ["adium", "--auto-correct"] }
it { is_expected.to be_truthy }
end
context "when --auto-correct is misspelled as --autocorrect" do
let(:args) { ["adium", "--autocorrect"] }
it { is_expected.to be_truthy }
end
context "when no flag equivalent to --fix is passed as an argument" do
let(:args) { ["adium"] }
it { is_expected.to be_falsey }
end
end
end

View File

@ -203,7 +203,7 @@ describe Hbc::CLI::Uninstall, :cask do
it "raises an exception" do
expect {
Hbc::CLI::Uninstall.run("--notavalidoption")
}.to raise_error(Hbc::CaskUnspecifiedError)
}.to raise_error(/invalid option/)
end
end
end

View File

@ -18,8 +18,7 @@ describe Hbc::CLI::Zap, :cask do
expect(transmission).to be_installed
shutup do
Hbc::CLI::Zap.run("--notavalidoption",
"local-caffeine", "local-transmission")
Hbc::CLI::Zap.run("local-caffeine", "local-transmission")
end
expect(caffeine).not_to be_installed
@ -67,7 +66,7 @@ describe Hbc::CLI::Zap, :cask do
it "raises an exception" do
expect {
Hbc::CLI::Zap.run("--notavalidoption")
}.to raise_error(Hbc::CaskUnspecifiedError)
}.to raise_error(/invalid option/)
end
end
end

View File

@ -13,7 +13,7 @@ describe Hbc::CLI, :cask do
])
end
context ".process" do
context "::run" do
let(:noop_command) { double("CLI::Noop") }
before do
@ -30,37 +30,35 @@ describe Hbc::CLI, :cask do
version_command = double("CLI::Version")
allow(described_class).to receive(:lookup_command).with("--version").and_return(version_command)
expect(described_class).to receive(:run_command).with(version_command)
described_class.process(["--version"])
described_class.run("--version")
end
it "prints help output when subcommand receives `--help` flag" do
begin
command = Hbc::CLI.new("noop", "--help")
expect(described_class).to receive(:run_command).with("help")
described_class.process(%w[noop --help])
expect(Hbc::CLI.help?).to eq(true)
ensure
Hbc::CLI.help = false
end
command.run
expect(command.help?).to eq(true)
end
it "respects the env variable when choosing what appdir to create" do
allow(ENV).to receive(:[])
allow(ENV).to receive(:[]).with("HOMEBREW_CASK_OPTS").and_return("--appdir=/custom/appdir")
expect(Hbc).to receive(:appdir=).with(Pathname.new("/custom/appdir"))
described_class.process("noop")
described_class.run("noop")
end
it "respects the env variable when choosing a non-default Caskroom location" do
allow(ENV).to receive(:[])
allow(ENV).to receive(:[]).with("HOMEBREW_CASK_OPTS").and_return("--caskroom=/custom/caskdir")
expect(Hbc).to receive(:caskroom=).with(Pathname.new("/custom/caskdir"))
described_class.process("noop")
described_class.run("noop")
end
it "exits with a status of 1 when something goes wrong" do
allow(described_class).to receive(:lookup_command).and_raise(Hbc::CaskError)
expect(described_class).to receive(:exit).with(1)
described_class.process("noop")
command = Hbc::CLI.new("noop")
expect(command).to receive(:exit).with(1)
command.run
end
end