Load Casks only once (and fix style issues)

This commit is contained in:
L. E. Segovia 2017-11-24 01:21:30 +00:00
parent 7ee98eb421
commit e0be066f8b
2 changed files with 114 additions and 79 deletions

View File

@ -12,8 +12,11 @@ module Hbc
end
def run
outdated_casks = casks(alternative: -> { Hbc.installed.select { |cask|
cask.outdated?(greedy?) } }).select { |cask| cask.outdated?(true) }
outdated_casks = casks(alternative: lambda {
Hbc.installed.select do |cask|
cask.outdated?(greedy?)
end
}).select { |cask| cask.outdated?(true) }
if outdated_casks.empty?
oh1 "No Casks to upgrade"

View File

@ -38,64 +38,78 @@ describe Hbc::CLI::Upgrade, :cask do
include_context "Proper Casks"
it "and updates all the installed Casks when no token is provided" do
expect(Hbc::CaskLoader.load("local-caffeine")).to be_installed
expect(Hbc.appdir.join("Caffeine.app")).to be_a_directory
expect(Hbc::CaskLoader.load("local-caffeine").versions).to include("1.2.2")
local_caffeine = Hbc::CaskLoader.load("local-caffeine")
local_caffeine_route = Hbc.appdir.join("Caffeine.app")
local_transmission = Hbc::CaskLoader.load("local-transmission")
local_transmission_route = Hbc.appdir.join("Transmission.app")
expect(Hbc::CaskLoader.load("local-transmission")).to be_installed
expect(Hbc.appdir.join("Transmission.app")).to be_a_directory
expect(Hbc::CaskLoader.load("local-transmission").versions).to include("2.60")
expect(local_caffeine).to be_installed
expect(local_caffeine_route).to be_a_directory
expect(local_caffeine.versions).to include("1.2.2")
expect(local_transmission).to be_installed
expect(local_transmission_route).to be_a_directory
expect(local_transmission.versions).to include("2.60")
described_class.run
expect(Hbc::CaskLoader.load("local-caffeine")).to be_installed
expect(Hbc.appdir.join("Caffeine.app")).to be_a_directory
expect(Hbc::CaskLoader.load("local-caffeine").versions).to include("1.2.3")
expect(local_caffeine).to be_installed
expect(local_caffeine_route).to be_a_directory
expect(local_caffeine.versions).to include("1.2.3")
expect(Hbc::CaskLoader.load("local-transmission")).to be_installed
expect(Hbc.appdir.join("Transmission.app")).to be_a_directory
expect(Hbc::CaskLoader.load("local-transmission").versions).to include("2.61")
expect(local_transmission).to be_installed
expect(local_transmission_route).to be_a_directory
expect(local_transmission.versions).to include("2.61")
end
it "and updates only the Casks specified in the command line" do
expect(Hbc::CaskLoader.load("local-caffeine")).to be_installed
expect(Hbc.appdir.join("Caffeine.app")).to be_a_directory
expect(Hbc::CaskLoader.load("local-caffeine").versions).to include("1.2.2")
local_caffeine = Hbc::CaskLoader.load("local-caffeine")
local_caffeine_route = Hbc.appdir.join("Caffeine.app")
local_transmission = Hbc::CaskLoader.load("local-transmission")
local_transmission_route = Hbc.appdir.join("Transmission.app")
expect(Hbc::CaskLoader.load("local-transmission")).to be_installed
expect(Hbc.appdir.join("Transmission.app")).to be_a_directory
expect(Hbc::CaskLoader.load("local-transmission").versions).to include("2.60")
expect(local_caffeine).to be_installed
expect(local_caffeine_route).to be_a_directory
expect(local_caffeine.versions).to include("1.2.2")
expect(local_transmission).to be_installed
expect(local_transmission_route).to be_a_directory
expect(local_transmission.versions).to include("2.60")
described_class.run("local-caffeine")
expect(Hbc::CaskLoader.load("local-caffeine")).to be_installed
expect(Hbc.appdir.join("Caffeine.app")).to be_a_directory
expect(Hbc::CaskLoader.load("local-caffeine").versions).to include("1.2.3")
expect(Hbc::CaskLoader.load("local-caffeine").versions).to_not include("1.2.2")
expect(local_caffeine).to be_installed
expect(local_caffeine_route).to be_a_directory
expect(local_caffeine.versions).to include("1.2.3")
expect(Hbc::CaskLoader.load("local-transmission")).to be_installed
expect(Hbc.appdir.join("Transmission.app")).to be_a_directory
expect(Hbc::CaskLoader.load("local-transmission").versions).to include("2.60")
expect(local_transmission).to be_installed
expect(local_transmission_route).to be_a_directory
expect(local_transmission.versions).to include("2.60")
end
it 'updates "auto_updates" and "latest" Casks when their tokens are provided in the command line' do
expect(Hbc::CaskLoader.load("local-caffeine")).to be_installed
expect(Hbc.appdir.join("Caffeine.app")).to be_a_directory
expect(Hbc::CaskLoader.load("local-caffeine").versions).to include("1.2.2")
local_caffeine = Hbc::CaskLoader.load("local-caffeine")
local_caffeine_route = Hbc.appdir.join("Caffeine.app")
auto_updates = Hbc::CaskLoader.load("auto-updates")
auto_updates_path = Hbc.appdir.join("MyFancyApp.app")
expect(Hbc::CaskLoader.load("auto-updates")).to be_installed
expect(Hbc.appdir.join("MyFancyApp.app")).to be_a_directory
expect(Hbc::CaskLoader.load("auto-updates").versions).to include("2.57")
expect(local_caffeine).to be_installed
expect(local_caffeine_route).to be_a_directory
expect(local_caffeine.versions).to include("1.2.2")
expect(auto_updates).to be_installed
expect(auto_updates_path).to be_a_directory
expect(auto_updates.versions).to include("2.57")
described_class.run("local-caffeine", "auto-updates")
expect(Hbc::CaskLoader.load("local-caffeine")).to be_installed
expect(Hbc.appdir.join("Caffeine.app")).to be_a_directory
expect(Hbc::CaskLoader.load("local-caffeine").versions).to include("1.2.3")
expect(local_caffeine).to be_installed
expect(local_caffeine_route).to be_a_directory
expect(local_caffeine.versions).to include("1.2.3")
expect(Hbc::CaskLoader.load("auto-updates")).to be_installed
expect(Hbc.appdir.join("MyFancyApp.app")).to be_a_directory
expect(Hbc::CaskLoader.load("auto-updates").versions).to include("2.61")
expect(auto_updates).to be_installed
expect(auto_updates_path).to be_a_directory
expect(auto_updates.versions).to include("2.61")
end
end
@ -103,47 +117,59 @@ describe Hbc::CLI::Upgrade, :cask do
include_context "Proper Casks"
it 'includes the Casks with "auto_updates true" or "version latest" with --greedy' do
expect(Hbc::CaskLoader.load("auto-updates")).to be_installed
expect(Hbc.appdir.join("MyFancyApp.app")).to be_a_directory
expect(Hbc::CaskLoader.load("auto-updates").versions).to include("2.57")
local_caffeine = Hbc::CaskLoader.load("local-caffeine")
local_caffeine_route = Hbc.appdir.join("Caffeine.app")
auto_updates = Hbc::CaskLoader.load("auto-updates")
auto_updates_path = Hbc.appdir.join("MyFancyApp.app")
local_transmission = Hbc::CaskLoader.load("local-transmission")
local_transmission_route = Hbc.appdir.join("Transmission.app")
expect(Hbc::CaskLoader.load("local-caffeine")).to be_installed
expect(Hbc.appdir.join("Caffeine.app")).to be_a_directory
expect(Hbc::CaskLoader.load("local-caffeine").versions).to include("1.2.2")
expect(local_caffeine).to be_installed
expect(local_caffeine_route).to be_a_directory
expect(local_caffeine.versions).to include("1.2.2")
expect(Hbc::CaskLoader.load("local-transmission").versions).to include("2.60")
expect(auto_updates).to be_installed
expect(auto_updates_path).to be_a_directory
expect(auto_updates.versions).to include("2.57")
expect(local_transmission).to be_installed
expect(local_transmission_route).to be_a_directory
expect(local_transmission.versions).to include("2.60")
described_class.run("--greedy")
expect(Hbc::CaskLoader.load("auto-updates")).to be_installed
expect(Hbc.appdir.join("MyFancyApp.app")).to be_a_directory
expect(Hbc::CaskLoader.load("auto-updates").versions).to include("2.61")
expect(local_caffeine).to be_installed
expect(local_caffeine_route).to be_a_directory
expect(local_caffeine.versions).to include("1.2.3")
expect(Hbc::CaskLoader.load("local-caffeine")).to be_installed
expect(Hbc.appdir.join("Caffeine.app")).to be_a_directory
expect(Hbc::CaskLoader.load("local-caffeine").versions).to include("1.2.3")
expect(auto_updates).to be_installed
expect(auto_updates_path).to be_a_directory
expect(auto_updates.versions).to include("2.61")
expect(Hbc::CaskLoader.load("local-transmission")).to be_installed
expect(Hbc.appdir.join("Transmission.app")).to be_a_directory
expect(Hbc::CaskLoader.load("local-transmission").versions).to include("2.61")
expect(local_transmission).to be_installed
expect(local_transmission_route).to be_a_directory
expect(local_transmission.versions).to include("2.61")
end
it 'does not include the Casks with "auto_updates true" when the version did not change' do
expect(Hbc::CaskLoader.load("auto-updates")).to be_installed
expect(Hbc.appdir.join("MyFancyApp.app")).to be_a_directory
expect(Hbc::CaskLoader.load("auto-updates").versions).to include("2.57")
auto_updates = Hbc::CaskLoader.load("auto-updates")
auto_updates_path = Hbc.appdir.join("MyFancyApp.app")
expect(auto_updates).to be_installed
expect(auto_updates_path).to be_a_directory
expect(auto_updates.versions).to include("2.57")
described_class.run("auto-updates", "--greedy")
expect(Hbc::CaskLoader.load("auto-updates")).to be_installed
expect(Hbc.appdir.join("MyFancyApp.app")).to be_a_directory
expect(Hbc::CaskLoader.load("auto-updates").versions).to include("2.61")
expect(auto_updates).to be_installed
expect(auto_updates_path).to be_a_directory
expect(auto_updates.versions).to include("2.61")
described_class.run("auto-updates", "--greedy")
expect(Hbc::CaskLoader.load("auto-updates")).to be_installed
expect(Hbc.appdir.join("MyFancyApp.app")).to be_a_directory
expect(Hbc::CaskLoader.load("auto-updates").versions).to include("2.61")
expect(auto_updates).to be_installed
expect(auto_updates_path).to be_a_directory
expect(auto_updates.versions).to include("2.61")
end
end
@ -155,33 +181,39 @@ describe Hbc::CLI::Upgrade, :cask do
EOS
it "restores the old Cask if the upgrade failed" do
expect(Hbc::CaskLoader.load("will-fail-if-upgraded")).to be_installed
expect(Hbc.appdir.join("container")).to be_a_file
expect(Hbc::CaskLoader.load("will-fail-if-upgraded").versions).to include("1.2.2")
will_fail_if_upgraded = Hbc::CaskLoader.load("will-fail-if-upgraded")
will_fail_if_upgraded_path = Hbc.appdir.join("container")
expect(will_fail_if_upgraded).to be_installed
expect(will_fail_if_upgraded_path).to be_a_file
expect(will_fail_if_upgraded.versions).to include("1.2.2")
expect {
described_class.run("will-fail-if-upgraded")
}.to raise_error(Hbc::CaskError).and output(output_reverted).to_stderr
expect(Hbc::CaskLoader.load("will-fail-if-upgraded")).to be_installed
expect(Hbc.appdir.join("container")).to be_a_file
expect(Hbc::CaskLoader.load("will-fail-if-upgraded").versions).to include("1.2.2")
expect(Hbc::CaskLoader.load("will-fail-if-upgraded").staged_path).to_not exist
expect(will_fail_if_upgraded).to be_installed
expect(will_fail_if_upgraded_path).to be_a_file
expect(will_fail_if_upgraded.versions).to include("1.2.2")
expect(will_fail_if_upgraded.staged_path).to_not exist
end
it "by not restoring the old Cask if the upgrade failed pre-install" do
expect(Hbc::CaskLoader.load("bad-checksum")).to be_installed
expect(Hbc.appdir.join("Caffeine.app")).to be_a_directory
expect(Hbc::CaskLoader.load("bad-checksum").versions).to include("1.2.2")
bad_checksum = Hbc::CaskLoader.load("bad-checksum")
bad_checksum_path = Hbc.appdir.join("Caffeine.app")
expect(bad_checksum).to be_installed
expect(bad_checksum_path).to be_a_directory
expect(bad_checksum.versions).to include("1.2.2")
expect {
described_class.run("bad-checksum")
}.to raise_error(Hbc::CaskSha256MismatchError).and (not_to_output output_reverted).to_stderr
}.to raise_error(Hbc::CaskSha256MismatchError).and(not_to_output(output_reverted).to_stderr)
expect(Hbc::CaskLoader.load("bad-checksum")).to be_installed
expect(Hbc.appdir.join("Caffeine.app")).to be_a_directory
expect(Hbc::CaskLoader.load("bad-checksum").versions).to include("1.2.2")
expect(Hbc::CaskLoader.load("bad-checksum").staged_path).to_not exist
expect(bad_checksum).to be_installed
expect(bad_checksum_path).to be_a_directory
expect(bad_checksum.versions).to include("1.2.2")
expect(bad_checksum.staged_path).to_not exist
end
end
end