spec/sequencer_spec.rb in alephant-sequencer-0.0.6 vs spec/sequencer_spec.rb in alephant-sequencer-0.0.7
- old
+ new
@@ -1,10 +1,10 @@
require 'spec_helper'
describe Alephant::Sequencer do
let(:ident) { :ident }
- let(:jsonpath) { :jsonpath }
+ let(:jsonpath) { "$.sequence_id" }
describe ".create(table_name, ident, jsonpath)" do
it "should return a Sequencer" do
Alephant::Sequencer::SequenceTable.any_instance.stub(:create)
expect(subject.create(:table_name, ident, jsonpath)).to be_a Alephant::Sequencer::Sequencer
@@ -40,10 +40,112 @@
Alephant::Sequencer::Sequencer.new(table, ident, jsonpath)
end
end
+
+ describe "#sequence(msg, &block)" do
+ let(:message) do
+ m = double()
+ m.stub(:body)
+
+ m
+ end
+
+ let(:a_proc) do
+ a_block = double()
+ a_block.should_receive(:called).with(message)
+
+ Proc.new do |msg|
+ a_block.called(msg)
+ end
+ end
+
+ let(:stubbed_last_seen) { 2 }
+ let(:stubbed_seen_high) { 3 }
+ let(:stubbed_seen_low) { 1 }
+
+ it "should call the passed block with msg" do
+ subject = Alephant::Sequencer::Sequencer.new(sequence_table, ident, jsonpath)
+ subject.sequence(message, &a_proc)
+ end
+
+ context "last_seen_id is nil" do
+ before(:each) do
+ Alephant::Sequencer::Sequencer.any_instance
+ .stub(:get_last_seen).and_return(nil)
+
+ Alephant::Sequencer::Sequencer
+ .stub(:sequence_id_from).and_return(stubbed_seen_high)
+ end
+
+ it "should not call set_last_seen(msg, last_seen_id)" do
+ Alephant::Sequencer::Sequencer.any_instance
+ .should_receive(:set_last_seen)
+ .with(message, nil)
+
+ subject = Alephant::Sequencer::Sequencer.new(sequence_table, ident, jsonpath)
+ subject.sequence(message, &a_proc)
+ end
+ end
+
+ context "last_seen_id == sequence_id_from(msg)" do
+ before(:each) do
+ Alephant::Sequencer::Sequencer.any_instance
+ .stub(:get_last_seen).and_return(stubbed_last_seen)
+
+ Alephant::Sequencer::Sequencer
+ .stub(:sequence_id_from).and_return(stubbed_last_seen)
+ end
+
+ it "should not call set_last_seen(msg, last_seen_id)" do
+ Alephant::Sequencer::Sequencer.any_instance
+ .should_not_receive(:set_last_seen)
+
+ subject = Alephant::Sequencer::Sequencer.new(sequence_table, ident, jsonpath)
+ subject.sequence(message, &a_proc)
+ end
+ end
+
+ context "last_seen_id > sequence_id_from(msg)" do
+ before(:each) do
+ Alephant::Sequencer::Sequencer.any_instance
+ .stub(:get_last_seen).and_return(stubbed_last_seen)
+
+ Alephant::Sequencer::Sequencer.any_instance
+ .stub(:sequence_id_from).and_return(stubbed_seen_low)
+ end
+
+ it "should not call set_last_seen(msg, last_seen_id)" do
+ Alephant::Sequencer::Sequencer.any_instance
+ .should_not_receive(:set_last_seen)
+
+ subject = Alephant::Sequencer::Sequencer.new(sequence_table, ident, jsonpath)
+ subject.sequence(message, &a_proc)
+ end
+ end
+
+ context "last_seen_id < sequence_id_from(msg)" do
+ before(:each) do
+ Alephant::Sequencer::Sequencer.any_instance
+ .stub(:get_last_seen).and_return(stubbed_last_seen)
+
+ Alephant::Sequencer::Sequencer
+ .stub(:sequence_id_from).and_return(stubbed_seen_high)
+ end
+
+ it "should call set_last_seen(msg, last_seen_id)" do
+ Alephant::Sequencer::Sequencer.any_instance
+ .should_receive(:set_last_seen)
+ .with(message, stubbed_last_seen)
+
+ subject = Alephant::Sequencer::Sequencer.new(sequence_table, ident, jsonpath)
+ subject.sequence(message, &a_proc)
+ end
+ end
+ end
+
describe "#get_last_seen" do
it "returns sequence_table.sequence_for(ident)" do
table = double()
table.stub(:sequence_exists)
table.stub(:create)
@@ -55,11 +157,11 @@
end
end
describe "#set_last_seen(data)" do
before(:each) do
- Alephant::Sequencer::Sequencer.any_instance.stub(:sequence_id_from).and_return(last_seen)
+ Alephant::Sequencer::Sequencer.stub(:sequence_id_from).and_return(last_seen)
end
it "calls set_sequence_for(ident, last_seen)" do
table = double()
table.stub(:sequence_exists)
@@ -69,14 +171,14 @@
Alephant::Sequencer::Sequencer.new(table, ident, jsonpath).set_last_seen(data)
end
end
- describe "#sequence_id_from(data)" do
- subject { Alephant::Sequencer::Sequencer.new(sequence_table, ident, '$.set_sequence_id') }
+ describe ".sequence_id_from(data)" do
+ subject { Alephant::Sequencer::Sequencer }
it "should return the id described by the set jsonpath" do
msg = Struct.new(:body).new({ "set_sequence_id" => 1 })
- expect(subject.sequence_id_from msg).to eq(1)
+ expect(subject.sequence_id_from(msg,'$.set_sequence_id')).to eq(1)
end
end
describe "#sequential?(data, jsonpath)" do