sandthorn_driver_sequel 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/Guardfile +7 -0
  4. data/lib/sandthorn_driver_sequel/access/aggregate_access.rb +50 -0
  5. data/lib/sandthorn_driver_sequel/access/event_access.rb +81 -0
  6. data/lib/sandthorn_driver_sequel/access/snapshot_access.rb +87 -0
  7. data/lib/sandthorn_driver_sequel/access.rb +20 -0
  8. data/lib/sandthorn_driver_sequel/errors.rb +47 -5
  9. data/lib/sandthorn_driver_sequel/event_query.rb +90 -0
  10. data/lib/sandthorn_driver_sequel/event_store.rb +90 -153
  11. data/lib/sandthorn_driver_sequel/event_store_context.rb +1 -0
  12. data/lib/sandthorn_driver_sequel/migration.rb +9 -1
  13. data/lib/sandthorn_driver_sequel/old_event_store.rb +228 -0
  14. data/lib/sandthorn_driver_sequel/sequel_driver.rb +8 -25
  15. data/lib/sandthorn_driver_sequel/storage.rb +46 -0
  16. data/lib/sandthorn_driver_sequel/utilities/array.rb +13 -0
  17. data/lib/sandthorn_driver_sequel/utilities.rb +1 -0
  18. data/lib/sandthorn_driver_sequel/version.rb +1 -1
  19. data/lib/sandthorn_driver_sequel/wrappers/event_wrapper.rb +12 -0
  20. data/lib/sandthorn_driver_sequel/wrappers/snapshot_wrapper.rb +11 -0
  21. data/lib/sandthorn_driver_sequel/wrappers.rb +2 -0
  22. data/lib/sandthorn_driver_sequel.rb +5 -0
  23. data/sandthorn_driver_sequel.gemspec +2 -2
  24. data/spec/aggregate_access_spec.rb +97 -0
  25. data/spec/asking_for_aggregates_to_snapshot_spec.rb +7 -4
  26. data/spec/driver_interface_spec.rb +23 -40
  27. data/spec/event_access_spec.rb +96 -0
  28. data/spec/event_store_with_context_spec.rb +4 -4
  29. data/spec/get_events_spec.rb +20 -13
  30. data/spec/migration_specifying_domain_spec.rb +10 -10
  31. data/spec/saving_events_spec.rb +42 -39
  32. data/spec/saving_snapshot_spec.rb +7 -7
  33. data/spec/snapshot_access_spec.rb +119 -0
  34. data/spec/spec_helper.rb +0 -4
  35. data/spec/storage_spec.rb +66 -0
  36. metadata +39 -18
@@ -14,7 +14,7 @@ module SandthornDriverSequel
14
14
  before(:each) {save_test_events}
15
15
 
16
16
  context "when asking for type 'Bar' and max event count 5" do
17
- let(:needs_snapshot) { event_store.obsolete_snapshots class_names: [Bar], max_event_distance: 5 }
17
+ let(:needs_snapshot) { event_store.obsolete_snapshots aggregate_types: [Bar], max_event_distance: 5 }
18
18
  context "and no snapshots exist" do
19
19
  it "should return that id 2 with class Bar need to be snapshotted" do
20
20
  expect(needs_snapshot.length).to eql 1
@@ -23,8 +23,11 @@ module SandthornDriverSequel
23
23
  end
24
24
  end
25
25
  context "and a recent snapshot exists" do
26
- before(:each) { event_store.save_snapshot({ event_data: "YO MAN", aggregate_version: 11 }, aggregates[1][:id], aggregates[1][:class_name])}
27
- it "should return empty array" do
26
+ before(:each) do
27
+ snapshot_data = { event_data: "YO MAN", aggregate_version: 11 }
28
+ event_store.save_snapshot(snapshot_data, aggregates[1][:id])
29
+ end
30
+ it "should return nil" do
28
31
  expect(needs_snapshot).to be_empty
29
32
  end
30
33
  end
@@ -44,7 +47,7 @@ module SandthornDriverSequel
44
47
  save_events for_2_2, 1
45
48
  end
46
49
  def save_events events, aggregate_index
47
- event_store.save_events events, events.first[:aggregate_version]-1, aggregates[aggregate_index][:id], aggregates[aggregate_index][:class_name]
50
+ event_store.save_events events, aggregates[aggregate_index][:id], aggregates[aggregate_index][:class_name]
48
51
  end
49
52
 
50
53
  def event_generator count: 1, start_at: 1
@@ -4,45 +4,28 @@ module SandthornDriverSequel
4
4
  describe EventStore do
5
5
  before(:each) { prepare_for_test }
6
6
  context "interface structure" do
7
- let(:subject) {event_store}
8
- it "should respond to save_events" do
9
- subject.should respond_to("save_events")
10
- end
11
-
12
- it "should respond to save_snapshot" do
13
- subject.should respond_to("save_snapshot")
14
- end
15
-
16
- it "should respond to get_aggregate" do
17
- subject.should respond_to("get_aggregate")
18
- end
19
-
20
- it "should respond to get_aggregate_events" do
21
- subject.should respond_to("get_aggregate_events")
22
- end
23
-
24
- it "should respond to get_aggregate_list_by_typename" do
25
- subject.should respond_to("get_aggregate_list_by_typename")
26
- end
27
-
28
- it "should respond to get_all_typenames" do
29
- subject.should respond_to("get_all_typenames")
30
- end
31
-
32
- it "should respond to get_snapshot" do
33
- subject.should respond_to("get_snapshot")
34
- end
35
-
36
- it "should respond to get_new_events_after_event_id_matching_classname" do
37
- subject.should respond_to("get_new_events_after_event_id_matching_classname")
38
- end
39
-
40
- it "should respond to get_events_after_sequence_id" do
41
- subject.should respond_to(:get_events)
42
- end
43
- it("should respond to url"){ expect(subject).to respond_to :url }
44
- it("should respond to context"){ expect(subject).to respond_to :context }
45
- it("should respond to driver"){ expect(subject).to respond_to :driver }
46
- end
7
+ let(:subject) { event_store }
8
+ methods = [
9
+ :save_events,
10
+ :save_snapshot,
11
+ :get_aggregate_events_from_snapshot,
12
+ :get_aggregate,
13
+ :get_aggregate_events,
14
+ :get_aggregate_ids,
15
+ :get_all_types,
16
+ :get_snapshot,
17
+ :get_events,
18
+ :url,
19
+ :context,
20
+ :driver
21
+ ]
22
+
23
+ methods.each do |method|
24
+ it "responds to #{method}" do
25
+ expect(subject).to respond_to(method)
26
+ end
27
+ end
28
+
29
+ end
47
30
  end
48
31
  end
@@ -0,0 +1,96 @@
1
+ require 'spec_helper'
2
+
3
+ module SandthornDriverSequel
4
+ describe EventAccess do
5
+ include EventStoreContext
6
+
7
+ before do
8
+ prepare_for_test
9
+ end
10
+
11
+ let(:context) { :test }
12
+ let(:db) { Sequel.connect(event_store_url)}
13
+ let(:aggregate_id) { SecureRandom.uuid }
14
+ let(:aggregate) do
15
+ aggregate_access.register_aggregate(aggregate_id, "foo")
16
+ end
17
+ let(:storage) { Storage.new(db, :test) }
18
+ let(:aggregate_access) { AggregateAccess.new(storage) }
19
+ let(:snapshot_access) { SnapshotAccess.new(storage)}
20
+ let(:access) { EventAccess.new(storage) }
21
+
22
+ let(:events) do
23
+ [
24
+ {
25
+ aggregate_version: 1,
26
+ event_name: "new",
27
+ event_data: "new_data"
28
+ },{
29
+ aggregate_version: 2,
30
+ event_name: "foo",
31
+ event_data: "foo_data"
32
+ }
33
+ ]
34
+ end
35
+
36
+ describe "#store_events" do
37
+
38
+ it "handles both arrays and single events" do
39
+ access.store_events(aggregate, events[0])
40
+ events = access.find_events_by_aggregate_id(aggregate_id)
41
+ expect(events.length).to eq(1)
42
+ end
43
+
44
+ it "adds timestamps to all events and associates them to the aggregate" do
45
+ access.store_events(aggregate, events)
46
+ events = access.find_events_by_aggregate_id(aggregate_id)
47
+ expect(events.map(&:timestamp).all?).to be_truthy
48
+ end
49
+
50
+ it "updates the aggregate version" do
51
+ access.store_events(aggregate, events)
52
+ events = access.find_events_by_aggregate_id(aggregate_id)
53
+ version = events.map(&:aggregate_version).max
54
+
55
+ reloaded_aggregate = aggregate_access.find(aggregate.id)
56
+ expect(reloaded_aggregate.aggregate_version).to eq(version)
57
+ end
58
+
59
+ context "when the aggregate version of an event is incorrect" do
60
+ it "throws an error" do
61
+ event = { aggregate_version: 100 }
62
+ expect { access.store_events(aggregate, [event])}.to raise_error(Errors::ConcurrencyError)
63
+ end
64
+ end
65
+ end
66
+
67
+ describe "#find_events_by_aggregate_id" do
68
+ context "when there are events" do
69
+ it "returns correct events" do
70
+ access.store_events(aggregate, events)
71
+
72
+ stored_events = access.find_events_by_aggregate_id(aggregate.aggregate_id)
73
+ expect(stored_events.map(&:aggregate_table_id)).to all(eq(aggregate.id))
74
+ expect(stored_events.size).to eq(events.size)
75
+ expect(stored_events).to all(respond_to(:merge))
76
+ end
77
+ end
78
+ end
79
+
80
+ describe "#after_snapshot" do
81
+ it "returns events after the given snapshot" do
82
+ access.store_events(aggregate, events.first)
83
+
84
+ snapshot_id = snapshot_access.record_snapshot(aggregate.aggregate_id, { aggregate_version: 1, event_data: "foo"})
85
+ snapshot = snapshot_access.find(snapshot_id)
86
+
87
+ access.store_events(aggregate, events.last)
88
+
89
+ events = access.after_snapshot(snapshot)
90
+ expect(events.count).to eq(1)
91
+ expect(events.first[:event_data]).to eq("foo_data")
92
+ end
93
+ end
94
+
95
+ end
96
+ end
@@ -5,7 +5,7 @@ module SandthornDriverSequel
5
5
  before(:each) { prepare_for_test context: context; prepare_for_test context: nil; }
6
6
  let(:event_store_with_context) { EventStore.new url: event_store_url, context: context }
7
7
  let(:event_store_without_context) { EventStore.new url: event_store_url }
8
- context("when saving in one context and retreiving in another") do
8
+ context("when saving in one context and retrieving in another") do
9
9
  let(:test_events) do
10
10
  e = []
11
11
  e << {aggregate_version: 1, event_name: "new", event_args: nil, event_data: "---\n:method_name: new\n:method_args: []\n:attribute_deltas:\n- :attribute_name: :@aggregate_id\n :old_value: \n :new_value: 0a74e545-be84-4506-8b0a-73e947856327\n"}
@@ -14,10 +14,10 @@ module SandthornDriverSequel
14
14
  end
15
15
  let(:aggregate_id) {"c0456e26-e29a-4f67-92fa-130b3a31a39b"}
16
16
  it "should not find them" do
17
- event_store_without_context.save_events test_events, 0, aggregate_id, String
18
- events = event_store_without_context.get_aggregate_events aggregate_id, String
17
+ event_store_without_context.save_events test_events, aggregate_id, String
18
+ events = event_store_without_context.get_aggregate_events aggregate_id
19
19
  expect(events.length).to eql test_events.length
20
- events_2 = event_store_with_context.get_aggregate_events aggregate_id, String
20
+ events_2 = event_store_with_context.get_aggregate_events aggregate_id
21
21
  expect(events_2.length).to eql 0
22
22
  end
23
23
  end
@@ -4,35 +4,42 @@ module SandthornDriverSequel
4
4
  describe EventStore do
5
5
  before(:each) { prepare_for_test }
6
6
  let(:test_events_a) do
7
- e = []
7
+ e = []
8
8
  e << {aggregate_version: 1, event_name: "new", event_data: "---\n:method_name: new\n:method_args: []\n:attribute_deltas:\n- :attribute_name: :@aggregate_id\n :old_value: \n :new_value: 0a74e545-be84-4506-8b0a-73e947856327\n"}
9
9
  e << {aggregate_version: 2, event_name: "foo", event_data: "A2"}
10
10
  e << {aggregate_version: 3, event_name: "bard", event_data: "A3"}
11
11
  end
12
12
  let(:aggregate_id_a) {"c0456e26-e29a-4f67-92fa-130b3a31a39a"}
13
13
  let(:test_events_b) do
14
- e = []
14
+ e = []
15
15
  e << {aggregate_version: 1, event_name: "new", event_data: "B1" }
16
16
  e << {aggregate_version: 2, event_name: "foo", event_data: "B2"}
17
17
  e << {aggregate_version: 3, event_name: "bar", event_data: "B3"}
18
18
  end
19
19
  let(:aggregate_id_b) {"c0456e26-1234-4f67-92fa-130b3a31a39a"}
20
20
  let(:test_events_c) do
21
- e = []
21
+ e = []
22
22
  e << {aggregate_version: 1, event_name: "new", event_data: "C1" }
23
23
  end
24
24
  let(:test_events_c_2) do
25
- e = []
25
+ e = []
26
26
  e << {aggregate_version: 2, event_name: "flubber", event_data: "C2" }
27
27
  end
28
28
  let(:aggregate_id_c) {"c0456e26-2345-4f67-92fa-130b3a31a39a"}
29
29
  before(:each) do
30
- event_store.save_events test_events_a, 0, aggregate_id_a, SandthornDriverSequel::EventStore
31
- event_store.save_events test_events_c, 0, aggregate_id_c, String
32
- event_store.save_events test_events_b, 0, aggregate_id_b, SandthornDriverSequel::SequelDriver
33
- event_store.save_events test_events_c_2, 1, aggregate_id_c, String
30
+ event_store.save_events test_events_a, aggregate_id_a, SandthornDriverSequel::EventStore
31
+ event_store.save_events test_events_c, aggregate_id_c, String
32
+ event_store.save_events test_events_b, aggregate_id_b, SandthornDriverSequel::SequelDriver
33
+ event_store.save_events test_events_c_2, aggregate_id_c, String
34
34
  end
35
- context "when using get_events" do
35
+
36
+ let(:event) { event_store.get_events(take: 1).first }
37
+
38
+ it "returns events that can be merged" do
39
+ expect(event).to respond_to(:merge)
40
+ end
41
+
42
+ context "when using get_events" do
36
43
  context "and using take" do
37
44
  let(:events) {event_store.get_events after_sequence_number: 0, include_events: [:new], take: 2}
38
45
  it "should find 2 events" do
@@ -51,8 +58,8 @@ module SandthornDriverSequel
51
58
  context "and combining args" do
52
59
  let(:events) do
53
60
  all = event_store.get_events after_sequence_number: 0
54
- first_seq_number = all[0][:sequence_number]
55
- event_store.get_events after_sequence_number: first_seq_number , exclude_events: [:foo], include_events: [:new, :foo, "bar", :flubber], take: 100
61
+ first_seq_number = all[0][:sequence_number]
62
+ event_store.get_events after_sequence_number: first_seq_number , exclude_events: [:foo], include_events: [:new, "bar", :flubber], take: 100
56
63
  end
57
64
  it "should find 4 events" do
58
65
  events.length.should eql 4
@@ -89,7 +96,7 @@ module SandthornDriverSequel
89
96
  events.each { |e| e[:sequence_number].should be > check; check = e[:sequence_number] }
90
97
  end
91
98
  it "should contain only events for aggregate_id_a and aggregate_id_c" do
92
- events.each { |e| [aggregate_id_a, aggregate_id_c].include?(e[:aggregate_id]).should be_true }
99
+ events.each { |e| [aggregate_id_a, aggregate_id_c].include?(e[:aggregate_id]).should be_truthy }
93
100
  end
94
101
  end
95
102
  context "and getting events for SandthornDriverSequel::EventStore after 0" do
@@ -147,4 +154,4 @@ module SandthornDriverSequel
147
154
  end
148
155
 
149
156
  end
150
- end
157
+ end
@@ -7,29 +7,29 @@ module SandthornDriverSequel
7
7
  aggregates = :aggregates
8
8
  snapshots = :snapshots
9
9
  if context
10
- events = "#{context}_#{events}".to_sym
11
- aggregates = "#{context}_#{aggregates}".to_sym
12
- snapshots = "#{context}_#{snapshots}".to_sym
10
+ events = "#{context}_#{events}".to_sym
11
+ aggregates = "#{context}_#{aggregates}".to_sym
12
+ snapshots = "#{context}_#{snapshots}".to_sym
13
13
  end
14
14
  migration.driver.execute do |db|
15
- expect(db.table_exists? events).to be_true, "expected table :#{events} to exist, but it didn't"
16
- expect(db.table_exists? aggregates).to be_true, "expected table :#{aggregates} to exist, but it didn't"
17
- expect(db.table_exists? snapshots).to be_true, "expected table :#{snapshots} to exist, but it didn't"
18
- end
15
+ expect(db.table_exists? events).to be_truthy, "expected table :#{events} to exist, but it didn't"
16
+ expect(db.table_exists? aggregates).to be_truthy, "expected table :#{aggregates} to exist, but it didn't"
17
+ expect(db.table_exists? snapshots).to be_truthy, "expected table :#{snapshots} to exist, but it didn't"
18
+ end
19
19
  end
20
20
  let(:migration) { Migration.new url: event_store_url, context: context }
21
21
  before(:each) { migration.migrate! }
22
- context "when default (nil) eventstore contex" do
22
+ context "when default (nil) eventstore contex" do
23
23
  let(:context) { nil }
24
24
  it "should create the tables events, aggregates and snapshots" do
25
25
  check_tables
26
26
  end
27
27
  end
28
- context "when specifying context" do
28
+ context "when specifying context" do
29
29
  let(:context) { :another_domain }
30
30
  it "should create the tables events, aggregates and snapshots" do
31
31
  check_tables context
32
32
  end
33
33
  end
34
34
  end
35
- end
35
+ end
@@ -6,68 +6,69 @@ module SandthornDriverSequel
6
6
  before(:each) { prepare_for_test }
7
7
  context "when saving a prefectly sane event stream" do
8
8
  let(:test_events) do
9
- e = []
9
+ e = []
10
10
  e << {aggregate_version: 1, event_name: "new", event_args: nil, event_data: "---\n:method_name: new\n:method_args: []\n:attribute_deltas:\n- :attribute_name: :@aggregate_id\n :old_value: \n :new_value: 0a74e545-be84-4506-8b0a-73e947856327\n"}
11
11
  e << {aggregate_version: 2, event_name: "foo", event_args: ["bar"], event_data: "noop"}
12
12
  e << {aggregate_version: 3, event_name: "flubber", event_args: ["bar"] , event_data: "noop"}
13
13
  end
14
- let(:aggregate_id) {"c0456e26-e29a-4f67-92fa-130b3a31a39a"}
15
- it "should be able to save and retreive events on the aggregate" do
16
- event_store.save_events test_events, 0, aggregate_id, String
17
- events = event_store.get_aggregate_events aggregate_id, String
14
+
15
+ let(:aggregate_id) { "c0456e26-e29a-4f67-92fa-130b3a31a39a" }
16
+
17
+ it "should be able to save and retrieve events on the aggregate" do
18
+ event_store.save_events test_events, aggregate_id, String
19
+ events = event_store.get_aggregate_events aggregate_id
18
20
  events.length.should eql test_events.length
19
21
  end
20
- it "should fail if aggregate does not exist and version is above 0" do
21
- expect { event_store.save_events test_events, 1, aggregate_id, String }.to raise_error SandthornDriverSequel::Errors::NoAggregateError
22
- end
23
- it "should fail if originating version is wrong" do
24
- event_store.save_events test_events, 0, aggregate_id, String
25
- expect { event_store.save_events test_events, 102, aggregate_id, String }.to raise_error SandthornDriverSequel::Errors::WrongAggregateVersionError
26
- end
22
+
27
23
  it "should have correct keys when asking for events" do
28
- event_store.save_events test_events, 0, aggregate_id, String
24
+ event_store.save_events test_events, aggregate_id, String
29
25
  events = event_store.get_aggregate aggregate_id, String
30
26
  event = events.first
31
27
  event[:event_data].should eql(test_events.first[:event_data])
32
- event[:event_name].should eql("new")
33
- event[:aggregate_id].should eql aggregate_id
34
- event[:aggregate_version].should eql 1
35
- event[:sequence_number].should be_a(Fixnum)
36
- event[:timestamp].should be_a(Time)
28
+ event[:event_name].should eql("new")
29
+ event[:aggregate_id].should eql aggregate_id
30
+ event[:aggregate_version].should eql 1
31
+ event[:sequence_number].should be_a(Fixnum)
32
+ event[:timestamp].should be_a(Time)
37
33
  end
38
- end
34
+ end
35
+
39
36
  context "when saving two aggregate types" do
40
37
  let(:test_events_1) do
41
- e = []
38
+ e = []
42
39
  e << {aggregate_version: 1, event_name: "new", event_args: nil, event_data: "---\n:method_name: new\n:method_args: []\n:attribute_deltas:\n- :attribute_name: :@aggregate_id\n :old_value: \n :new_value: 0a74e545-be84-4506-8b0a-73e947856327\n"}
43
- e << {aggregate_version: 2, event_name: "foo", event_args: ["bar", event_data: "noop"]}
44
- e << {aggregate_version: 3, event_name: "flubber", event_args: ["bar", event_data: "noop"]}
45
- end
40
+ e << {aggregate_version: 2, event_name: "foo", event_args: "bar", event_data: "noop"}
41
+ e << {aggregate_version: 3, event_name: "flubber", event_args: "bar", event_data: "noop"}
42
+ end
46
43
  let(:test_events_2) do
47
- e = []
44
+ e = []
48
45
  e << {aggregate_version: 1, event_name: "new", event_args: nil, event_data: "---\n:method_name: new\n:method_args: []\n:attribute_deltas:\n- :attribute_name: :@aggregate_id\n :old_value: \n :new_value: 0a74e545-be84-4506-8b0a-73e947856327\n"}
49
- end
46
+ end
50
47
  let(:aggregate_id_1) {"c0456e26-e29a-4f67-92fa-130b3a31a39a"}
51
48
  let(:aggregate_id_2) {"c0456e26-e92b-4f67-92fa-130b3a31b93b"}
52
49
  let(:aggregate_id_3) {"c0456e26-e92b-1234-92fa-130b3a31b93b"}
50
+
53
51
  before(:each) do
54
- event_store.save_events test_events_1, 0, aggregate_id_1, String
55
- event_store.save_events test_events_2, 0, aggregate_id_2, Hash
56
- event_store.save_events test_events_2, 0, aggregate_id_3, String
57
- end
52
+ event_store.save_events test_events_1, aggregate_id_1, String
53
+ event_store.save_events test_events_2, aggregate_id_2, Hash
54
+ event_store.save_events test_events_2, aggregate_id_3, String
55
+ end
56
+
58
57
  it "both types should exist in get_all_typenames in alphabetical order" do
59
- names = event_store.get_all_typenames
58
+ names = event_store.get_all_types
60
59
  names.length.should eql 2
61
60
  names.first.should eql "Hash"
62
61
  names.last.should eql "String"
63
- end
62
+ end
63
+
64
64
  it "should list the aggregate ids when asking for get_aggregate_list_by_typename" do
65
- ids = event_store.get_aggregate_list_by_typename String
65
+ ids = event_store.get_aggregate_ids(aggregate_type: String)
66
66
  ids.length.should eql 2
67
- ids.any? { |e| e == aggregate_id_1 }.should be_true
68
- ids.any? { |e| e == aggregate_id_3 }.should be_true
67
+ ids.any? { |e| e == aggregate_id_1 }.should be_truthy
68
+ ids.any? { |e| e == aggregate_id_3 }.should be_truthy
69
69
  end
70
- end
70
+ end
71
+
71
72
  context "when saving events that are serilized with msgpack" do
72
73
  let(:test_data) { {name: "test", hash: {t: 123}} }
73
74
  let(:test_events) do
@@ -76,12 +77,14 @@ module SandthornDriverSequel
76
77
  e << {aggregate_version: 1, event_name: "new", event_args: nil, event_data: data}
77
78
  end
78
79
  let(:aggregate_id_1) {"c0456e26-e29a-4f67-92fa-130b3a31a39a"}
79
- it "should save and get events that are serilized with msgpack" do
80
- event_store.save_events test_events, 0, aggregate_id_1, String
80
+
81
+ it "should save and get events that are serialized with msgpack" do
82
+ event_store.save_events test_events, aggregate_id_1, String
81
83
  events = event_store.get_aggregate aggregate_id_1, String
82
84
  expect(MessagePack.unpack(events.first[:event_data], symbolize_keys: true)).to eql test_data
83
- end
85
+ end
86
+
84
87
  end
85
88
 
86
89
  end
87
- end
90
+ end