Add RedisCacheable specs for memoization correctness
This commit is contained in:
parent
b1fcac85bd
commit
f4810647a0
1 changed files with 19 additions and 7 deletions
|
@ -9,7 +9,7 @@ describe RedisCacheable do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:payload) { { name: 'value' } }
|
let(:payload) { { name: 'value', time: Time.zone.now } }
|
||||||
let(:instance) { model.new(1, payload) }
|
let(:instance) { model.new(1, payload) }
|
||||||
let(:cache_key) { instance.__send__(:cache_attribute_key) }
|
let(:cache_key) { instance.__send__(:cache_attribute_key) }
|
||||||
|
|
||||||
|
@ -50,9 +50,7 @@ describe RedisCacheable do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when there is no cached value' do
|
context 'when there is no cached value' do
|
||||||
it 'checks the cached value first then reads the attribute' do
|
it 'reads the attribute' do
|
||||||
expect(instance).to receive(:read_attribute).and_return(payload[:name])
|
|
||||||
|
|
||||||
expect(subject).to eq(payload[:name])
|
expect(subject).to eq(payload[:name])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -64,6 +62,14 @@ describe RedisCacheable do
|
||||||
expect(subject).to eq(payload[:name])
|
expect(subject).to eq(payload[:name])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'always returns the latest values' do
|
||||||
|
expect(instance.name).to eq(payload[:name])
|
||||||
|
|
||||||
|
instance.cache_attributes(name: 'new_value')
|
||||||
|
|
||||||
|
expect(instance.name).to eq('new_value')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#cached_attr_time_reader', :clean_gitlab_redis_shared_state do
|
describe '#cached_attr_time_reader', :clean_gitlab_redis_shared_state do
|
||||||
|
@ -74,9 +80,7 @@ describe RedisCacheable do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when there is no cached value' do
|
context 'when there is no cached value' do
|
||||||
it 'checks the cached value first then reads the attribute' do
|
it 'reads the attribute' do
|
||||||
expect(instance).to receive(:read_attribute).and_return(Time.zone.now)
|
|
||||||
|
|
||||||
expect(subject).to be_instance_of(ActiveSupport::TimeWithZone)
|
expect(subject).to be_instance_of(ActiveSupport::TimeWithZone)
|
||||||
expect(subject).to be_within(1.minute).of(Time.zone.now)
|
expect(subject).to be_within(1.minute).of(Time.zone.now)
|
||||||
end
|
end
|
||||||
|
@ -90,5 +94,13 @@ describe RedisCacheable do
|
||||||
expect(subject).to be_within(1.minute).of(Time.zone.now)
|
expect(subject).to be_within(1.minute).of(Time.zone.now)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'always returns the latest values' do
|
||||||
|
expect(instance.time).to be_within(1.minute).of(Time.zone.now)
|
||||||
|
|
||||||
|
instance.cache_attributes(time: 1.hour.ago)
|
||||||
|
|
||||||
|
expect(instance.time).to be_within(1.minute).of(1.hour.ago)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue