public void When()
        {
            _tagger = new MultiStreamPositionTagger(0, new [] {"stream1", "stream2"});
            _positionTracker = new PositionTracker(_tagger);
            // when 

            _positionTracker.UpdateByCheckpointTagInitial(_tagger.MakeZeroCheckpointTag());
        }
 public void another_streams_checkpoint_tag_is_incompatible()
 {
     var t = new MultiStreamPositionTagger(new[] {"stream1", "stream2"});
     Assert.IsFalse(
         t.IsCompatible(
             CheckpointTag.FromStreamPositions(
                 new Dictionary<string, int> {{"stream2", 100}, {"stream3", 150}})));
 }
 public void is_message_after_checkpoint_tag_before_case()
 {
     var t = new MultiStreamPositionTagger(new[] {"stream1", "stream2"});
     var result =
         t.IsMessageAfterCheckpointTag(
             CheckpointTag.FromStreamPositions(new Dictionary<string, int> {{"stream1", 2}, {"stream2", 2}}),
             _firstEvent);
     Assert.IsFalse(result);
 }
 public void is_message_after_checkpoint_tag_incompatible_streams_case()
 {
     var t = new MultiStreamPositionTagger(0, new[] {"stream-other", "stream2"});
     var result =
         t.IsMessageAfterCheckpointTag(
             CheckpointTag.FromStreamPositions(0, new Dictionary<string, int> {{"stream-other", 0}, {"stream2", 0}}),
             _firstEvent);
     Assert.IsFalse(result);
 }
 public void When()
 {
     // given
     _tagger = new MultiStreamPositionTagger(0, new []{"stream1", "stream2"});
     _positionTracker = new PositionTracker(_tagger);
     var newTag = CheckpointTag.FromStreamPositions(0, new Dictionary<string, int>{{"stream1", 1}, {"stream2", 2}});
     var newTag2 = CheckpointTag.FromStreamPositions(0, new Dictionary<string, int> { { "stream1", 1 }, { "stream2", 3 } });
     _positionTracker.UpdateByCheckpointTagInitial(newTag);
     _positionTracker.UpdateByCheckpointTagForward(newTag2);
 }
        public void When()
        {
            // given
            var tagger = new MultiStreamPositionTagger(new []{"stream1", "stream2"});
            var tracker = new PositionTracker(tagger);

            var newTag = CheckpointTag.FromStreamPositions(new Dictionary<string, int>{{"stream1", 1}, {"stream2", 2}});
            tracker.UpdateByCheckpointTagInitial(newTag);
            _tag = tracker.LastTag;
            _tagger = new MultiStreamPositionTagger(new []{"stream1", "stream2"});
            _positionTracker = new PositionTracker(_tagger);
            // when 

            _positionTracker.UpdateByCheckpointTagInitial(_tag);
        }
 public void can_be_created()
 {
     var t = new MultiStreamPositionTagger(new[] {"stream1", "stream2"});
     new PositionTracker(t);
 }
        public void produced_checkpoint_tags_are_correctly_ordered()
        {
            var t = new MultiStreamPositionTagger(new[] {"stream1", "stream2"});
            var zero = t.MakeZeroCheckpointTag();

            var zeroEvent = t.MakeCheckpointTag(zero, _zeroEvent);
            var zeroEvent2 = t.MakeCheckpointTag(zeroEvent, _zeroEvent);
            var first = t.MakeCheckpointTag(zeroEvent2, _firstEvent);
            var second = t.MakeCheckpointTag(first, _secondEvent);
            var second2 = t.MakeCheckpointTag(zeroEvent, _secondEvent);
            var third = t.MakeCheckpointTag(second, _thirdEvent);

            Assert.IsTrue(zeroEvent > zero);
            Assert.IsTrue(first > zero);
            Assert.IsTrue(second > first);

            Assert.AreEqual(zeroEvent2, zeroEvent);
            Assert.AreNotEqual(second, second2);
            Assert.IsTrue(second2 > zeroEvent);
            Assert.Throws<InvalidOperationException>(() => { var r = second2 > first; });

            Assert.IsTrue(third > second);
            Assert.IsTrue(third > first);
            Assert.IsTrue(third > zeroEvent);
            Assert.IsTrue(third > zero);
        }
        public void zero_position_tag_is_before_first_event_possible()
        {
            var t = new MultiStreamPositionTagger(new[] {"stream1", "stream2"});
            var zero = t.MakeZeroCheckpointTag();

            var zeroFromEvent = t.MakeCheckpointTag(zero, _zeroEvent);

            Assert.IsTrue(zeroFromEvent > zero);
        }
 public void can_adjust_stream_position_tag()
 {
     var t = new MultiStreamPositionTagger(new[] {"stream1", "stream2"});
     var tag = CheckpointTag.FromStreamPositions(
         new Dictionary<string, int> {{"stream1", 1}, {"stream2", -1}});
     var original = CheckpointTag.FromStreamPosition("stream1", 1);
     Assert.AreEqual(tag, t.AdjustTag(original));
 }
 public void adjust_compatible_tag_returns_the_same_tag()
 {
     var t = new MultiStreamPositionTagger(new[] {"stream1", "stream2"});
     var tag = CheckpointTag.FromStreamPositions(
         new Dictionary<string, int> {{"stream1", 1}, {"stream2", 2}});
     Assert.AreEqual(tag, t.AdjustTag(tag));
 }
 public void position_checkpoint_tag_is_incompatible()
 {
     var t = new MultiStreamPositionTagger(new[] {"stream1", "stream2"});
     Assert.IsFalse(t.IsCompatible(CheckpointTag.FromPosition(1000, 500)));
 }
 public void the_same_stream_checkpoint_tag_is_compatible()
 {
     var t = new MultiStreamPositionTagger(0, new[] {"stream1", "stream2"});
     Assert.IsTrue(
         t.IsCompatible(
             CheckpointTag.FromStreamPositions(0, new Dictionary<string, int> {{"stream1", 100}, {"stream2", 150}})));
 }
 public void when()
 {
     _tagger = new MultiStreamPositionTagger(new []{"stream1", "stream2"});
     _positionTracker = new PositionTracker(_tagger);
 }
 public void empty_streams_throws_argument_exception()
 {
     var t = new MultiStreamPositionTagger(new string[] {});
 }
 public void null_streams_throws_argument_null_exception()
 {
     var t = new MultiStreamPositionTagger(null);
 }