/
zadd_spec.rb
129 lines (104 loc) · 3.91 KB
/
zadd_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
require 'spec_helper'
describe '#zadd(key, score, member)' do
before { @key = 'mock-redis-test:zadd' }
it "returns true if member wasn't present in the set" do
@redises.zadd(@key, 1, 'foo').should == true
end
it 'returns false if member was present in the set' do
@redises.zadd(@key, 1, 'foo')
@redises.zadd(@key, 1, 'foo').should == false
end
it 'adds member to the set' do
@redises.zadd(@key, 1, 'foo')
@redises.zrange(@key, 0, -1).should == ['foo']
end
it 'treats integer members as strings' do
member = 11
@redises.zadd(@key, 1, member)
@redises.zrange(@key, 0, -1).should == [member.to_s]
end
it 'allows scores to be set to Float::INFINITY' do
member = '1'
@redises.zadd(@key, Float::INFINITY, member)
@redises.zrange(@key, 0, -1).should == [member]
end
it 'updates the score' do
@redises.zadd(@key, 1, 'foo')
@redises.zadd(@key, 2, 'foo')
@redises.zscore(@key, 'foo').should == 2.0
end
it 'with XX option command do nothing if element not exist' do
@redises.zadd(@key, 1, 'foo')
@redises.zadd(@key, 2, 'bar', xx: true)
@redises.zrange(@key, 0, -1).should_not include 'bar'
end
it 'with XX option command update index on exist element' do
@redises.zadd(@key, 1, 'foo')
@redises.zadd(@key, 2, 'foo', xx: true)
@redises.zscore(@key, 'foo').should == 2.0
end
it 'with XX option and multiple elements command update index on exist element' do
@redises.zadd(@key, 1, 'foo')
added_count = @redises.zadd(@key, [[2, 'foo'], [2, 'bar']], xx: true)
added_count.should == 0
@redises.zscore(@key, 'foo').should == 2.0
@redises.zrange(@key, 0, -1).should_not include 'bar'
end
it "with NX option don't update current element" do
@redises.zadd(@key, 1, 'foo')
@redises.zadd(@key, 2, 'foo', nx: true)
@redises.zscore(@key, 'foo').should == 1.0
end
it 'with NX option create new element' do
@redises.zadd(@key, 1, 'foo')
@redises.zadd(@key, 2, 'bar', nx: true)
@redises.zrange(@key, 0, -1).should include 'bar'
end
it 'with NX option and multiple elements command only create element' do
@redises.zadd(@key, 1, 'foo')
added_count = @redises.zadd(@key, [[2, 'foo'], [2, 'bar']], nx: true)
added_count.should == 1
@redises.zscore(@key, 'bar').should == 2.0
@redises.zrange(@key, 0, -1).should eq %w[foo bar]
end
it 'XX and NX options in same time raise error' do
lambda do
@redises.zadd(@key, 1, 'foo', nx: true, xx: true)
end.should raise_error(Redis::CommandError)
end
it 'with INCR is act like zincrby' do
@redises.zadd(@key, 10, 'bert', incr: true).should == 10.0
@redises.zadd(@key, 3, 'bert', incr: true).should == 13.0
end
it 'with INCR and XX not create element' do
@redises.zadd(@key, 10, 'bert', xx: true, incr: true).should be_nil
end
it 'with INCR and XX increase score for exist element' do
@redises.zadd(@key, 2, 'bert')
@redises.zadd(@key, 10, 'bert', xx: true, incr: true).should == 12.0
end
it 'with INCR and NX create element with score' do
@redises.zadd(@key, 11, 'bert', nx: true, incr: true).should == 11.0
end
it 'with INCR and NX not update element' do
@redises.zadd(@key, 1, 'bert')
@redises.zadd(@key, 10, 'bert', nx: true, incr: true).should be_nil
end
it 'with INCR with variable number of arguments raise error' do
lambda do
@redises.zadd(@key, [[1, 'one'], [2, 'two']], incr: true)
end.should raise_error(Redis::CommandError)
end
it 'supports a variable number of arguments' do
@redises.zadd(@key, [[1, 'one'], [2, 'two']])
@redises.zadd(@key, [[3, 'three']])
@redises.zrange(@key, 0, -1).should == %w[one two three]
end
it 'raises an error if an empty array is given' do
lambda do
@redises.zadd(@key, [])
end.should raise_error(Redis::CommandError)
end
it_should_behave_like 'arg 1 is a score'
it_should_behave_like 'a zset-only command'
end