| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2018-09-20 09:07:56 +01:00
										 |  |  |       before do | 
					
						
							| 
									
										
										
										
											2018-05-22 14:15:36 -04:00
										 |  |  |         expect(database).to receive(:get).with(keg_name).and_return("") | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "returns `true`" do | 
					
						
							|  |  |  |         expect(subject.keg_exists?).to be(true) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     context "`keg_name` does not exist in cache" do | 
					
						
							| 
									
										
										
										
											2018-09-20 09:07:56 +01:00
										 |  |  |       before do | 
					
						
							| 
									
										
										
										
											2018-05-22 14:15:36 -04:00
										 |  |  |         expect(database).to receive(:get).with(keg_name).and_return(nil) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "returns `false`" do | 
					
						
							|  |  |  |         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 | 
					
						
							| 
									
										
										
										
											2018-09-20 09:07:56 +01:00
										 |  |  |       before do | 
					
						
							| 
									
										
										
										
											2018-05-22 14:15:36 -04:00
										 |  |  |         expect(database).to receive(:get).with(keg_name).and_return(nil) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "returns a `Hash` of values" do | 
					
						
							| 
									
										
										
										
											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 |