spec/redis_spec.rb in redis-0.1.2 vs spec/redis_spec.rb in redis-0.2.0

- old
+ new

@@ -428,30 +428,39 @@ @r['dog:4:breed'] = 'terrier' @r.rpush 'dogs', 4 @r.sort('dogs', :get => ['dog:*:name', 'dog:*:breed'], :limit => [0,1]).should == ['louie', 'mutt'] @r.sort('dogs', :get => ['dog:*:name', 'dog:*:breed'], :limit => [0,1], :order => 'desc alpha').should == ['taj', 'terrier'] end + + it "should be able to store a SORT result" do + @r.rpush 'colors', 'red' + @r.rpush 'colors', 'yellow' + @r.rpush 'colors', 'orange' + @r.rpush 'colors', 'green' + @r.sort('colors', :limit => [1,2], :order => 'desc alpha', :store => 'sorted.colors') + @r.lrange('sorted.colors', 0, -1).should == ['red', 'orange'] + end # it "should be able count the members of a zset" do @r.set_add "set", 'key1' @r.set_add "set", 'key2' @r.zset_add 'zset', 1, 'set' @r.zset_count('zset').should == 1 @r.delete('set') @r.delete('zset') end - # + # it "should be able add members to a zset" do @r.set_add "set", 'key1' @r.set_add "set", 'key2' @r.zset_add 'zset', 1, 'set' @r.zset_range('zset', 0, 1).should == ['set'] @r.zset_count('zset').should == 1 @r.delete('set') @r.delete('zset') end - # + # it "should be able delete members to a zset" do @r.set_add "set", 'key1' @r.set_add "set", 'key2' @r.type?('set').should == "set" @r.set_add "set2", 'key3' @@ -465,11 +474,11 @@ @r.zset_count('zset').should == 1 @r.delete('set') @r.delete('set2') @r.delete('zset') end - # + # it "should be able to get a range of values from a zset" do @r.set_add "set", 'key1' @r.set_add "set", 'key2' @r.set_add "set2", 'key3' @r.set_add "set2", 'key4' @@ -485,11 +494,11 @@ @r.delete('set') @r.delete('set2') @r.delete('set3') @r.delete('zset') end - # + # it "should be able to get a reverse range of values from a zset" do @r.set_add "set", 'key1' @r.set_add "set", 'key2' @r.set_add "set2", 'key3' @r.set_add "set2", 'key4' @@ -505,11 +514,11 @@ @r.delete('set') @r.delete('set2') @r.delete('set3') @r.delete('zset') end - # + # it "should be able to get a range by score of values from a zset" do @r.set_add "set", 'key1' @r.set_add "set", 'key2' @r.set_add "set2", 'key3' @r.set_add "set2", 'key4' @@ -628,20 +637,22 @@ it "should raise error when invoke SYNC" do lambda { @r.sync }.should raise_error end it "should handle multiple servers" do - require 'dist_redis' + require 'redis/dist_redis' @r = DistRedis.new(:hosts=> ['localhost:6379', '127.0.0.1:6379'], :db => 15) 100.times do |idx| @r[idx] = "foo#{idx}" end 100.times do |idx| @r[idx].should == "foo#{idx}" end + + @r.keys('*').sort.first.should == "0" end it "should be able to pipeline writes" do @r.pipelined do |pipeline| pipeline.lpush 'list', "hello" @@ -663,6 +674,79 @@ r.stub!(:connect_to) r.should_receive(:call_command).with(['auth', 'secret']) r.connect_to_server end + it "should run MULTI without a block" do + @r.multi + @r.get("key1").should == "QUEUED" + @r.discard + end + + it "should run MULTI/EXEC with a block" do + @r.multi do + @r.set "key1", "value1" + end + + @r.get("key1").should == "value1" + + begin + @r.multi do + @r.set "key2", "value2" + raise "Some error" + @r.set "key3", "value3" + end + rescue + end + + @r.get("key2").should be_nil + @r.get("key3").should be_nil + end + + it "should yield the Redis object when using #multi with a block" do + @r.multi do |multi| + multi.set "key1", "value1" + end + + @r.get("key1").should == "value1" + end + + it "can set and get hash values" do + @r.hset("rush", "signals", "1982").should be_true + @r.hexists("rush", "signals").should be_true + @r.hget("rush", "signals").should == "1982" + end + + it "can delete hash values" do + @r.hset("rush", "YYZ", "1981") + @r.hdel("rush", "YYZ").should be_true + @r.hexists("rush", "YYZ").should be_false + end + + describe "with some hash values" do + before(:each) do + @r.hset("rush", "permanent waves", "1980") + @r.hset("rush", "moving pictures", "1981") + @r.hset("rush", "signals", "1982") + end + + it "can get the length of the hash" do + @r.hlen("rush").should == 3 + @r.hlen("yyz").should be_zero + end + + it "can get the keys and values of the hash" do + @r.hkeys("rush").should == ["permanent waves", "moving pictures", "signals"] + @r.hvals("rush").should == %w[1980 1981 1982] + @r.hvals("yyz").should be_empty + end + + it "returns a hash for HGETALL" do + @r.hgetall("rush").should == { + "permanent waves" => "1980", + "moving pictures" => "1981", + "signals" => "1982" + } + @r.hgetall("yyz").should == {} + end + end end