From 2a1dbad4633a83f1ffeb5a5902ebbe697021e682 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20=C5=81asocha?= Date: Wed, 21 Jul 2021 17:07:14 +0200 Subject: [PATCH] Raise error when trying to append with :any to stream with specific positions Issue: #420 --- .../lib/ruby_event_store/in_memory_repository.rb | 3 +++ ruby_event_store/spec/in_memory_repository_spec.rb | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/ruby_event_store/lib/ruby_event_store/in_memory_repository.rb b/ruby_event_store/lib/ruby_event_store/in_memory_repository.rb index 8b90df4db6..45e694a291 100644 --- a/ruby_event_store/lib/ruby_event_store/in_memory_repository.rb +++ b/ruby_event_store/lib/ruby_event_store/in_memory_repository.rb @@ -3,6 +3,8 @@ require 'ostruct' module RubyEventStore class InMemoryRepository + UnsupportedVersionAnyUsage = Class.new(StandardError) + class EventInStream def initialize(event_id, position) @event_id = event_id @@ -34,6 +36,7 @@ def append_to_stream(records, stream, expected_version) serialized_records = records.map { |record| record.serialize(serializer) } with_synchronize(expected_version, stream) do |resolved_version| + raise UnsupportedVersionAnyUsage if resolved_version.nil? && !streams.fetch(stream.name, Array.new).map(&:position).compact.empty? raise WrongExpectedEventVersion unless resolved_version.nil? || last_stream_version(stream).equal?(resolved_version) serialized_records.each_with_index do |serialized_record, index| diff --git a/ruby_event_store/spec/in_memory_repository_spec.rb b/ruby_event_store/spec/in_memory_repository_spec.rb index 983f8c1aca..ae8df04cfc 100644 --- a/ruby_event_store/spec/in_memory_repository_spec.rb +++ b/ruby_event_store/spec/in_memory_repository_spec.rb @@ -70,5 +70,17 @@ module RubyEventStore expect(repository.global_position(eid2)).to eq(2) end + + it 'publishing with any position to stream with specific position raise an error' do + repository.append_to_stream([ + event0 = SRecord.new, + ], stream, version_auto) + + expect do + repository.append_to_stream([ + event1 = SRecord.new, + ], stream, version_any) + end.to raise_error(RubyEventStore::InMemoryRepository::UnsupportedVersionAnyUsage) + end end end