spec/transactions_spec.rb in fakeredis-0.4.3 vs spec/transactions_spec.rb in fakeredis-0.5.0
- old
+ new
@@ -1,19 +1,84 @@
require 'spec_helper'
module FakeRedis
describe "TransactionsMethods" do
- before(:each) do
+ before(:all) do
@client = Redis.new
end
- it "should mark the start of a transaction block" do
- transaction = @client.multi do
- @client.set("key1", "1")
- @client.set("key2", "2")
- @client.mget("key1", "key2")
+ before(:each) do
+ @client.discard rescue nil
+ end
+
+ context '#multi' do
+ it "should respond with 'OK'" do
+ @client.multi.should == 'OK'
end
- transaction.should be == ["OK", "OK", ["1", "2"]]
+ it "should forbid nesting" do
+ @client.multi
+ lambda{@client.multi}.should raise_error(Redis::CommandError)
+ end
+
+ it "should mark the start of a transaction block" do
+ transaction = @client.multi do |multi|
+ multi.set("key1", "1")
+ multi.set("key2", "2")
+ multi.expire("key1", 123)
+ multi.mget("key1", "key2")
+ end
+
+ transaction.should be == ["OK", "OK", true, ["1", "2"]]
+ end
+ end
+
+ context '#discard' do
+ it "should responde with 'OK' after #multi" do
+ @client.multi
+ @client.discard.should == 'OK'
+ end
+
+ it "can't be run outside of #multi/#exec" do
+ lambda{@client.discard}.should raise_error(Redis::CommandError)
+ end
+ end
+
+ context '#exec' do
+ it "can't be run outside of #multi" do
+ lambda{@client.exec}.should raise_error(Redis::CommandError)
+ end
+ end
+
+ context 'saving up commands for later' do
+ before(:each) do
+ @client.multi
+ @string = 'fake-redis-test:string'
+ @list = 'fake-redis-test:list'
+ end
+
+ it "makes commands respond with 'QUEUED'" do
+ @client.set(@string, 'string').should == 'QUEUED'
+ @client.lpush(@list, 'list').should == 'QUEUED'
+ end
+
+ it "gives you the commands' responses when you call #exec" do
+ @client.set(@string, 'string')
+ @client.lpush(@list, 'list')
+ @client.lpush(@list, 'list')
+
+ @client.exec.should == ['OK', 1, 2]
+ end
+
+ it "does not raise exceptions, but rather puts them in #exec's response" do
+ @client.set(@string, 'string')
+ @client.lpush(@string, 'oops!')
+ @client.lpush(@list, 'list')
+
+ responses = @client.exec
+ responses[0].should == 'OK'
+ responses[1].should be_a(RuntimeError)
+ responses[2].should == 1
+ end
end
end
end