diff --git a/lib/resque/integration/unique.rb b/lib/resque/integration/unique.rb index f685fbf..9e87600 100644 --- a/lib/resque/integration/unique.rb +++ b/lib/resque/integration/unique.rb @@ -123,6 +123,10 @@ def enqueued?(*args) end end + def lock_timeout + 3.days + end + # Returns true if resque job is in locked state def locked?(*args) key = lock(nil, *args) diff --git a/spec/resque/integration_spec.rb b/spec/resque/integration_spec.rb index e45b015..f749d54 100644 --- a/spec/resque/integration_spec.rb +++ b/spec/resque/integration_spec.rb @@ -1,20 +1,62 @@ # coding: utf-8 - require 'spec_helper' -describe Resque::Integration, '#unique?' do - let(:job) { Class.new } - before { job.send :include, Resque::Integration } +RSpec.describe Resque::Integration do + describe '#unique?' do + let(:job) { Class.new } + before { job.send :include, Resque::Integration } + + subject { job } + + context 'when #unique is not called' do + it { should_not be_unique } + end - subject { job } + context 'when #unique is called' do + before { job.unique } - context 'when #unique is not called' do - it { should_not be_unique } + it { should be_unique } + end end - context 'when #unique is called' do - before { job.unique } + describe 'enqueue' do + context 'when job is uniq' do + class UniqueJob + include Resque::Integration + + queue :test + unique + end + + it 'enqueues only one job' do + UniqueJob.enqueue(param: 'one') + + Timecop.travel(10.hours.since) do + UniqueJob.enqueue(param: 'one') + + expect(Resque.peek(:test, 0, 100).size).to eq(1) + end + end + + it 'enqueues two jobs with differ args' do + UniqueJob.enqueue(param: 'one') + + Timecop.travel(10.hours.since) do + UniqueJob.enqueue(param: 'two') + + expect(Resque.peek(:test, 0, 100).size).to eq(2) + end + end + + it 'enqueues two jobs after expire lock timeout' do + UniqueJob.enqueue(param: 'one') + + Timecop.travel(4.days.since) do + UniqueJob.enqueue(param: 'one') - it { should be_unique } + expect(Resque.peek(:test, 0, 100).size).to eq(2) + end + end + end end -end \ No newline at end of file +end