Commit f4810647 authored by Matija Čupić's avatar Matija Čupić

Add RedisCacheable specs for memoization correctness

parent b1fcac85
...@@ -9,7 +9,7 @@ describe RedisCacheable do ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment