Skip to content

Commit 360d6fb

Browse files
committed
Test mapper using RubyEventStore::Record instead of Hash objects.
- more realistic test - removed if statement from the mapper
1 parent 3d91107 commit 360d6fb

File tree

2 files changed

+35
-141
lines changed

2 files changed

+35
-141
lines changed

rails_application/lib/transformations/refund_to_return_event_mapper.rb

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,19 @@ def dump(record)
99
end
1010

1111
def load(record)
12-
if record.is_a?(Hash)
13-
old_class_name = record[:event_type]
14-
else
15-
old_class_name = record.event_type
16-
end
17-
12+
old_class_name = record.event_type
1813
new_class_name = @class_map.fetch(old_class_name, old_class_name)
1914

2015
if old_class_name != new_class_name
21-
if record.is_a?(Hash)
22-
transformed_data = transform_payload(record[:data], old_class_name)
23-
record.merge(event_type: new_class_name, data: transformed_data)
24-
else
25-
transformed_data = transform_payload(record.data, old_class_name)
26-
record.class.new(
27-
event_id: record.event_id,
28-
event_type: new_class_name,
29-
data: transformed_data,
30-
metadata: record.metadata,
31-
timestamp: record.timestamp,
32-
valid_at: record.valid_at
33-
)
34-
end
16+
transformed_data = transform_payload(record.data, old_class_name)
17+
record.class.new(
18+
event_id: record.event_id,
19+
event_type: new_class_name,
20+
data: transformed_data,
21+
metadata: record.metadata,
22+
timestamp: record.timestamp,
23+
valid_at: record.valid_at
24+
)
3525
else
3626
record
3727
end

rails_application/test/transformations/refund_to_return_event_mapper_test.rb

Lines changed: 25 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -2,112 +2,7 @@
22

