spec/delayed/priority_spec.rb in delayed-0.5.3 vs spec/delayed/priority_spec.rb in delayed-0.5.4
- old
+ new
@@ -1,21 +1,23 @@
require 'helper'
RSpec.describe Delayed::Priority do
let(:custom_names) { nil }
let(:custom_alerts) { nil }
+ let(:assign_at_midpoint) { nil }
around do |example|
+ described_class.assign_at_midpoint = assign_at_midpoint
described_class.names = custom_names
described_class.alerts = custom_alerts
example.run
ensure
described_class.alerts = nil
described_class.names = nil
end
- describe '.names, .ranges, .alerts, method_missing' do
+ describe '.names, .ranges, .alerts, .names_to_priority, method_missing' do
it 'defaults to interactive, user_visible, eventual, reporting' do
expect(described_class.names).to eq(
interactive: 0,
user_visible: 10,
eventual: 20,
@@ -31,20 +33,43 @@
interactive: { age: 1.minute, run_time: 30.seconds, attempts: 3 },
user_visible: { age: 3.minutes, run_time: 90.seconds, attempts: 5 },
eventual: { age: 1.5.hours, run_time: 5.minutes, attempts: 8 },
reporting: { age: 4.hours, run_time: 10.minutes, attempts: 8 },
)
+ expect(described_class.names_to_priority).to eq(
+ interactive: 0,
+ user_visible: 10,
+ eventual: 20,
+ reporting: 30,
+ )
expect(described_class).to respond_to(:interactive)
expect(described_class).to respond_to(:user_visible)
expect(described_class).to respond_to(:eventual)
expect(described_class).to respond_to(:reporting)
expect(described_class.interactive).to eq 0
expect(described_class.user_visible).to eq 10
expect(described_class.eventual).to eq 20
expect(described_class.reporting).to eq 30
end
+ context 'when assign_at_midpoint is set to true' do
+ let(:assign_at_midpoint) { true }
+
+ it 'returns the midpoint value' do
+ expect(described_class.names_to_priority).to eq(
+ interactive: 5,
+ user_visible: 15,
+ eventual: 25,
+ reporting: 35,
+ )
+ expect(described_class.interactive).to eq 5
+ expect(described_class.user_visible).to eq 15
+ expect(described_class.eventual).to eq 25
+ expect(described_class.reporting).to eq 35
+ end
+ end
+
context 'when customized to high, medium, low' do
let(:custom_names) { { high: 0, medium: 100, low: 500 } }
it 'returns the customized value' do
expect(described_class.names).to eq(
@@ -55,10 +80,15 @@
expect(described_class.ranges).to eq(
high: (0...100),
medium: (100...500),
low: (500...Float::INFINITY),
)
+ expect(described_class.names_to_priority).to eq(
+ high: 0,
+ medium: 100,
+ low: 500,
+ )
expect(described_class.alerts).to eq({})
expect(described_class).not_to respond_to(:interactive)
expect(described_class).not_to respond_to(:user_visible)
expect(described_class).not_to respond_to(:eventual)
expect(described_class).not_to respond_to(:reporting)
@@ -79,10 +109,25 @@
medium: { run_time: 1.minute },
low: { attempts: 10 },
)
end
end
+
+ context 'when assign_at_midpoint is set to true' do
+ let(:assign_at_midpoint) { true }
+
+ it 'returns the midpoint value' do
+ expect(described_class.names_to_priority).to eq(
+ high: 50,
+ medium: 300,
+ low: 505,
+ )
+ expect(described_class.high).to eq 50
+ expect(described_class.medium).to eq 300
+ expect(described_class.low).to eq 505
+ end
+ end
end
end
it 'provides the name of the priority range' do
expect(described_class.new(0).name).to eq :interactive
@@ -108,10 +153,40 @@
expect(described_class.new(29)).to be_eventual
expect(described_class.new(999)).to be_reporting
expect(described_class.new(-123).interactive?).to eq false
end
+ context 'when assign_at_midpoint is set to true' do
+ let(:assign_at_midpoint) { true }
+
+ it 'provides the name of the priority range' do
+ expect(described_class.new(0).name).to eq :interactive
+ expect(described_class.new(3).name).to eq :interactive
+ expect(described_class.new(10).name).to eq :user_visible
+ expect(described_class.new(29).name).to eq :eventual
+ expect(described_class.new(999).name).to eq :reporting
+ expect(described_class.new(-123).name).to eq nil
+ end
+
+ it 'supports initialization by symbol value' do
+ expect(described_class.new(:interactive)).to eq(5)
+ expect(described_class.new(:user_visible)).to eq(15)
+ expect(described_class.new(:eventual)).to eq(25)
+ expect(described_class.new(:reporting)).to eq(35)
+ end
+
+ it "supports predicate ('?') methods" do
+ expect(described_class.new(0).interactive?).to eq true
+ expect(described_class.new(3)).to be_interactive
+ expect(described_class.new(3).user_visible?).to eq false
+ expect(described_class.new(10)).to be_user_visible
+ expect(described_class.new(29)).to be_eventual
+ expect(described_class.new(999)).to be_reporting
+ expect(described_class.new(-123).interactive?).to eq false
+ end
+ end
+
it 'supports alert threshold methods' do
described_class.alerts = {
interactive: { age: 77.seconds },
user_visible: { run_time: 11.seconds },
eventual: { attempts: 7 },
@@ -148,7 +223,16 @@
described_class.new(40),
described_class.new(3),
described_class.new(-13),
].sort,
).to eq [-13, 3, 5, 40]
+ end
+
+ it 'supports addition and subtraction' do
+ expect(described_class.new(0) + 10).to eq(10)
+ expect(10 + described_class.new(5)).to eq(15)
+ expect(described_class.new(0) + described_class.new(33)).to eq(33)
+ expect(described_class.new(10) - 5).to eq(5)
+ expect(15 - described_class.new(10)).to eq(5)
+ expect(described_class.new(5) - described_class.new(15)).to eq(-10)
end
end