mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-01 11:37:58 +00:00
feat: locking and retry in FB message parsing (#7701)
This commit is contained in:
48
spec/lib/redis/lock_manager_spec.rb
Normal file
48
spec/lib/redis/lock_manager_spec.rb
Normal file
@@ -0,0 +1,48 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Redis::LockManager do
|
||||
let(:lock_manager) { described_class.new }
|
||||
let(:lock_key) { 'test_lock' }
|
||||
|
||||
after do
|
||||
# Cleanup: Ensure that the lock key is deleted after each test to avoid interference
|
||||
Redis::Alfred.delete(lock_key)
|
||||
end
|
||||
|
||||
describe '#lock' do
|
||||
it 'acquires a lock and returns true' do
|
||||
expect(lock_manager.lock(lock_key)).to be true
|
||||
expect(lock_manager.locked?(lock_key)).to be true
|
||||
end
|
||||
|
||||
it 'returns false if the lock is already acquired' do
|
||||
lock_manager.lock(lock_key)
|
||||
expect(lock_manager.lock(lock_key)).to be false
|
||||
end
|
||||
|
||||
it 'can acquire a lock again after the timeout' do
|
||||
lock_manager.lock(lock_key, 1) # 1-second timeout
|
||||
sleep 2
|
||||
expect(lock_manager.lock(lock_key)).to be true
|
||||
end
|
||||
end
|
||||
|
||||
describe '#unlock' do
|
||||
it 'releases a lock' do
|
||||
lock_manager.lock(lock_key)
|
||||
lock_manager.unlock(lock_key)
|
||||
expect(lock_manager.locked?(lock_key)).to be false
|
||||
end
|
||||
end
|
||||
|
||||
describe '#locked?' do
|
||||
it 'returns true if a key is locked' do
|
||||
lock_manager.lock(lock_key)
|
||||
expect(lock_manager.locked?(lock_key)).to be true
|
||||
end
|
||||
|
||||
it 'returns false if a key is not locked' do
|
||||
expect(lock_manager.locked?(lock_key)).to be false
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user