spec/elephas/cache_spec.rb in elephas-0.1.0 vs spec/elephas/cache_spec.rb in elephas-1.0.0

- old
+ new

@@ -4,38 +4,105 @@ # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php. # require "spec_helper" -describe Elephas::Cache do - pending ".use" do +describe ::Elephas::Cache do + let(:entry) { ::Elephas::Entry.ensure("VALUE", ::Elephas::Cache.default_prefix + "[KEY]", {:ttl => 3600}) } + describe ".use" do + before(:each) do + ::Elephas::Cache.provider = Elephas::Providers::Hash.new + end + + it "should use the provider for reading the value" do + ::Elephas::Cache.provider.should_receive(:read) + ::Elephas::Cache.use("KEY") do "VALUE" end + end + + it "should skip the provider if requested to" do + ::Elephas::Cache.use("KEY", {:ttl => 0}) do "VALUE" end + ::Elephas::Cache.provider.should_not_receive(:read) + ::Elephas::Cache.use("KEY", {:force => true}) do "VALUE" end + ::Elephas::Cache.provider.should_not_receive(:read) + end + + it "should use the block for value computation" do + expect{ ::Elephas::Cache.use("KEY") do raise ArgumentError end }.to raise_error(ArgumentError) + end + + it "should not use the block if the value is valid" do + ::Elephas::Cache.use("KEY") do entry end + expect{ ::Elephas::Cache.use("KEY") do raise ArgumentError end }.not_to raise_error(ArgumentError) + end + + it "should store the value in the cache" do + ::Elephas::Cache.use("KEY") do entry end + expect(::Elephas::Cache.provider.read(entry.hash)).to eq(entry) + end + + it "should return the entire entry or only the value" do + ::Elephas::Cache.use("KEY") do "VALUE" end + + expect(::Elephas::Cache.use("KEY")).to eq("VALUE") + value = ::Elephas::Cache.use("KEY", {:as_entry => true}) + expect(value).to be_a(::Elephas::Entry) + expect(value.value).to eq("VALUE") + end end describe ".read" do it "should be forwarded to the provider" do - Elephas::Cache.provider.should_receive(:read) - Elephas::Cache.read("KEY") + ::Elephas::Cache.provider.should_receive(:read) + ::Elephas::Cache.read("KEY") end end describe ".write" do it "should be forwarded to the provider" do - Elephas::Cache.provider.should_receive(:write) - Elephas::Cache.write("KEY", "VALUE") + ::Elephas::Cache.provider.should_receive(:write) + ::Elephas::Cache.write("KEY", "VALUE") end end describe ".delete" do it "should be forwarded to the provider" do - Elephas::Cache.provider.should_receive(:delete) - Elephas::Cache.delete("KEY") + ::Elephas::Cache.provider.should_receive(:delete) + ::Elephas::Cache.delete("KEY") end end describe ".exists?" do it "should be forwarded to the provider" do - Elephas::Cache.provider.should_receive(:exists?) - Elephas::Cache.exists?("KEY") + ::Elephas::Cache.provider.should_receive(:exists?) + ::Elephas::Cache.exists?("KEY") + end + end + + describe "setup_options" do + it "should set good defaults for options" do + options_hashes = [ + nil, + "A", + {:ttl => 2.hour}, + {:force => true}, + {:as_entry => true}, + {:prefix => "prefix", :hash => "1f3caa3bd0b7ba49dc25f9445abdd4fed6fe65236681b392f0da251673885ea9"}, + {:hash => "hash"} + ] + + reference_hashes = [ + {:key => "KEY", :ttl => 1.hour * 1000, :force => false, :as_entry => false, :prefix => ::Elephas::Cache.default_prefix, :complete_key => "#{::Elephas::Cache.default_prefix}[KEY]", :hash => "8a7675d5f1d9b163bb7bb4329c1a59ff18870fad4ed35a3a2e8d195a6f3c0332"}, + {:key => "KEY", :ttl => 1.hour * 1000, :force => false, :as_entry => false, :prefix => ::Elephas::Cache.default_prefix, :complete_key => "#{::Elephas::Cache.default_prefix}[KEY]", :hash => "8a7675d5f1d9b163bb7bb4329c1a59ff18870fad4ed35a3a2e8d195a6f3c0332"}, + {:key => "KEY", :ttl => 2.hour, :force => false, :as_entry => false, :prefix => ::Elephas::Cache.default_prefix, :complete_key => "#{::Elephas::Cache.default_prefix}[KEY]", :hash => "8a7675d5f1d9b163bb7bb4329c1a59ff18870fad4ed35a3a2e8d195a6f3c0332"}, + {:key => "KEY", :ttl => 1.hour * 1000, :force => true, :as_entry => false, :prefix => ::Elephas::Cache.default_prefix, :complete_key => "#{::Elephas::Cache.default_prefix}[KEY]", :hash => "8a7675d5f1d9b163bb7bb4329c1a59ff18870fad4ed35a3a2e8d195a6f3c0332"}, + {:key => "KEY", :ttl => 1.hour * 1000, :force => false, :as_entry => true, :prefix => ::Elephas::Cache.default_prefix, :complete_key => "#{::Elephas::Cache.default_prefix}[KEY]", :hash => "8a7675d5f1d9b163bb7bb4329c1a59ff18870fad4ed35a3a2e8d195a6f3c0332"}, + {:key => "KEY", :ttl => 1.hour * 1000, :force => false, :as_entry => false, :prefix => "prefix", :complete_key => "prefix[KEY]", :hash => "1f3caa3bd0b7ba49dc25f9445abdd4fed6fe65236681b392f0da251673885ea9"}, + {:key => "KEY", :ttl => 1.hour * 1000, :force => false, :as_entry => false, :prefix => ::Elephas::Cache.default_prefix, :complete_key => "#{::Elephas::Cache.default_prefix}[KEY]", :hash => "hash"} + ] + + options_hashes.each_with_index do |options, i| + expect(::Elephas::Cache.setup_options(options, "KEY")).to eq(reference_hashes[i]) + end end end end \ No newline at end of file