mock_redis 0.36.0 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/README.md +1 -1
  4. data/lib/mock_redis/database.rb +1 -1
  5. data/lib/mock_redis/hash_methods.rb +1 -1
  6. data/lib/mock_redis/list_methods.rb +7 -2
  7. data/lib/mock_redis/multi_db_wrapper.rb +1 -1
  8. data/lib/mock_redis/pipelined_wrapper.rb +12 -14
  9. data/lib/mock_redis/set_methods.rb +6 -1
  10. data/lib/mock_redis/stream.rb +3 -3
  11. data/lib/mock_redis/string_methods.rb +3 -3
  12. data/lib/mock_redis/transaction_wrapper.rb +5 -7
  13. data/lib/mock_redis/utility_methods.rb +4 -2
  14. data/lib/mock_redis/version.rb +1 -1
  15. data/lib/mock_redis/zset.rb +4 -2
  16. data/lib/mock_redis/zset_methods.rb +3 -3
  17. data/lib/mock_redis.rb +1 -2
  18. metadata +19 -360
  19. data/.github/workflows/lint.yml +0 -31
  20. data/.github/workflows/tests.yml +0 -63
  21. data/.gitignore +0 -5
  22. data/.mailmap +0 -2
  23. data/.overcommit.yml +0 -21
  24. data/.rspec +0 -1
  25. data/.rubocop.yml +0 -148
  26. data/.rubocop_todo.yml +0 -35
  27. data/.simplecov +0 -4
  28. data/Gemfile +0 -13
  29. data/Rakefile +0 -2
  30. data/mock_redis.gemspec +0 -32
  31. data/spec/client_spec.rb +0 -36
  32. data/spec/cloning_spec.rb +0 -95
  33. data/spec/commands/append_spec.rb +0 -24
  34. data/spec/commands/auth_spec.rb +0 -7
  35. data/spec/commands/bgrewriteaof_spec.rb +0 -7
  36. data/spec/commands/bgsave_spec.rb +0 -7
  37. data/spec/commands/bitcount_spec.rb +0 -25
  38. data/spec/commands/bitfield_spec.rb +0 -169
  39. data/spec/commands/blmove_spec.rb +0 -52
  40. data/spec/commands/blpop_spec.rb +0 -53
  41. data/spec/commands/brpop_spec.rb +0 -59
  42. data/spec/commands/brpoplpush_spec.rb +0 -52
  43. data/spec/commands/connected_spec.rb +0 -7
  44. data/spec/commands/connection_spec.rb +0 -15
  45. data/spec/commands/dbsize_spec.rb +0 -18
  46. data/spec/commands/decr_spec.rb +0 -34
  47. data/spec/commands/decrby_spec.rb +0 -34
  48. data/spec/commands/del_spec.rb +0 -52
  49. data/spec/commands/disconnect_spec.rb +0 -7
  50. data/spec/commands/dump_spec.rb +0 -19
  51. data/spec/commands/echo_spec.rb +0 -11
  52. data/spec/commands/eval_spec.rb +0 -7
  53. data/spec/commands/evalsha_spec.rb +0 -10
  54. data/spec/commands/exists_spec.rb +0 -43
  55. data/spec/commands/expire_spec.rb +0 -111
  56. data/spec/commands/expireat_spec.rb +0 -47
  57. data/spec/commands/flushall_spec.rb +0 -38
  58. data/spec/commands/flushdb_spec.rb +0 -38
  59. data/spec/commands/future_spec.rb +0 -30
  60. data/spec/commands/geoadd_spec.rb +0 -58
  61. data/spec/commands/geodist_spec.rb +0 -118
  62. data/spec/commands/geohash_spec.rb +0 -52
  63. data/spec/commands/geopos_spec.rb +0 -55
  64. data/spec/commands/get_spec.rb +0 -31
  65. data/spec/commands/getbit_spec.rb +0 -34
  66. data/spec/commands/getdel.rb +0 -24
  67. data/spec/commands/getrange_spec.rb +0 -22
  68. data/spec/commands/getset_spec.rb +0 -23
  69. data/spec/commands/hdel_spec.rb +0 -77
  70. data/spec/commands/hexists_spec.rb +0 -27
  71. data/spec/commands/hget_spec.rb +0 -28
  72. data/spec/commands/hgetall_spec.rb +0 -32
  73. data/spec/commands/hincrby_spec.rb +0 -58
  74. data/spec/commands/hincrbyfloat_spec.rb +0 -58
  75. data/spec/commands/hkeys_spec.rb +0 -19
  76. data/spec/commands/hlen_spec.rb +0 -19
  77. data/spec/commands/hmget_spec.rb +0 -46
  78. data/spec/commands/hmset_spec.rb +0 -69
  79. data/spec/commands/hscan_each_spec.rb +0 -48
  80. data/spec/commands/hscan_spec.rb +0 -27
  81. data/spec/commands/hset_spec.rb +0 -42
  82. data/spec/commands/hsetnx_spec.rb +0 -44
  83. data/spec/commands/hvals_spec.rb +0 -19
  84. data/spec/commands/incr_spec.rb +0 -34
  85. data/spec/commands/incrby_spec.rb +0 -44
  86. data/spec/commands/incrbyfloat_spec.rb +0 -44
  87. data/spec/commands/info_spec.rb +0 -62
  88. data/spec/commands/keys_spec.rb +0 -139
  89. data/spec/commands/lastsave_spec.rb +0 -8
  90. data/spec/commands/lindex_spec.rb +0 -49
  91. data/spec/commands/linsert_spec.rb +0 -68
  92. data/spec/commands/llen_spec.rb +0 -16
  93. data/spec/commands/lmove_spec.rb +0 -72
  94. data/spec/commands/lpop_spec.rb +0 -35
  95. data/spec/commands/lpush_spec.rb +0 -43
  96. data/spec/commands/lpushx_spec.rb +0 -46
  97. data/spec/commands/lrange_spec.rb +0 -51
  98. data/spec/commands/lrem_spec.rb +0 -80
  99. data/spec/commands/lset_spec.rb +0 -43
  100. data/spec/commands/ltrim_spec.rb +0 -45
  101. data/spec/commands/mapped_hmget_spec.rb +0 -29
  102. data/spec/commands/mapped_hmset_spec.rb +0 -47
  103. data/spec/commands/mapped_mget_spec.rb +0 -22
  104. data/spec/commands/mapped_mset_spec.rb +0 -19
  105. data/spec/commands/mapped_msetnx_spec.rb +0 -26
  106. data/spec/commands/mget_spec.rb +0 -65
  107. data/spec/commands/move_spec.rb +0 -147
  108. data/spec/commands/mset_spec.rb +0 -43
  109. data/spec/commands/msetnx_spec.rb +0 -40
  110. data/spec/commands/persist_spec.rb +0 -48
  111. data/spec/commands/pexpire_spec.rb +0 -86
  112. data/spec/commands/pexpireat_spec.rb +0 -48
  113. data/spec/commands/ping_spec.rb +0 -11
  114. data/spec/commands/pipelined_spec.rb +0 -114
  115. data/spec/commands/psetex_spec.rb +0 -44
  116. data/spec/commands/pttl_spec.rb +0 -41
  117. data/spec/commands/quit_spec.rb +0 -7
  118. data/spec/commands/randomkey_spec.rb +0 -20
  119. data/spec/commands/rename_spec.rb +0 -42
  120. data/spec/commands/renamenx_spec.rb +0 -41
  121. data/spec/commands/restore_spec.rb +0 -47
  122. data/spec/commands/rpop_spec.rb +0 -35
  123. data/spec/commands/rpoplpush_spec.rb +0 -50
  124. data/spec/commands/rpush_spec.rb +0 -43
  125. data/spec/commands/rpushx_spec.rb +0 -46
  126. data/spec/commands/sadd_spec.rb +0 -45
  127. data/spec/commands/save_spec.rb +0 -7
  128. data/spec/commands/scan_each_spec.rb +0 -39
  129. data/spec/commands/scan_spec.rb +0 -64
  130. data/spec/commands/scard_spec.rb +0 -18
  131. data/spec/commands/script_spec.rb +0 -9
  132. data/spec/commands/sdiff_spec.rb +0 -47
  133. data/spec/commands/sdiffstore_spec.rb +0 -58
  134. data/spec/commands/select_spec.rb +0 -61
  135. data/spec/commands/set_spec.rb +0 -134
  136. data/spec/commands/setbit_spec.rb +0 -55
  137. data/spec/commands/setex_spec.rb +0 -38
  138. data/spec/commands/setnx_spec.rb +0 -25
  139. data/spec/commands/setrange_spec.rb +0 -30
  140. data/spec/commands/sinter_spec.rb +0 -39
  141. data/spec/commands/sinterstore_spec.rb +0 -53
  142. data/spec/commands/sismember_spec.rb +0 -29
  143. data/spec/commands/smembers_spec.rb +0 -28
  144. data/spec/commands/smismember_spec.rb +0 -34
  145. data/spec/commands/smove_spec.rb +0 -41
  146. data/spec/commands/sort_list_spec.rb +0 -21
  147. data/spec/commands/sort_set_spec.rb +0 -21
  148. data/spec/commands/sort_zset_spec.rb +0 -21
  149. data/spec/commands/spop_spec.rb +0 -40
  150. data/spec/commands/srandmember_spec.rb +0 -49
  151. data/spec/commands/srem_spec.rb +0 -45
  152. data/spec/commands/sscan_each_spec.rb +0 -48
  153. data/spec/commands/sscan_spec.rb +0 -39
  154. data/spec/commands/strlen_spec.rb +0 -18
  155. data/spec/commands/sunion_spec.rb +0 -42
  156. data/spec/commands/sunionstore_spec.rb +0 -59
  157. data/spec/commands/ttl_spec.rb +0 -40
  158. data/spec/commands/type_spec.rb +0 -36
  159. data/spec/commands/unwatch_spec.rb +0 -7
  160. data/spec/commands/watch_spec.rb +0 -21
  161. data/spec/commands/xadd_spec.rb +0 -122
  162. data/spec/commands/xlen_spec.rb +0 -22
  163. data/spec/commands/xrange_spec.rb +0 -164
  164. data/spec/commands/xread_spec.rb +0 -66
  165. data/spec/commands/xrevrange_spec.rb +0 -130
  166. data/spec/commands/xtrim_spec.rb +0 -36
  167. data/spec/commands/zadd_spec.rb +0 -129
  168. data/spec/commands/zcard_spec.rb +0 -19
  169. data/spec/commands/zcount_spec.rb +0 -39
  170. data/spec/commands/zincrby_spec.rb +0 -31
  171. data/spec/commands/zinterstore_spec.rb +0 -130
  172. data/spec/commands/zpopmax_spec.rb +0 -60
  173. data/spec/commands/zpopmin_spec.rb +0 -60
  174. data/spec/commands/zrange_spec.rb +0 -80
  175. data/spec/commands/zrangebyscore_spec.rb +0 -83
  176. data/spec/commands/zrank_spec.rb +0 -29
  177. data/spec/commands/zrem_spec.rb +0 -50
  178. data/spec/commands/zremrangebyrank_spec.rb +0 -27
  179. data/spec/commands/zremrangebyscore_spec.rb +0 -35
  180. data/spec/commands/zrevrange_spec.rb +0 -56
  181. data/spec/commands/zrevrangebyscore_spec.rb +0 -58
  182. data/spec/commands/zrevrank_spec.rb +0 -29
  183. data/spec/commands/zscan_each_spec.rb +0 -48
  184. data/spec/commands/zscan_spec.rb +0 -26
  185. data/spec/commands/zscore_spec.rb +0 -22
  186. data/spec/commands/zunionstore_spec.rb +0 -137
  187. data/spec/mock_redis_spec.rb +0 -93
  188. data/spec/spec_helper.rb +0 -74
  189. data/spec/support/redis_multiplexer.rb +0 -123
  190. data/spec/support/shared_examples/does_not_cleanup_empty_strings.rb +0 -14
  191. data/spec/support/shared_examples/only_operates_on_hashes.rb +0 -15
  192. data/spec/support/shared_examples/only_operates_on_lists.rb +0 -15
  193. data/spec/support/shared_examples/only_operates_on_sets.rb +0 -15
  194. data/spec/support/shared_examples/only_operates_on_strings.rb +0 -13
  195. data/spec/support/shared_examples/only_operates_on_zsets.rb +0 -59
  196. data/spec/support/shared_examples/sorts_enumerables.rb +0 -56
  197. data/spec/transactions_spec.rb +0 -163