33
class RefundToReturnEventMapperTest < ActiveSupport::TestCase
44
def setup
5-
@remapper = Transformations::RefundToReturnEventMapper.new(
6-
'Ordering::DraftRefundCreated' => 'Ordering::DraftReturnCreated',
7-
'Ordering::ItemAddedToRefund' => 'Ordering::ItemAddedToReturn',
8-
'Ordering::ItemRemovedFromRefund' => 'Ordering::ItemRemovedFromReturn'
9-
)
10-
end
11-
12-
def test_maps_event_class_names
13-
test_cases = [
14-
['Ordering::DraftRefundCreated', 'Ordering::DraftReturnCreated'],
15-
['Ordering::ItemAddedToRefund', 'Ordering::ItemAddedToReturn'],
16-
['Ordering::ItemRemovedFromRefund', 'Ordering::ItemRemovedFromReturn']
17-
]
18-
19-
test_cases.each do |old_name, expected_new_name|
20-
event_data = {
21-
event_type: old_name,
22-
data: { id: SecureRandom.uuid },
23-
metadata: {}
24-
}
25-
26-
result = @remapper.load(event_data)
27-
28-
assert_equal expected_new_name, result[:event_type], "Failed to map #{old_name}"
29-
end
30-
end
31-
32-
def test_leaves_new_event_names_unchanged
33-
new_event_data = {
34-
event_type: 'Ordering::DraftReturnCreated',
35-
data: { return_id: SecureRandom.uuid },
36-
metadata: {}
37-
}
38-
39-
result = @remapper.load(new_event_data)
40-
41-
assert_equal new_event_data, result
42-
end
43-
44-
def test_leaves_unrelated_events_unchanged
45-
unrelated_event_data = {
46-
event_type: 'SomeOther::Event',
47-
data: { id: SecureRandom.uuid },
48-
metadata: {}
49-
}
50-
51-
result = @remapper.load(unrelated_event_data)
52-
53-
assert_equal unrelated_event_data, result
54-
end
55-
56-
def test_transforms_draft_created_payload_completely
57-
refund_id = SecureRandom.uuid
58-
order_id = SecureRandom.uuid
59-
60-
old_event_data = {
61-
event_type: 'Ordering::DraftRefundCreated',
62-
data: { refund_id: refund_id, order_id: order_id, refundable_products: [] },
63-
metadata: {}
64-
}
65-
66-
result = @remapper.load(old_event_data)
67-
68-
assert_equal refund_id, result[:data][:return_id]
69-
assert_equal [], result[:data][:returnable_products]
70-
assert_nil result[:data][:refund_id]
71-
assert_nil result[:data][:refundable_products]
72-
assert_equal order_id, result[:data][:order_id]
73-
end
74-
75-
def test_transforms_item_events_payload
76-
refund_id = SecureRandom.uuid
77-
78-
test_cases = [
79-
'Ordering::ItemAddedToRefund',
80-
'Ordering::ItemRemovedFromRefund'
81-
]
82-
83-
test_cases.each do |old_event_type|
84-
old_event_data = {
85-
event_type: old_event_type,
86-
data: { refund_id: refund_id, order_id: SecureRandom.uuid, product_id: SecureRandom.uuid },
87-
metadata: {}
88-
}
89-
90-
result = @remapper.load(old_event_data)
91-
92-
assert_equal refund_id, result[:data][:return_id], "Failed to transform refund_id to return_id for #{old_event_type}"
93-
assert_nil result[:data][:refund_id], "refund_id should be removed for #{old_event_type}"
94-
end
95-
end
96-
97-
def test_dump_returns_item_unchanged
98-
event_data = {
99-
event_type: 'Ordering::DraftReturnCreated',
100-
data: { return_id: SecureRandom.uuid },
101-
metadata: {}
102-
}
103-
104-
result = @remapper.dump(event_data)
105-
106-
assert_equal event_data, result
107-
end
108-
109-
def test_event_store_with_simple_transformation
110-
mapper = RubyEventStore::Mappers::PipelineMapper.new(
5+
@mapper = RubyEventStore::Mappers::PipelineMapper.new(
1116
RubyEventStore::Mappers::Pipeline.new(
1127
Transformations::RefundToReturnEventMapper.new(
1138
'Ordering::DraftRefundCreated' => 'Ordering::DraftReturnCreated',
@@ -116,30 +11,39 @@ def test_event_store_with_simple_transformation
11611
)
11712
)
11813
)
119-
120-
event_store = RailsEventStore::Client.new(
14+
15+
@event_store = RailsEventStore::Client.new(
12116
repository: RubyEventStore::InMemoryRepository.new,
122-
mapper: mapper
17+
mapper: @mapper
12318
)
19+
end
12420

125-
return_id = SecureRandom.uuid
126-
order_id = SecureRandom.uuid
21+
def test_transforms_old_events_when_reading
22+
stream = "Test$#{SecureRandom.uuid}"
12723

128-
old_event = Ordering::ItemAddedToReturn.new(
129-
data: {
130-
return_id: return_id,
131-
order_id: order_id,
132-
product_id: SecureRandom.uuid
133-
}
24+
old_event = Ordering::DraftReturnCreated.new(
25+
data: { return_id: SecureRandom.uuid, order_id: SecureRandom.uuid, returnable_products: [] }
13426
)
13527

136-
event_store.publish(old_event, stream_name: "Return$#{return_id}")
28+
@event_store.publish(old_event, stream_name: stream)
29+
events = @event_store.read.stream(stream).to_a
30+
31+
assert_equal 1, events.size
32+
assert_equal 'Ordering::DraftReturnCreated', events.first.class.name
33+
end
34+
35+
def test_new_events_work_normally
36+
stream = "Test$#{SecureRandom.uuid}"
37+
38+
new_event = Ordering::ItemAddedToReturn.new(
39+
data: { return_id: SecureRandom.uuid, order_id: SecureRandom.uuid, product_id: SecureRandom.uuid }
40+
)
13741

138-
events = event_store.read.stream("Return$#{return_id}").to_a
42+
@event_store.publish(new_event, stream_name: stream)
43+
events = @event_store.read.stream(stream).to_a
13944

14045
assert_equal 1, events.size
14146
assert_equal 'Ordering::ItemAddedToReturn', events.first.class.name
142-
assert_equal return_id, events.first.data[:return_id]
143-
assert_nil events.first.data[:refund_id]
47+
assert_not_nil events.first.data[:return_id]
14448
end
14549
end

0 commit comments

Comments
 (0)