Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions lib/resque/durable/queue_audit.rb
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ def job_klass=(klass)
end

def payload
return if read_attribute(:payload).blank?

ActiveSupport::JSON.decode(super)
end

Expand Down Expand Up @@ -123,6 +125,8 @@ def complete?
end

def retryable?
return false if timeout_at.blank?

Time.now.utc > (timeout_at + delay)
end

Expand Down
45 changes: 41 additions & 4 deletions test/queue_audit_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -108,13 +108,37 @@ class QueueAuditTest < Minitest::Test

end

describe 'enqueue' do
describe '#payload' do
subject do
@audit.payload
end

describe 'without data present' do
before do
@audit[:payload] = ''
end

it { expect(subject).must_be_nil }
end

describe 'with JSON data available' do
before do
@audit[:payload] = \
{ test: 'data' }.to_json
end

it 'returns as decoded' do
expect(subject).must_equal \
({ 'test' => 'data' })
end
end
end

describe 'enqueue' do
it 'sends the payload to the queue' do
Resque.expects(:enqueue).with(MailQueueJob, 'hello', @audit.enqueued_id)
@audit.enqueue
end

end

describe 'enqueued!' do
Expand Down Expand Up @@ -158,13 +182,16 @@ class QueueAuditTest < Minitest::Test
end


describe 'retryable?' do
describe '#retryable?' do
subject do
@audit.retryable?
end

it 'checks if the expected run duration with delay is exceeded' do
@audit.enqueued!
assert_equal 1.minute, @audit.delay
assert_equal 10.minutes, @audit.duration
assert_equal false, @audit.retryable?
assert_equal false, subject

Timecop.freeze(Time.now + 10.minutes) do
assert_equal false, @audit.retryable?
Expand All @@ -178,6 +205,16 @@ class QueueAuditTest < Minitest::Test
assert_equal true, @audit.retryable?
end
end

describe 'without :timeout_at value' do
before do
@audit[:timeout_at] = ''
end

it 'is always false' do
expect(subject).must_equal false
end
end
end

describe 'heartbeat!' do
Expand Down