spec/round_robin_spec.rb in docket-0.0.1 vs spec/round_robin_spec.rb in docket-0.1.1
- old
+ new
@@ -3,16 +3,59 @@
describe Docket::RoundRobin do
let(:round_robin) { Docket::RoundRobin.new(:storage => $storage) }
describe '#set' do
+
+ before :all do
+ $storage.send(:clear!)
+ end
+
it 'sets a list of robins for some identifier key' do
round_robin.set("trainer_15", ['dog', 'lion', 'tiger'])
expect($storage.db.get('trainer_15')).to be_kind_of(Array)
end
+
+ context "using group" do
+ before :each do
+ round_robin.set("trainer_15", ['dog', 'lion', 'tiger'], :group => 'group1')
+ reload_storage_connection
+ end
+
+ it "writes to the group list" do
+ expect($storage.read("group1")).to eql(['trainer_15'])
+ end
+
+ it "creates its own index of groups" do
+ expect($storage.read("trainer_15_groups")).to eql(['group1'])
+ end
+ end
end
+ describe '#unset' do
+
+ before :each do
+ $storage.send(:clear!)
+ round_robin.set("trainer_15", ['dog', 'lion', 'tiger'], :group => "daily")
+ round_robin.set("trainer_16", ['cat', 'mouse', 'cheese'], :group => "daily")
+ round_robin.unset("trainer_15")
+ end
+
+ it "removes the list of groups associated" do
+ expect($storage.read('daily')).to_not include("trainer_15")
+ expect($storage.read('daily')).to include("trainer_16")
+ end
+
+ it "removes index of groups" do
+ expect($storage.read("trainer_15_groups")).to be_nil
+ end
+
+ it "removes the identifier" do
+ expect($storage.read("trainer_15")).to be_nil
+ end
+ end
+
describe '#perform' do
it "takes the next robin and calls action with it" do
action = lambda { |robin| @animal_to_train = robin }
round_robin.set("trainer_15", ['dog', 'lion', 'tiger'])
@@ -39,9 +82,26 @@
round_robin = Docket::RoundRobin.new(:storage => $storage)
round_robin.perform("trainer_15", action)
expect(@animal_to_train).to eql('tiger')
+ end
+
+ it "works with arrays of arrays" do
+ action = lambda { |robin| @robins = robin }
+
+ round_robin.set("trainer_15", [['dog', 'lion', 'tiger'], ['cages', 'sidewalks', 'bathrooms']])
+
+ round_robin.perform("trainer_15", action)
+ expect(@robins).to eql(['cages', 'sidewalks', 'bathrooms'])
+ round_robin.perform("trainer_15", action)
+ expect(@robins).to eql(['dog', 'lion', 'tiger'])
+
+ round_robin.set("trainer_16", [['kids', 'adults']])
+ round_robin.perform("trainer_16", action)
+ expect(@robins).to eql(['kids', 'adults'])
+ round_robin.perform("trainer_16", action)
+ expect(@robins).to eql(['kids', 'adults'])
end
end
end