mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-07-25 16:03:48 +00:00
55 lines
1.4 KiB
Ruby
55 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.configure do |config|
|
|
lock_recorder = Gitlab::Database::LockRecorder.instance
|
|
|
|
config.before(:all, :lock_recorder) do
|
|
ApplicationRecord.alias_method :old_reload, :reload
|
|
ApplicationRecord.define_method(:reload) do |args = {}|
|
|
locked_obj = old_reload(args)
|
|
|
|
if lock_recorder.recording? && args.has_key?(:lock)
|
|
lock_recorder.add(locked_obj, normalized_lock_type(args[:lock]))
|
|
end
|
|
|
|
locked_obj
|
|
end
|
|
|
|
ActiveRecord::Relation.alias_method :old_load, :load
|
|
ActiveRecord::Relation.define_method(:load) do |&block|
|
|
loaded_objs = old_load(&block)
|
|
|
|
if lock_recorder.recording? && values.has_key?(:lock)
|
|
@records.each do |record|
|
|
lock_recorder.add(record, normalized_lock_type(values[:lock]))
|
|
end
|
|
end
|
|
|
|
loaded_objs
|
|
end
|
|
end
|
|
|
|
config.after(:each, :lock_recorder) do
|
|
lock_recorder.stop
|
|
lock_recorder.clear
|
|
end
|
|
|
|
config.after(:all, :lock_recorder) do
|
|
ApplicationRecord.alias_method :record_reload, :reload
|
|
ApplicationRecord.alias_method :reload, :old_reload
|
|
ApplicationRecord.remove_method :record_reload
|
|
|
|
ActiveRecord::Relation.alias_method :record_load, :load
|
|
ActiveRecord::Relation.alias_method :load, :old_load
|
|
ActiveRecord::Relation.remove_method :record_load
|
|
end
|
|
|
|
def normalized_lock_type(lock_type)
|
|
if lock_type == true
|
|
'FOR UPDATE'
|
|
else
|
|
lock_type
|
|
end
|
|
end
|
|
end
|