Fixed #2624 - Concern 'CanLatestChange' returns wrong updated_at
This commit is contained in:
parent
812266b80e
commit
4a142f307b
3 changed files with 38 additions and 4 deletions
|
@ -9,7 +9,7 @@ module ApplicationModel::CanLatestChange
|
||||||
|
|
||||||
get latest updated_at object timestamp
|
get latest updated_at object timestamp
|
||||||
|
|
||||||
latest_change = Ticket.latest_change
|
latest_change = object.latest_change
|
||||||
|
|
||||||
returns
|
returns
|
||||||
|
|
||||||
|
@ -18,13 +18,13 @@ returns
|
||||||
=end
|
=end
|
||||||
|
|
||||||
def latest_change
|
def latest_change
|
||||||
key = "#{new.class.name}_latest_change"
|
key = "#{name}_latest_change"
|
||||||
updated_at = Cache.get(key)
|
updated_at = Cache.get(key)
|
||||||
|
|
||||||
return updated_at if updated_at
|
return updated_at if updated_at
|
||||||
|
|
||||||
# if we do not have it cached, do lookup
|
# if we do not have it cached, do lookup
|
||||||
updated_at = Ticket.order(updated_at: :desc).limit(1).pluck(:updated_at).first
|
updated_at = order(updated_at: :desc).limit(1).pluck(:updated_at).first
|
||||||
|
|
||||||
return if !updated_at
|
return if !updated_at
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ returns
|
||||||
end
|
end
|
||||||
|
|
||||||
def latest_change_set(updated_at)
|
def latest_change_set(updated_at)
|
||||||
key = "#{new.class.name}_latest_change"
|
key = "#{name}_latest_change"
|
||||||
expires_in = 86_400 # 1 day
|
expires_in = 86_400 # 1 day
|
||||||
|
|
||||||
if updated_at.nil?
|
if updated_at.nil?
|
||||||
|
|
32
spec/models/application_model/can_latest_change_examples.rb
Normal file
32
spec/models/application_model/can_latest_change_examples.rb
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
RSpec.shared_examples 'ApplicationModel::CanLatestChange' do
|
||||||
|
subject { create(described_class.name.underscore) }
|
||||||
|
|
||||||
|
describe '#latest_change' do
|
||||||
|
describe 'caching updated_at' do
|
||||||
|
context 'with empty cache' do
|
||||||
|
it 'stores updated_at in the cache and returns it' do
|
||||||
|
expect(subject.updated_at).to eq(described_class.latest_change)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with valid cache' do
|
||||||
|
before { described_class.latest_change_set(subject.updated_at) }
|
||||||
|
|
||||||
|
it 'return updated_at from cache' do
|
||||||
|
expect(subject.updated_at).to eq(described_class.latest_change)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'delete valid cache' do
|
||||||
|
before do
|
||||||
|
subject.touch
|
||||||
|
described_class.latest_change_set(nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'stores new updated_at in the cache and returns it' do
|
||||||
|
expect(subject.updated_at).to eq(described_class.latest_change)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,9 +1,11 @@
|
||||||
require 'models/application_model/can_assets_examples'
|
require 'models/application_model/can_assets_examples'
|
||||||
require 'models/application_model/can_associations_examples'
|
require 'models/application_model/can_associations_examples'
|
||||||
|
require 'models/application_model/can_latest_change_examples'
|
||||||
require 'models/application_model/checks_import_examples'
|
require 'models/application_model/checks_import_examples'
|
||||||
|
|
||||||
RSpec.shared_examples 'ApplicationModel' do |options = {}|
|
RSpec.shared_examples 'ApplicationModel' do |options = {}|
|
||||||
include_examples 'ApplicationModel::CanAssets', options[:can_assets]
|
include_examples 'ApplicationModel::CanAssets', options[:can_assets]
|
||||||
include_examples 'ApplicationModel::CanAssociations'
|
include_examples 'ApplicationModel::CanAssociations'
|
||||||
|
include_examples 'ApplicationModel::CanLatestChange'
|
||||||
include_examples 'ApplicationModel::ChecksImport'
|
include_examples 'ApplicationModel::ChecksImport'
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue