Skip to content

Commit 1a796c7

Browse files
mostlyobviousfidel
andcommitted
Document current behaviour more thoroughly before altering it
#1108 Co-authored-by: Szymon Fiedler <[email protected]>
1 parent 3744f27 commit 1a796c7

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed
+126
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
# frozen_string_literal: true
2+
3+
require "spec_helper"
4+
require "ruby_event_store"
5+
require "ruby_event_store/spec/event_repository_lint"
6+
7+
module RubyEventStore
8+
module ActiveRecord
9+
::RSpec.describe EventRepository do
10+
helper = SpecHelper.new
11+
mk_repository = -> { EventRepository.new(serializer: helper.serializer) }
12+
13+
let(:repository) { mk_repository.call }
14+
let(:specification) do
15+
Specification.new(
16+
SpecificationReader.new(repository, Mappers::Default.new)
17+
)
18+
end
19+
20+
let(:stream) { Stream.new(SecureRandom.uuid) }
21+
let(:foo) { SRecord.new(event_id: SecureRandom.uuid) }
22+
let(:bar) { SRecord.new(event_id: SecureRandom.uuid) }
23+
let(:baz) { SRecord.new(event_id: SecureRandom.uuid) }
24+
let(:global_to_a) { repository.read(specification.result).to_a }
25+
let(:stream_to_a) do
26+
repository.read(specification.stream(stream.name).result).to_a
27+
end
28+
29+
around(:each) { |example| helper.run_lifecycle { example.run } }
30+
31+
around(:each) do |example|
32+
::ActiveRecord::Base.logger =
33+
Logger
34+
.new(STDOUT)
35+
.tap do |l|
36+
l.formatter =
37+
proc { |severity, datetime, progname, msg| "#{msg}\n" }
38+
end
39+
example.run
40+
::ActiveRecord::Base.logger = nil
41+
end
42+
43+
specify "no application transaction, event_id conflict" do
44+
repository.append_to_stream([foo], stream, ExpectedVersion.any)
45+
46+
expect do
47+
repository.append_to_stream([bar], stream, ExpectedVersion.any)
48+
repository.append_to_stream([foo], stream, ExpectedVersion.any)
49+
end.to raise_error(EventDuplicatedInStream)
50+
51+
expect(global_to_a).to eq([foo, bar])
52+
expect(stream_to_a).to eq([foo, bar])
53+
end
54+
55+
specify "no application transaction, expected_version conflict" do
56+
repository.append_to_stream([foo], stream, ExpectedVersion.none)
57+
58+
expect do
59+
repository.append_to_stream([bar], stream, ExpectedVersion.any)
60+
repository.append_to_stream([baz], stream, ExpectedVersion.none)
61+
end.to raise_error(WrongExpectedEventVersion)
62+
63+
expect(global_to_a).to eq([foo, bar])
64+
expect(stream_to_a).to eq([foo, bar])
65+
end
66+
67+
specify "application transaction, event_id conflict" do
68+
repository.append_to_stream([foo], stream, ExpectedVersion.any)
69+
70+
expect do
71+
helper.with_transaction do
72+
repository.append_to_stream([bar], stream, ExpectedVersion.any)
73+
repository.append_to_stream([foo], stream, ExpectedVersion.any)
74+
end
75+
end.to raise_error(EventDuplicatedInStream)
76+
77+
expect(global_to_a).to eq([foo])
78+
expect(stream_to_a).to eq([foo])
79+
end
80+
81+
specify "application transaction, expected_version conflict" do
82+
repository.append_to_stream([foo], stream, ExpectedVersion.none)
83+
84+
expect do
85+
helper.with_transaction do
86+
repository.append_to_stream([bar], stream, ExpectedVersion.any)
87+
repository.append_to_stream([baz], stream, ExpectedVersion.none)
88+
end
89+
end.to raise_error(WrongExpectedEventVersion)
90+
91+
expect(global_to_a).to eq([foo])
92+
expect(stream_to_a).to eq([foo])
93+
end
94+
95+
specify "application transaction, event_id conflict — rescued" do
96+
repository.append_to_stream([foo], stream, ExpectedVersion.any)
97+
98+
helper.with_transaction do
99+
begin
100+
repository.append_to_stream([bar], stream, ExpectedVersion.any)
101+
repository.append_to_stream([foo], stream, ExpectedVersion.any)
102+
rescue EventDuplicatedInStream
103+
end
104+
end
105+
106+
expect(global_to_a).to eq([foo, bar])
107+
expect(stream_to_a).to eq([foo, bar])
108+
end
109+
110+
specify "application transaction, expected_version conflict — rescued" do
111+
repository.append_to_stream([foo], stream, ExpectedVersion.none)
112+
113+
helper.with_transaction do
114+
begin
115+
repository.append_to_stream([bar], stream, ExpectedVersion.any)
116+
repository.append_to_stream([baz], stream, ExpectedVersion.none)
117+
rescue WrongExpectedEventVersion
118+
end
119+
end
120+
121+
expect(global_to_a).to eq([foo, bar])
122+
expect(stream_to_a).to eq([foo, bar])
123+
end
124+
end
125+
end
126+
end

0 commit comments

Comments
 (0)