22
33class 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
14549end
0 commit comments