2020-10-10 14:16:11 +02:00
|
|
|
# typed: false
|
2019-04-19 15:38:03 +09:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2018-05-22 14:15:36 -04:00
|
|
|
require "linkage_cache_store"
|
|
|
|
|
|
|
|
describe LinkageCacheStore do
|
2018-09-20 09:07:56 +01:00
|
|
|
subject { described_class.new(keg_name, database) }
|
|
|
|
|
2018-05-22 14:15:36 -04:00
|
|
|
let(:keg_name) { "keg_name" }
|
|
|
|
let(:database) { double("database") }
|
|
|
|
|
|
|
|
describe "#keg_exists?" do
|
|
|
|
context "`keg_name` exists in cache" do
|
|
|
|
it "returns `true`" do
|
2019-03-28 19:16:56 +00:00
|
|
|
expect(database).to receive(:get).with(keg_name).and_return("")
|
2018-05-22 14:15:36 -04:00
|
|
|
expect(subject.keg_exists?).to be(true)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "`keg_name` does not exist in cache" do
|
|
|
|
it "returns `false`" do
|
2019-03-28 19:16:56 +00:00
|
|
|
expect(database).to receive(:get).with(keg_name).and_return(nil)
|
2018-05-22 14:15:36 -04:00
|
|
|
expect(subject.keg_exists?).to be(false)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#update!" do
|
|
|
|
context "a `value` is a `Hash`" do
|
|
|
|
it "sets the cache for the `keg_name`" do
|
|
|
|
expect(database).to receive(:set).with(keg_name, anything)
|
2018-06-01 13:26:45 +01:00
|
|
|
subject.update!(keg_files_dylibs: { key: ["value"] })
|
2018-05-22 14:15:36 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-06-01 13:26:45 +01:00
|
|
|
context "a `value` is not a `Hash`" do
|
|
|
|
it "raises a `TypeError` if a `value` is not a `Hash`" do
|
|
|
|
expect { subject.update!(a_value: ["value"]) }.to raise_error(TypeError)
|
2018-05-22 14:15:36 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-10-13 08:22:51 -07:00
|
|
|
describe "#delete!" do
|
2018-05-22 14:15:36 -04:00
|
|
|
it "calls `delete` on the `database` with `keg_name` as parameter" do
|
|
|
|
expect(database).to receive(:delete).with(keg_name)
|
2018-10-13 08:22:51 -07:00
|
|
|
subject.delete!
|
2018-05-22 14:15:36 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-10-13 08:22:51 -07:00
|
|
|
describe "#fetch" do
|
2018-05-22 14:15:36 -04:00
|
|
|
context "`HASH_LINKAGE_TYPES.include?(type)`" do
|
|
|
|
it "returns a `Hash` of values" do
|
2019-03-28 19:16:56 +00:00
|
|
|
expect(database).to receive(:get).with(keg_name).and_return(nil)
|
2018-10-13 08:22:51 -07:00
|
|
|
expect(subject.fetch(:keg_files_dylibs)).to be_an_instance_of(Hash)
|
2018-05-22 14:15:36 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-06-01 13:26:45 +01:00
|
|
|
context "`type` not in `HASH_LINKAGE_TYPES`" do
|
2018-05-22 14:15:36 -04:00
|
|
|
it "raises a `TypeError` if the `type` is not supported" do
|
2018-10-13 08:22:51 -07:00
|
|
|
expect { subject.fetch(:bad_type) }.to raise_error(TypeError)
|
2018-05-22 14:15:36 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|