@@ -1,64 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#scan' do
4
- subject { MockRedis::Database.new(self) }
5
-
6
- let(:count) { 10 }
7
- let(:match) { '*' }
8
-
9
- before do
10
- allow(subject).to receive_message_chain(:data, :keys).and_return(collection)
11
- end
12
-
13
- context 'when no keys are found' do
14
- let(:collection) { [] }
15
-
16
- it 'returns a 0 cursor and an empty collection' do
17
- expect(subject.scan(0, count: count, match: match)).to eq(['0', []])
18
- end
19
- end
20
-
21
- context 'when keys are found' do
22
- context 'when count is lower than collection size' do
23
- let(:collection) { Array.new(count * 2) { |i| "mock:key#{i}" } }
24
- let(:expected_first) { [count.to_s, collection[0...count]] }
25
- let(:expected_second) { ['0', collection[count..-1]] }
26
-
27
- it 'returns a the next cursor and the collection' do
28
- expect(subject.scan(0, count: count, match: match)).to eq(expected_first)
29
- end
30
-
31
- it 'returns the correct results of the next cursor' do
32
- expect(subject.scan(count, count: count, match: match)).to eq(expected_second)
33
- end
34
- end
35
-
36
- context 'when count is greater or equal than collection size' do
37
- let(:collection) { Array.new(count) { |i| "mock:key#{i}" } }
38
- let(:expected) { ['0', collection] }
39
-
40
- it 'returns a 0 cursor and the collection' do
41
- expect(subject.scan(0, count: count, match: match)).to eq(expected)
42
- end
43
- end
44
-
45
- context 'when cursor is greater than collection size' do
46
- let(:collection) { Array.new(count) { |i| "mock:key#{i}" } }
47
- let(:expected) { ['0', []] }
48
-
49
- it 'returns a 0 cursor and empty collection' do
50
- expect(subject.scan(20, count: count, match: match)).to eq(expected)
51
- end
52
- end
53
-
54
- context 'when giving a custom match filter' do
55
- let(:match) { 'mock:key*' }
56
- let(:collection) { %w[mock:key mock:key2 mock:otherkey] }
57
- let(:expected) { ['0', %w[mock:key mock:key2]] }
58
-
59
- it 'returns a 0 cursor and the filtered collection' do
60
- expect(subject.scan(0, count: count, match: match)).to eq(expected)
61
- end
62
- end
63
- end
64
- end
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#scard(key)' do
4
- before { @key = 'mock-redis-test:scard' }
5
-
6
- it 'returns 0 for an empty set' do
7
- @redises.scard(@key).should == 0
8
- end
9
-
10
- it 'returns the number of elements in the set' do
11
- @redises.sadd(@key, 'one')
12
- @redises.sadd(@key, 'two')
13
- @redises.sadd(@key, 'three')
14
- @redises.scard(@key).should == 3
15
- end
16
-
17
- it_should_behave_like 'a set-only command'
18
- end
@@ -1,9 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#script(subcommand, *args)' do
4
- before { @key = 'mock-redis-test:script' }
5
-
6
- it 'works with load subcommand' do
7
- expect { @redises.send_without_checking(:script, :load, 'return 1') }.to_not raise_error
8
- end
9
- end
@@ -1,47 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#sdiff(key [, key, ...])' do
4
- before do
5
- @numbers = 'mock-redis-test:sdiff:numbers'
6
- @evens = 'mock-redis-test:sdiff:odds'
7
- @primes = 'mock-redis-test:sdiff:primes'
8
-
9
- (1..10).each { |i| @redises.sadd(@numbers, i) }
10
- [2, 4, 6, 8, 10].each { |i| @redises.sadd(@evens, i) }
11
- [2, 3, 5, 7].each { |i| @redises.sadd(@primes, i) }
12
- end
13
-
14
- it 'returns the first set minus the second set' do
15
- @redises.sdiff(@numbers, @evens).should == %w[1 3 5 7 9]
16
- end
17
-
18
- it 'returns the first set minus all the other sets' do
19
- @redises.sdiff(@numbers, @evens, @primes).should == %w[1 9]
20
- end
21
-
22
- it 'treats missing keys as empty sets' do
23
- @redises.sdiff(@evens, 'mock-redis-test:nonesuch').should == %w[2 4 6 8 10]
24
- end
25
-
26
- it 'returns the first set when called with a single argument' do
27
- @redises.sdiff(@primes).should == %w[2 3 5 7]
28
- end
29
-
30
- it 'raises an error if given 0 arguments' do
31
- lambda do
32
- @redises.sdiff
33
- end.should raise_error(Redis::CommandError)
34
- end
35
-
36
- it 'raises an error if any argument is not a a set' do
37
- @redises.set('foo', 1)
38
-
39
- lambda do
40
- @redises.sdiff(@numbers, 'foo')
41
- end.should raise_error(Redis::CommandError)
42
-
43
- lambda do
44
- @redises.sdiff('foo', @numbers)
45
- end.should raise_error(Redis::CommandError)
46
- end
47
- end
@@ -1,58 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#sdiffstore(destination, key [, key, ...])' do
4
- before do
5
- @numbers = 'mock-redis-test:sdiffstore:numbers'
6
- @evens = 'mock-redis-test:sdiffstore:evens'
7
- @primes = 'mock-redis-test:sdiffstore:primes'
8
- @destination = 'mock-redis-test:sdiffstore:destination'
9
-
10
- (1..10).each { |i| @redises.sadd(@numbers, i) }
11
- [2, 4, 6, 8, 10].each { |i| @redises.sadd(@evens, i) }
12
- [2, 3, 5, 7].each { |i| @redises.sadd(@primes, i) }
13
- end
14
-
15
- it 'returns the number of elements in the resulting set' do
16
- @redises.sdiffstore(@destination, @numbers, @evens).should == 5
17
- end
18
-
19
- it 'stores the resulting set' do
20
- @redises.sdiffstore(@destination, @numbers, @evens)
21
- @redises.smembers(@destination).should == %w[9 7 5 3 1]
22
- end
23
-
24
- it 'does not store empty sets' do
25
- @redises.sdiffstore(@destination, @numbers, @numbers).should == 0
26
- @redises.get(@destination).should be_nil
27
- end
28
-
29
- it 'treats missing keys as empty sets' do
30
- @redises.sdiffstore(@destination, @evens, 'mock-redis-test:nonesuch')
31
- @redises.smembers(@destination).should == %w[10 8 6 4 2]
32
- end
33
-
34
- it 'removes existing elements in destination' do
35
- @redises.sadd(@destination, 42)
36
-
37
- @redises.sdiffstore(@destination, @primes)
38
- @redises.smembers(@destination).should == %w[7 5 3 2]
39
- end
40
-
41
- it 'raises an error if given 0 sets' do
42
- lambda do
43
- @redises.sdiffstore(@destination)
44
- end.should raise_error(Redis::CommandError)
45
- end
46
-
47
- it 'raises an error if any argument is not a a set' do
48
- @redises.set('mock-redis-test:notset', 1)
49
-
50
- lambda do
51
- @redises.sdiffstore(@destination, @numbers, 'mock-redis-test:notset')
52
- end.should raise_error(Redis::CommandError)
53
-
54
- lambda do
55
- @redises.sdiffstore(@destination, 'mock-redis-test:notset', @numbers)
56
- end.should raise_error(Redis::CommandError)
57
- end
58
- end
@@ -1,61 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#select(db)' do
4
- before { @key = 'mock-redis-test:select' }
5
-
6
- it "returns 'OK'" do
7
- @redises.select(0).should == 'OK'
8
- end
9
-
10
- it "treats '0' and 0 the same" do
11
- @redises.select('0')
12
- @redises.set(@key, 'foo')
13
- @redises.select(0)
14
- @redises.get(@key).should == 'foo'
15
- end
16
-
17
- it 'switches databases' do
18
- @redises.select(0)
19
- @redises.set(@key, 'foo')
20
-
21
- @redises.select(1)
22
- @redises.get(@key).should be_nil
23
-
24
- @redises.select(0)
25
- @redises.get(@key).should == 'foo'
26
- end
27
-
28
- context '[mock only]' do
29
- # Time dependence introduces a bit of nondeterminism here
30
- before do
31
- @now = Time.now
32
- Time.stub(:now).and_return(@now)
33
-
34
- @mock = @redises.mock
35
-
36
- @mock.select(0)
37
- @mock.set(@key, 1)
38
- @mock.expire(@key, 100)
39
-
40
- @mock.select(1)
41
- @mock.set(@key, 2)
42
- @mock.expire(@key, 200)
43
- end
44
-
45
- it 'keeps expire times per-db' do
46
- @mock.select(0)
47
- @mock.ttl(@key).should == 100
48
-
49
- @mock.select(1)
50
- @mock.ttl(@key).should == 200
51
- end
52
-
53
- it 'keeps expire times in miliseconds per-db' do
54
- @mock.select(0)
55
- (100_000 - 1000..100_000 + 1000).should cover(@mock.pttl(@key))
56
-
57
- @mock.select(1)
58
- (200_000 - 1000..200_000 + 1000).should cover(@mock.pttl(@key))
59
- end
60
- end
61
- end
@@ -1,134 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#set(key, value)' do
4
- let(:key) { 'mock-redis-test' }
5
-
6
- it "responds with 'OK'" do
7
- @redises.set('mock-redis-test', 1).should == 'OK'
8
- end
9
-
10
- context 'options' do
11
- it 'raises an error for EX seconds = 0' do
12
- expect do
13
- @redises.set('mock-redis-test', 1, ex: 0)
14
- end.to raise_error(Redis::CommandError, 'ERR invalid expire time in set')
15
- end
16
-
17
- it 'raises an error for PX milliseconds = 0' do
18
- expect do
19
- @redises.set('mock-redis-test', 1, px: 0)
20
- end.to raise_error(Redis::CommandError, 'ERR invalid expire time in set')
21
- end
22
-
23
- it 'accepts NX' do
24
- @redises.del(key)
25
- @redises.set(key, 1, nx: true).should == true
26
- @redises.set(key, 1, nx: true).should == false
27
- end
28
-
29
- it 'accepts XX' do
30
- @redises.del(key)
31
- @redises.set(key, 1, xx: true).should == false
32
- @redises.set(key, 1).should == 'OK'
33
- @redises.set(key, 1, xx: true).should == true
34
- end
35
-
36
- it 'accepts GET on a string' do
37
- @redises.set(key, '1').should == 'OK'
38
- @redises.set(key, '2', get: true).should == '1'
39
- @redises.set(key, '3', get: true).should == '2'
40
- end
41
-
42
- context 'when set key is not a String' do
43
- it 'should error with Redis::CommandError' do
44
- @redises.lpush(key, '1').should == 1
45
- expect do
46
- @redises.set(key, '2', get: true)
47
- end.to raise_error(Redis::CommandError)
48
- end
49
- end
50
-
51
- it 'sets the ttl to -1' do
52
- @redises.set(key, 1)
53
- expect(@redises.ttl(key)).to eq(-1)
54
- end
55
-
56
- context 'with an expiry time' do
57
- before :each do
58
- Timecop.freeze
59
- @redises.set(key, 1, ex: 90)
60
- end
61
-
62
- after :each do
63
- @redises.del(key)
64
- Timecop.return
65
- end
66
-
67
- it 'has the TTL set' do
68
- expect(@redises.ttl(key)).to eq 90
69
- end
70
-
71
- it 'resets the TTL without keepttl' do
72
- expect do
73
- @redises.set(key, 2)
74
- end.to change { @redises.ttl(key) }.from(90).to(-1)
75
- end
76
-
77
- it 'does not change the TTL with keepttl: true' do
78
- expect do
79
- @redises.set(key, 2, keepttl: true)
80
- end.not_to change { @redises.ttl(key) }.from(90)
81
- end
82
- end
83
-
84
- it 'accepts KEEPTTL' do
85
- expect(@redises.set(key, 1, keepttl: true)).to eq 'OK'
86
- end
87
-
88
- it 'does not set TTL without ex' do
89
- @redises.set(key, 1)
90
- expect(@redises.ttl(key)).to eq(-1)
91
- end
92
-
93
- it 'sets the TTL' do
94
- Timecop.freeze do
95
- @redises.set(key, 1, ex: 90)
96
- expect(@redises.ttl(key)).to eq 90
97
- end
98
- end
99
-
100
- it 'raises on unknown options' do
101
- @redises.del(key)
102
- expect do
103
- @redises.set(key, 1, logger: :something)
104
- end.to raise_error(ArgumentError, /unknown keyword/)
105
- end
106
-
107
- context '[mock only]' do
108
- before(:all) do
109
- @mock = @redises.mock
110
- end
111
-
112
- before do
113
- @now = Time.now
114
- Time.stub(:now).and_return(@now)
115
- end
116
-
117
- it 'accepts EX seconds' do
118
- @mock.set(key, 1, ex: 1).should == 'OK'
119
- @mock.get(key).should_not be_nil
120
- Time.stub(:now).and_return(@now + 2)
121
- @mock.get(key).should be_nil
122
- end
123
-
124
- it 'accepts PX milliseconds' do
125
- @mock.set(key, 1, px: 500).should == 'OK'
126
- @mock.get(key).should_not be_nil
127
- Time.stub(:now).and_return(@now + 300 / 1000.to_f)
128
- @mock.get(key).should_not be_nil
129
- Time.stub(:now).and_return(@now + 600 / 1000.to_f)
130
- @mock.get(key).should be_nil
131
- end
132
- end
133
- end
134
- end
@@ -1,55 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#setbit(key, offset)' do
4
- before do
5
- Encoding.default_external = 'UTF-8'
6
- @key = 'mock-redis-test:setbit'
7
- @redises.set(@key, 'h') # ASCII 0x68
8
- end
9
-
10
- it "returns the original stored bit's value" do
11
- @redises.setbit(@key, 0, 1).should == 0
12
- @redises.setbit(@key, 1, 1).should == 1
13
- end
14
-
15
- it 'sets the bit within the string' do
16
- @redises.setbit(@key, 7, 1)
17
- @redises.get(@key).should == 'i' # ASCII 0x69
18
- end
19
-
20
- it 'unsets the bit within the string' do
21
- @redises.setbit(@key, 1, 0)
22
- @redises.get(@key).should == '(' # ASCII 0x28
23
- end
24
-
25
- it 'does the right thing with multibyte characters' do
26
- @redises.set(@key, '€99.94') # the euro sign is 3 bytes wide in UTF-8
27
- @redises.setbit(@key, 63, 1).should == 0
28
- @redises.get(@key).should == '€99.95'
29
- end
30
-
31
- it 'expands the string if necessary' do
32
- @redises.setbit(@key, 9, 1)
33
- @redises.get(@key).should == 'h@'
34
- end
35
-
36
- it 'sets added bits to 0' do
37
- @redises.setbit(@key, 17, 1)
38
- @redises.get(@key).should == "h\000@"
39
- end
40
-
41
- it 'treats missing keys as empty strings' do
42
- @redises.del(@key)
43
- @redises.setbit(@key, 1, 1)
44
- @redises.get(@key).should == '@'
45
- end
46
-
47
- it 'sets and retrieves bits' do
48
- @redises.setbit(@key, 22, 1)
49
- @redises.getbit(@key, 22).should == 1
50
- @redises.setbit(@key, 23, 0)
51
- @redises.getbit(@key, 23).should == 0
52
- end
53
-
54
- it_should_behave_like 'a string-only command'
55
- end
@@ -1,38 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#setex(key, seconds, value)' do
4
- before { @key = 'mock-redis-test:setex' }
5
-
6
- it "responds with 'OK'" do
7
- @redises.setex(@key, 10, 'value').should == 'OK'
8
- end
9
-
10
- it 'sets the value' do
11
- @redises.setex(@key, 10_000, 'value')
12
- @redises.get(@key).should == 'value'
13
- end
14
-
15
- it 'sets the expiration time' do
16
- @redises.setex(@key, 10_000, 'value')
17
-
18
- # no guarantee these are the same
19
- @redises.real.ttl(@key).should > 0
20
- @redises.mock.ttl(@key).should > 0
21
- end
22
-
23
- context 'when expiration time is zero' do
24
- it 'raises Redis::CommandError' do
25
- expect do
26
- @redises.setex(@key, 0, 'value')
27
- end.to raise_error(Redis::CommandError, 'ERR invalid expire time in setex')
28
- end
29
- end
30
-
31
- context 'when expiration time is negative' do
32
- it 'raises Redis::CommandError' do
33
- expect do
34
- @redises.setex(@key, -2, 'value')
35
- end.to raise_error(Redis::CommandError, 'ERR invalid expire time in setex')
36
- end
37
- end
38
- end
@@ -1,25 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#setnx(key, value)' do
4
- before { @key = 'mock-redis-test:setnx' }
5
-
6
- it 'returns true if the key was absent' do
7
- @redises.setnx(@key, 1).should == true
8
- end
9
-
10
- it 'returns false if the key was present' do
11
- @redises.set(@key, 2)
12
- @redises.setnx(@key, 1).should == false
13
- end
14
-
15
- it 'sets the value if missing' do
16
- @redises.setnx(@key, 'value')
17
- @redises.get(@key).should == 'value'
18
- end
19
-
20
- it 'does nothing if the value is present' do
21
- @redises.set(@key, 'old')
22
- @redises.setnx(@key, 'new')
23
- @redises.get(@key).should == 'old'
24
- end
25
- end
@@ -1,30 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#setrange(key, offset, value)' do
4
- before do
5
- @key = 'mock-redis-test:setrange'
6
- @redises.set(@key, 'This is a string')
7
- end
8
-
9
- it "returns the string's new length" do
10
- @redises.setrange(@key, 0, 'That').should == 16
11
- end
12
-
13
- it 'updates part of the string' do
14
- @redises.setrange(@key, 0, 'That')
15
- @redises.get(@key).should == 'That is a string'
16
- end
17
-
18
- it 'zero-pads the string if necessary' do
19
- @redises.setrange(@key, 20, 'X')
20
- @redises.get(@key).should == "This is a string\000\000\000\000X"
21
- end
22
-
23
- it 'stores things as strings' do
24
- other_key = 'mock-redis-test:setrange-other-key'
25
- @redises.setrange(other_key, 0, 1)
26
- @redises.get(other_key).should == '1'
27
- end
28
-
29
- it_should_behave_like 'a string-only command'
30
- end
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#sinter(key [, key, ...])' do
4
- before do
5
- @numbers = 'mock-redis-test:sinter:numbers'
6
- @evens = 'mock-redis-test:sinter:evens'
7
- @primes = 'mock-redis-test:sinter:primes'
8
-
9
- (1..10).each { |i| @redises.sadd(@numbers, i) }
10
- [2, 4, 6, 8, 10].each { |i| @redises.sadd(@evens, i) }
11
- [2, 3, 5, 7].each { |i| @redises.sadd(@primes, i) }
12
- end
13
-
14
- it 'returns the elements in the resulting set' do
15
- @redises.sinter(@evens, @primes).should == ['2']
16
- end
17
-
18
- it 'treats missing keys as empty sets' do
19
- @redises.sinter(@destination, 'mock-redis-test:nonesuch').should == []
20
- end
21
-
22
- it 'raises an error if given 0 sets' do
23
- lambda do
24
- @redises.sinter
25
- end.should raise_error(Redis::CommandError)
26
- end
27
-
28
- it 'raises an error if any argument is not a a set' do
29
- @redises.set('mock-redis-test:notset', 1)
30
-
31
- lambda do
32
- @redises.sinter(@numbers, 'mock-redis-test:notset')
33
- end.should raise_error(Redis::CommandError)
34
-
35
- lambda do
36
- @redises.sinter('mock-redis-test:notset', @numbers)
37
- end.should raise_error(Redis::CommandError)
38
- end
39
- end
@@ -1,53 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#sinterstore(destination, key [, key, ...])' do
4
- before do
5
- @numbers = 'mock-redis-test:sinterstore:numbers'
6
- @evens = 'mock-redis-test:sinterstore:evens'
7
- @primes = 'mock-redis-test:sinterstore:primes'
8
- @destination = 'mock-redis-test:sinterstore:destination'
9
-
10
- (1..10).each { |i| @redises.sadd(@numbers, i) }
11
- [2, 4, 6, 8, 10].each { |i| @redises.sadd(@evens, i) }
12
- [2, 3, 5, 7].each { |i| @redises.sadd(@primes, i) }
13
- end
14
-
15
- it 'returns the number of elements in the resulting set' do
16
- @redises.sinterstore(@destination, @numbers, @evens).should == 5
17
- end
18
-
19
- it 'stores the resulting set' do
20
- @redises.sinterstore(@destination, @numbers, @evens)
21
- @redises.smembers(@destination).should == %w[10 8 6 4 2]
22
- end
23
-
24
- it 'does not store empty sets' do
25
- @redises.sinterstore(@destination, 'mock-redis-test:nonesuch', @numbers).should == 0
26
- @redises.get(@destination).should be_nil
27
- end
28
-
29
- it 'removes existing elements in destination' do
30
- @redises.sadd(@destination, 42)
31
-
32
- @redises.sinterstore(@destination, @primes)
33
- @redises.smembers(@destination).should == %w[7 5 3 2]
34
- end
35
-
36
- it 'raises an error if given 0 sets' do
37
- lambda do
38
- @redises.sinterstore(@destination)
39
- end.should raise_error(Redis::CommandError)
40
- end
41
-
42
- it 'raises an error if any argument is not a a set' do
43
- @redises.set('mock-redis-test:notset', 1)
44
-
45
- lambda do
46
- @redises.sinterstore(@destination, @numbers, 'mock-redis-test:notset')
47
- end.should raise_error(Redis::CommandError)
48
-
49
- lambda do
50
- @redises.sinterstore(@destination, 'mock-redis-test:notset', @numbers)
51
- end.should raise_error(Redis::CommandError)
52
- end
53
- end
@@ -1,29 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#sismember(key, member)' do
4
- before do
5
- @key = 'mock-redis-test:sismember'
6
- @redises.sadd(@key, 'whiskey')
7
- @redises.sadd(@key, 'beer')
8
- end
9
-
10
- it 'returns true if member is in set' do
11
- @redises.sismember(@key, 'whiskey').should == true
12
- @redises.sismember(@key, 'beer').should == true
13
- end
14
-
15
- it 'returns false if member is not in set' do
16
- @redises.sismember(@key, 'cola').should == false
17
- end
18
-
19
- it 'stringifies member' do
20
- @redises.sadd(@key, '1')
21
- @redises.sismember(@key, 1).should == true
22
- end
23
-
24
- it 'treats a nonexistent value as an empty set' do
25
- @redises.sismember('mock-redis-test:nonesuch', 'beer').should == false
26
- end
27
-
28
- it_should_behave_like 'a set-only command'
29
- end