fakeredis 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,7 +11,7 @@ module FakeRedis
11
11
  end
12
12
 
13
13
  it 'raises an argument error when passed unsupported operation' do
14
- lambda { @client.bitop("meh", "dest1", "key1") }.should raise_error(Redis::CommandError)
14
+ expect { @client.bitop("meh", "dest1", "key1") }.to raise_error(Redis::CommandError)
15
15
  end
16
16
 
17
17
  describe "or" do
@@ -28,22 +28,22 @@ module FakeRedis
28
28
  @client.setbit("key2", 2, 0)
29
29
  @client.setbit("key2", 3, 0)
30
30
 
31
- @client.bitop("or", "dest1", "key1", "key2").should be == 1
32
- @client.bitcount("dest1").should be == 3
33
- @client.getbit("dest1", 0).should be == 1
34
- @client.getbit("dest1", 1).should be == 1
35
- @client.getbit("dest1", 2).should be == 1
36
- @client.getbit("dest1", 3).should be == 0
31
+ expect(@client.bitop("or", "dest1", "key1", "key2")).to eq(1)
32
+ expect(@client.bitcount("dest1")).to eq(3)
33
+ expect(@client.getbit("dest1", 0)).to eq(1)
34
+ expect(@client.getbit("dest1", 1)).to eq(1)
35
+ expect(@client.getbit("dest1", 2)).to eq(1)
36
+ expect(@client.getbit("dest1", 3)).to eq(0)
37
37
  end
38
38
 
39
39
  it "should apply bitwise or operation with empty values" do
40
40
  @client.setbit("key1", 1, 1)
41
41
 
42
- @client.bitop("or", "dest1", "key1", "nothing_here1", "nothing_here2").should be == 1
43
- @client.bitcount("dest1").should be == 1
44
- @client.getbit("dest1", 0).should be == 0
45
- @client.getbit("dest1", 1).should be == 1
46
- @client.getbit("dest1", 2).should be == 0
42
+ expect(@client.bitop("or", "dest1", "key1", "nothing_here1", "nothing_here2")).to eq(1)
43
+ expect(@client.bitcount("dest1")).to eq(1)
44
+ expect(@client.getbit("dest1", 0)).to eq(0)
45
+ expect(@client.getbit("dest1", 1)).to eq(1)
46
+ expect(@client.getbit("dest1", 2)).to eq(0)
47
47
  end
48
48
 
49
49
  it "should apply bitwise or operation with multiple keys" do
@@ -56,16 +56,16 @@ module FakeRedis
56
56
  @client.setbit("key3", 13, 1)
57
57
  @client.setbit("key3", 15, 1)
58
58
 
59
- @client.bitop("or", "dest1", "key1", "key2", "key3").should be == 2
60
- @client.bitcount("dest1").should be == 6
61
- @client.getbit("dest1", 1).should be == 1
62
- @client.getbit("dest1", 3).should be == 1
63
- @client.getbit("dest1", 5).should be == 1
64
- @client.getbit("dest1", 10).should be == 1
65
- @client.getbit("dest1", 13).should be == 1
66
- @client.getbit("dest1", 15).should be == 1
67
- @client.getbit("dest1", 2).should be == 0
68
- @client.getbit("dest1", 12).should be == 0
59
+ expect(@client.bitop("or", "dest1", "key1", "key2", "key3")).to eq(2)
60
+ expect(@client.bitcount("dest1")).to eq(6)
61
+ expect(@client.getbit("dest1", 1)).to eq(1)
62
+ expect(@client.getbit("dest1", 3)).to eq(1)
63
+ expect(@client.getbit("dest1", 5)).to eq(1)
64
+ expect(@client.getbit("dest1", 10)).to eq(1)
65
+ expect(@client.getbit("dest1", 13)).to eq(1)
66
+ expect(@client.getbit("dest1", 15)).to eq(1)
67
+ expect(@client.getbit("dest1", 2)).to eq(0)
68
+ expect(@client.getbit("dest1", 12)).to eq(0)
69
69
  end
70
70
  end
71
71
 
@@ -81,21 +81,21 @@ module FakeRedis
81
81
  @client.setbit("key2", 1, 1)
82
82
  @client.setbit("key2", 2, 1)
83
83
 
84
- @client.bitop("and", "dest1", "key1", "key2").should be == 1
85
- @client.bitcount("dest1").should be == 1
86
- @client.getbit("dest1", 0).should be == 0
87
- @client.getbit("dest1", 1).should be == 1
88
- @client.getbit("dest1", 2).should be == 0
84
+ expect(@client.bitop("and", "dest1", "key1", "key2")).to eq(1)
85
+ expect(@client.bitcount("dest1")).to eq(1)
86
+ expect(@client.getbit("dest1", 0)).to eq(0)
87
+ expect(@client.getbit("dest1", 1)).to eq(1)
88
+ expect(@client.getbit("dest1", 2)).to eq(0)
89
89
  end
90
90
 
91
91
  it "should apply bitwise and operation with empty values" do
92
92
  @client.setbit("key1", 1, 1)
93
93
 
94
- @client.bitop("and", "dest1", "key1", "nothing_here").should be == 1
95
- @client.bitcount("dest1").should be == 1
96
- @client.getbit("dest1", 0).should be == 0
97
- @client.getbit("dest1", 1).should be == 1
98
- @client.getbit("dest1", 2).should be == 0
94
+ expect(@client.bitop("and", "dest1", "key1", "nothing_here")).to eq(1)
95
+ expect(@client.bitcount("dest1")).to eq(1)
96
+ expect(@client.getbit("dest1", 0)).to eq(0)
97
+ expect(@client.getbit("dest1", 1)).to eq(1)
98
+ expect(@client.getbit("dest1", 2)).to eq(0)
99
99
  end
100
100
 
101
101
  it "should apply bitwise and operation with multiple keys" do
@@ -114,14 +114,14 @@ module FakeRedis
114
114
  @client.setbit("key3", 5, 1)
115
115
  @client.setbit("key3", 6, 1)
116
116
 
117
- @client.bitop("and", "dest1", "key1", "key2", "key3").should be == 1
118
- @client.bitcount("dest1").should be == 2
119
- @client.getbit("dest1", 1).should be == 0
120
- @client.getbit("dest1", 2).should be == 1
121
- @client.getbit("dest1", 3).should be == 0
122
- @client.getbit("dest1", 4).should be == 1
123
- @client.getbit("dest1", 5).should be == 0
124
- @client.getbit("dest1", 6).should be == 0
117
+ expect(@client.bitop("and", "dest1", "key1", "key2", "key3")).to eq(1)
118
+ expect(@client.bitcount("dest1")).to eq(2)
119
+ expect(@client.getbit("dest1", 1)).to eq(0)
120
+ expect(@client.getbit("dest1", 2)).to eq(1)
121
+ expect(@client.getbit("dest1", 3)).to eq(0)
122
+ expect(@client.getbit("dest1", 4)).to eq(1)
123
+ expect(@client.getbit("dest1", 5)).to eq(0)
124
+ expect(@client.getbit("dest1", 6)).to eq(0)
125
125
  end
126
126
  end
127
127
 
@@ -139,22 +139,22 @@ module FakeRedis
139
139
  @client.setbit("key2", 2, 1)
140
140
  @client.setbit("key2", 3, 0)
141
141
 
142
- @client.bitop("xor", "dest1", "key1", "key2").should be == 1
143
- @client.bitcount("dest1").should be == 2
144
- @client.getbit("dest1", 0).should be == 1
145
- @client.getbit("dest1", 1).should be == 0
146
- @client.getbit("dest1", 2).should be == 1
147
- @client.getbit("dest1", 3).should be == 0
142
+ expect(@client.bitop("xor", "dest1", "key1", "key2")).to eq(1)
143
+ expect(@client.bitcount("dest1")).to eq(2)
144
+ expect(@client.getbit("dest1", 0)).to eq(1)
145
+ expect(@client.getbit("dest1", 1)).to eq(0)
146
+ expect(@client.getbit("dest1", 2)).to eq(1)
147
+ expect(@client.getbit("dest1", 3)).to eq(0)
148
148
  end
149
149
 
150
150
  it "should apply bitwise xor operation with empty values" do
151
151
  @client.setbit("key1", 1, 1)
152
152
 
153
- @client.bitop("xor", "dest1", "key1", "nothing_here1", "nothing_here2").should be == 1
154
- @client.bitcount("dest1").should be == 1
155
- @client.getbit("dest1", 0).should be == 0
156
- @client.getbit("dest1", 1).should be == 1
157
- @client.getbit("dest1", 2).should be == 0
153
+ expect(@client.bitop("xor", "dest1", "key1", "nothing_here1", "nothing_here2")).to eq(1)
154
+ expect(@client.bitcount("dest1")).to eq(1)
155
+ expect(@client.getbit("dest1", 0)).to eq(0)
156
+ expect(@client.getbit("dest1", 1)).to eq(1)
157
+ expect(@client.getbit("dest1", 2)).to eq(0)
158
158
  end
159
159
 
160
160
  it "should apply bitwise xor operation with multiple keys" do
@@ -168,24 +168,24 @@ module FakeRedis
168
168
  @client.setbit("key2", 4, 1)
169
169
  @client.setbit("key2", 6, 1)
170
170
 
171
- @client.bitop("xor", "dest1", "key1", "key2").should be == 1
172
- @client.bitcount("dest1").should be == 4
173
- @client.getbit("dest1", 1).should be == 1
174
- @client.getbit("dest1", 2).should be == 1
175
- @client.getbit("dest1", 3).should be == 0
176
- @client.getbit("dest1", 4).should be == 1
177
- @client.getbit("dest1", 5).should be == 1
178
- @client.getbit("dest1", 6).should be == 0
171
+ expect(@client.bitop("xor", "dest1", "key1", "key2")).to eq(1)
172
+ expect(@client.bitcount("dest1")).to eq(4)
173
+ expect(@client.getbit("dest1", 1)).to eq(1)
174
+ expect(@client.getbit("dest1", 2)).to eq(1)
175
+ expect(@client.getbit("dest1", 3)).to eq(0)
176
+ expect(@client.getbit("dest1", 4)).to eq(1)
177
+ expect(@client.getbit("dest1", 5)).to eq(1)
178
+ expect(@client.getbit("dest1", 6)).to eq(0)
179
179
  end
180
180
  end
181
181
 
182
182
  describe "not" do
183
183
  it 'raises an argument error when not passed any keys' do
184
- lambda { @client.bitop("not", "destkey") }.should raise_error(Redis::CommandError)
184
+ expect { @client.bitop("not", "destkey") }.to raise_error(Redis::CommandError)
185
185
  end
186
186
 
187
187
  it 'raises an argument error when not passed too many keys' do
188
- lambda { @client.bitop("not", "destkey", "key1", "key2") }.should raise_error(Redis::CommandError)
188
+ expect { @client.bitop("not", "destkey", "key1", "key2") }.to raise_error(Redis::CommandError)
189
189
  end
190
190
 
191
191
  it "should apply bitwise negation operation" do
@@ -193,16 +193,16 @@ module FakeRedis
193
193
  @client.setbit("key1", 3, 1)
194
194
  @client.setbit("key1", 5, 1)
195
195
 
196
- @client.bitop("not", "dest1", "key1").should be == 1
197
- @client.bitcount("dest1").should be == 5
198
- @client.getbit("dest1", 0).should be == 1
199
- @client.getbit("dest1", 1).should be == 0
200
- @client.getbit("dest1", 2).should be == 1
201
- @client.getbit("dest1", 3).should be == 0
202
- @client.getbit("dest1", 4).should be == 1
203
- @client.getbit("dest1", 5).should be == 0
204
- @client.getbit("dest1", 6).should be == 1
205
- @client.getbit("dest1", 7).should be == 1
196
+ expect(@client.bitop("not", "dest1", "key1")).to eq(1)
197
+ expect(@client.bitcount("dest1")).to eq(5)
198
+ expect(@client.getbit("dest1", 0)).to eq(1)
199
+ expect(@client.getbit("dest1", 1)).to eq(0)
200
+ expect(@client.getbit("dest1", 2)).to eq(1)
201
+ expect(@client.getbit("dest1", 3)).to eq(0)
202
+ expect(@client.getbit("dest1", 4)).to eq(1)
203
+ expect(@client.getbit("dest1", 5)).to eq(0)
204
+ expect(@client.getbit("dest1", 6)).to eq(1)
205
+ expect(@client.getbit("dest1", 7)).to eq(1)
206
206
  end
207
207
  end
208
208
  end
@@ -18,4 +18,56 @@ describe FakeRedis do
18
18
  expect(described_class.enabled?).to be_falsy
19
19
  end
20
20
  end
21
+
22
+ describe '.disabling' do
23
+ context 'FakeRedis is enabled' do
24
+ before { described_class.enable }
25
+
26
+ it 'in memory connection' do
27
+ described_class.disabling do
28
+ expect(described_class.enabled?).to be_falsy
29
+ end
30
+
31
+ expect(described_class.enabled?).to be_truthy
32
+ end
33
+ end
34
+
35
+ context 'FakeRedis is disabled' do
36
+ before { described_class.disable }
37
+
38
+ it 'in memory connection' do
39
+ described_class.disabling do
40
+ expect(described_class.enabled?).to be_falsy
41
+ end
42
+
43
+ expect(described_class.enabled?).to be_falsy
44
+ end
45
+ end
46
+ end
47
+
48
+ describe '.enabling' do
49
+ context 'FakeRedis is enabled' do
50
+ before { described_class.enable }
51
+
52
+ it 'in memory connection' do
53
+ described_class.enabling do
54
+ expect(described_class.enabled?).to be_truthy
55
+ end
56
+
57
+ expect(described_class.enabled?).to be_truthy
58
+ end
59
+ end
60
+
61
+ context 'FakeRedis is disabled' do
62
+ before { described_class.disable }
63
+
64
+ it 'in memory connection' do
65
+ described_class.enabling do
66
+ expect(described_class.enabled?).to be_truthy
67
+ end
68
+
69
+ expect(described_class.enabled?).to be_falsy
70
+ end
71
+ end
72
+ end
21
73
  end
@@ -0,0 +1,164 @@
1
+ require "spec_helper"
2
+
3
+ module FakeRedis
4
+ describe "GeoMethods" do
5
+ before do
6
+ @client = Redis.new
7
+ end
8
+
9
+ describe "#geoadd" do
10
+ it "should raise when not enough arguments" do
11
+ expect { @client.geoadd("Sicily", []) }.to raise_error(Redis::CommandError, "ERR wrong number of arguments for 'geoadd' command")
12
+ expect { @client.geoadd("Sicily", [13.361389, 38.115556]) }.to raise_error(Redis::CommandError, "ERR wrong number of arguments for 'geoadd' command")
13
+ end
14
+
15
+ it "should add items to the set" do
16
+ added_items_count = add_sicily
17
+ expect(added_items_count).to eq(2)
18
+ end
19
+
20
+ it "should update existing items" do
21
+ @client.geoadd("Sicily", 13.361389, 38.115556, "Palermo")
22
+ added_items_count = @client.geoadd("Sicily", 13, 39, "Palermo", 15.087269, 37.502669, "Catania")
23
+ expect(added_items_count).to eq(1)
24
+ end
25
+ end
26
+
27
+ describe "#geodist" do
28
+ before do
29
+ add_sicily
30
+ end
31
+
32
+ it "should return destination between two elements" do
33
+ distance_in_meters = @client.geodist("Sicily", "Palermo", "Catania")
34
+ expect(distance_in_meters).to eq("166412.6051")
35
+
36
+ distance_in_feet = @client.geodist("Sicily", "Palermo", "Catania", "ft")
37
+ expect(distance_in_feet).to eq("545973.1137")
38
+ end
39
+
40
+ it "should raise for unknown unit name" do
41
+ expect {
42
+ @client.geodist("Sicily", "Palermo", "Catania", "unknown")
43
+ }.to raise_error(Redis::CommandError, "ERR unsupported unit provided. please use m, km, ft, mi")
44
+ end
45
+
46
+ it "should return nil when element is missing" do
47
+ expect(@client.geodist("Sicily", "Palermo", "Rome")).to be_nil
48
+ end
49
+ end
50
+
51
+ describe "#geohash" do
52
+ before do
53
+ add_sicily
54
+ end
55
+
56
+ it "should raise when not enough arguments" do
57
+ expect { @client.geohash("Sicily", []) }.to raise_error(Redis::CommandError, "ERR wrong number of arguments for 'geohash' command")
58
+ end
59
+
60
+ it "should return geohashes" do
61
+ geohash = @client.geohash("Sicily", "Palermo")
62
+ expect(geohash).to eq(["sqc8b49rny"])
63
+
64
+ geohashes = @client.geohash("Sicily", ["Palermo", "Catania"])
65
+ expect(geohashes).to eq(["sqc8b49rny", "sqdtr74hyu"])
66
+ end
67
+
68
+ it "should return nils for nonexistent elements" do
69
+ geohashes = @client.geohash("Sicily", ["Palermo", "Rome"])
70
+ expect(geohashes).to eq(["sqc8b49rny", nil])
71
+ end
72
+ end
73
+
74
+ describe "#geopos" do
75
+ it "should return positions (longitude, latitude) for elements" do
76
+ add_sicily
77
+ position = @client.geopos("Sicily", "Catania")
78
+ expect(position).to eq([["15.087269", "37.502669"]])
79
+
80
+ positions = @client.geopos("Sicily", ["Palermo", "Catania"])
81
+ expect(positions).to eq([["13.361389", "38.115556"], ["15.087269", "37.502669"]])
82
+ end
83
+
84
+ it "should return nil for nonexistent elements" do
85
+ expect(@client.geopos("nonexistent", "nonexistent2")).to be_nil
86
+ add_sicily
87
+
88
+ position = @client.geopos("Sicily", "Rome")
89
+ expect(position).to eq([nil])
90
+
91
+ positions = @client.geopos("Sicily", ["Rome", "Catania"])
92
+ expect(positions).to eq([nil, ["15.087269", "37.502669"]])
93
+ end
94
+ end
95
+
96
+ describe "#georadius" do
97
+ before do
98
+ add_sicily
99
+ end
100
+
101
+ it "should return members within specified radius" do
102
+ nearest_cities = @client.georadius("Sicily", 15, 37, 100, "km")
103
+ expect(nearest_cities).to eq(["Catania"])
104
+ end
105
+
106
+ it "should sort returned members" do
107
+ nearest_cities = @client.georadius("Sicily", 15, 37, 200, "km", sort: "asc")
108
+ expect(nearest_cities).to eq(["Catania", "Palermo"])
109
+
110
+ farthest_cities = @client.georadius("Sicily", 15, 37, 200, "km", sort: "desc")
111
+ expect(farthest_cities).to eq(["Palermo", "Catania"])
112
+ end
113
+
114
+ it "should return specified count of members" do
115
+ city = @client.georadius("Sicily", 15, 37, 200, "km", sort: "asc", count: 1)
116
+ expect(city).to eq(["Catania"])
117
+ end
118
+
119
+ it "should include additional info for members" do
120
+ cities = @client.georadius("Sicily", 15, 37, 200, "km", "WITHDIST")
121
+ expect(cities).to eq([["Palermo", "190.6009"], ["Catania", "56.4883"]])
122
+
123
+ cities = @client.georadius("Sicily", 15, 37, 200, "km", "WITHCOORD")
124
+ expect(cities).to eq [["Palermo", ["13.361389", "38.115556"]], ["Catania", ["15.087269", "37.502669"]]]
125
+
126
+ cities = @client.georadius("Sicily", 15, 37, 200, "km", "WITHDIST", "WITHCOORD")
127
+ expect(cities).to eq(
128
+ [["Palermo", "190.6009", ["13.361389", "38.115556"]],
129
+ ["Catania", "56.4883", ["15.087269", "37.502669"]]]
130
+ )
131
+ end
132
+ end
133
+
134
+ describe "#georadiusbymember" do
135
+ before do
136
+ add_sicily
137
+ end
138
+
139
+ it "should sort returned members" do
140
+ nearest_cities = @client.georadiusbymember("Sicily", "Catania", 200, "km", sort: "asc")
141
+ expect(nearest_cities).to eq(["Catania", "Palermo"])
142
+
143
+ farthest_cities = @client.georadiusbymember("Sicily", "Catania", 200, "km", sort: "desc")
144
+ expect(farthest_cities).to eq(["Palermo", "Catania"])
145
+ end
146
+
147
+ it "should limit number of returned members" do
148
+ city = @client.georadiusbymember("Sicily", "Catania", 100, "km", count: 1)
149
+ expect(city).to eq(["Catania"])
150
+ end
151
+
152
+ it "should include extra info if requested" do
153
+ city = @client.georadiusbymember("Sicily", "Catania", 200, "km", sort: :desc, options: :WITHDIST, count: 1)
154
+ expect(city).to eq([["Palermo", "166.4126"]])
155
+ end
156
+ end
157
+
158
+ private
159
+
160
+ def add_sicily
161
+ @client.geoadd("Sicily", 13.361389, 38.115556, "Palermo", 15.087269, 37.502669, "Catania")
162
+ end
163
+ end
164
+ end
@@ -108,6 +108,13 @@ module FakeRedis
108
108
  expect(@client.hlen("key1")).to eq(2)
109
109
  end
110
110
 
111
+ it "should get the string length of the value associated with field in a hash" do
112
+ @client.hset("key1", "i1", "val1")
113
+ expect(@client.hstrlen("key1", "i1")).to eq(4)
114
+ expect(@client.hstrlen("key1", "nonexistent")).to eq(0)
115
+ expect(@client.hstrlen("nonexistent", "field")).to eq(0)
116
+ end
117
+
111
118
  it "should get the values of all the given hash fields" do
112
119
  @client.hset("key1", "i1", "val1")
113
120
  @client.hset("key1", "i2", "val2")
@@ -122,6 +129,10 @@ module FakeRedis
122
129
  expect { @client.hmget("key1") }.to raise_error(Redis::CommandError)
123
130
  end
124
131
 
132
+ it "should throw an argument error when the list of keys you ask for is empty" do
133
+ expect { @client.hmget("key1", []) }.to raise_error(Redis::CommandError)
134
+ end
135
+
125
136
  it "should reject an empty list of values" do
126
137
  expect { @client.hmset("key") }.to raise_error(Redis::CommandError)
127
138
  expect(@client.exists("key")).to be false