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
|
require 'test_helper'
class MockRedis
def initialize
@sets = []
@setexes = []
@setnxes = []
@expires = []
end
def set(*a)
@sets << a
end
def has_set?(*a)
@sets.include?(a)
end
def setex(*a)
@setexes << a
end
def has_setex?(*a)
@setexes.include?(a)
end
def setnx(*a)
@setnxes << a
end
def has_setnx?(*a)
@setnxes.include?(a)
end
def multi(&block)
instance_eval do
def setnx(*a)
@setnxes << a
end
block.call
end
end
def expire(*a)
@expires << a
end
def has_expire?(*a)
@expires.include?(a)
end
end
class MockTtlStore < MockRedis
include Redis::Store::Ttl
end
describe MockTtlStore do
let(:key) { 'hello' }
let(:mock_value) { 'value' }
let(:options) { { :expire_after => 3600 } }
let(:redis) { MockTtlStore.new }
describe '#set' do
describe 'without options' do
it 'must call super with key and value' do
redis.set(key, mock_value)
redis.has_set?(key, mock_value).must_equal true
end
end
describe 'with options' do
it 'must call setex with proper expiry and set raw to true' do
redis.set(key, mock_value, options)
redis.has_setex?(key, options[:expire_after], mock_value, :raw => true).must_equal true
end
end
end
describe '#setnx' do
describe 'without expiry' do
it 'must call super with key and value' do
redis.setnx(key, mock_value)
redis.has_setnx?(key, mock_value)
end
it 'must not call expire' do
MockTtlStore.any_instance.expects(:expire).never
redis.setnx(key, mock_value)
end
end
describe 'with expiry' do
it 'must call setnx with key and value and set raw to true' do
redis.setnx(key, mock_value, options)
redis.has_setnx?(key, mock_value, :raw => true).must_equal true
end
it 'must call expire' do
redis.setnx(key, mock_value, options)
redis.has_expire?(key, options[:expire_after]).must_equal true
end
end
end
end
|