spec/active_job/queue_adapters/sqs_adapter/params_spec.rb (58 lines of code) (raw):
# frozen_string_literal: true
module ActiveJob
module QueueAdapters
class SqsAdapter
describe Params do
describe '.assured_delay_seconds' do
let(:now) { Time.now }
before { allow(Time).to receive(:now).and_return(now) }
it 'returns seconds from present' do
unix_time = (now + 15.minutes).to_f
expect(Params.assured_delay_seconds(unix_time)).to eq 900
end
it 'rounds up to zero' do
unix_time = (now - 1.second).to_f
expect(Params.assured_delay_seconds(unix_time)).to eq 0
end
it 'raise error when 15 minutes after present' do
unix_time = (now + 15.minutes + 1.second).to_f
expect { Params.assured_delay_seconds(unix_time) }.to raise_error ArgumentError
end
end
describe '#queue_url' do
let(:params) { Params.new(job, nil) }
let(:job) { TestJob.new('a1', 'a2') }
it 'returns url of job queue' do
expect(params.queue_url).to eq 'https://queue-url'
end
end
describe '#entry' do
let(:params) { Params.new(job, nil) }
let(:job) { TestJob.new('a1', 'a2') }
it 'returns hash of core attributes' do
expect(params.entry).to include(
{
message_body: instance_of(String),
message_attributes: instance_of(Hash)
}
)
end
describe 'fifo queue' do
before do
allow(Aws::ActiveJob::SQS.config).to receive(:url_for).and_return('https://queue-url.fifo')
end
it 'includes message_group_id and message_deduplication_id' do
expect(params.entry).to include(
{
message_body: instance_of(String),
message_attributes: instance_of(Hash),
message_group_id: String,
message_deduplication_id: String
}
)
end
end
end
end
end
end
end