spec/cc/cli/global_cache_spec.rb (68 lines of code) (raw):
require "spec_helper"
describe CC::CLI::GlobalCache do
around(:each) do |example|
Dir.mktmpdir do |dir|
original_file_name = described_class.send :remove_const, :FILE_NAME
described_class.const_set :FILE_NAME, File.join(dir, "cache.yml")
write_cache_file "---"
example.run
described_class.send :remove_const, :FILE_NAME
described_class.const_set :FILE_NAME, original_file_name
end
end
def write_cache_file(content)
File.write(described_class::FILE_NAME, content)
end
def read_cache_file
File.read described_class::FILE_NAME
end
let(:cache) { described_class.new }
it "loads cache" do
write_cache_file("---\nlatest-version: 42")
expect(cache.latest_version).to eq 42
end
describe "latest_version" do
it "autosaves cache on assignment" do
cache.latest_version = 42
expect(read_cache_file).to include "latest-version: 42"
end
it "return epoch start by default" do
expect(cache.last_version_check).to eq Time.at(0)
end
end
describe "last_version_check" do
it "resets to epoch start when non-time vallue is assigned" do
time = Time.now
cache.last_version_check = time
expect(cache.last_version_check).to eq time
cache.last_version_check = "nope"
expect(cache.last_version_check).to eq Time.at(0)
end
it "autosaves on assignment" do
time = Time.now
cache.last_version_check = time
expect(read_cache_file).to include "last-version-check: #{time.strftime "%F %T.%N %:z"}"
end
end
describe "outdated" do
it "returns false by default" do
expect(cache.outdated).to eq false
end
it "autosaves on assignment" do
cache.outdated = true
expect(read_cache_file).to include "outdated: true"
end
it "converts assigned value to boolean" do
cache.outdated = 42
expect(cache.outdated).to eq false
end
it "is aliased as outdated?" do
cache.outdated = true
expect(cache.outdated).to eq true
expect(cache.outdated?).to eq true
cache.outdated = false
expect(cache.outdated).to eq false
expect(cache.outdated?).to eq false
end
end
end