@@ -6,24 +6,67 @@ class RefundableProductsTest < Test
66
77 def test_product_quantity_available_to_refund
88 order_id = SecureRandom . uuid
9+ order_number = Fulfillment ::FakeNumberGenerator ::FAKE_NUMBER
910 product_1_id = SecureRandom . uuid
1011 product_2_id = SecureRandom . uuid
1112 product_3_id = SecureRandom . uuid
12- stream_name = "Ordering::Order$#{ order_id } "
13- projection = RefundableProducts . call ( order_id )
13+ stream_name = "Pricing::Offer$#{ order_id } "
1414
1515 event_store = RubyEventStore ::Client . new ( repository : RubyEventStore ::InMemoryRepository . new )
1616
17- event_store . publish ( ItemAddedToBasket . new ( data : { order_id : order_id , product_id : product_3_id } ) , stream_name : stream_name )
18- event_store . publish ( ItemAddedToBasket . new ( data : { order_id : order_id , product_id : product_1_id } ) , stream_name : stream_name )
19- event_store . publish ( ItemAddedToBasket . new ( data : { order_id : order_id , product_id : product_2_id } ) , stream_name : stream_name )
20- event_store . publish ( ItemAddedToBasket . new ( data : { order_id : order_id , product_id : product_2_id } ) , stream_name : stream_name )
21- event_store . publish ( ItemRemovedFromBasket . new ( data : { order_id : order_id , product_id : product_2_id } ) , stream_name : stream_name )
22- event_store . publish ( ItemRemovedFromBasket . new ( data : { order_id : order_id , product_id : product_3_id } ) , stream_name : stream_name )
17+ event_store . publish (
18+ [
19+ Pricing ::OfferAccepted . new (
20+ data : {
21+ order_id : order_id ,
22+ order_lines : [
23+ { product_id : product_3_id , quantity : 1 } ,
24+ { product_id : product_1_id , quantity : 1 } ,
25+ { product_id : product_2_id , quantity : 2 } ,
26+ ]
27+ } ) ,
28+ Pricing ::OfferAccepted . new (
29+ data : {
30+ order_id : order_id ,
31+ order_lines : [
32+ { product_id : product_1_id , quantity : 1 } ,
33+ { product_id : product_2_id , quantity : 1 }
34+ ]
35+ }
36+ ) ,
37+ ] ,
38+ stream_name : stream_name
39+ )
40+ event_store . publish (
41+ [ Fulfillment ::OrderRegistered . new ( data : { order_id :, order_number : } ) ] ,
42+ stream_name : "Fulfillment::Order$#{ order_id } "
43+ )
2344
24- refundable_products = projection . run ( event_store )
45+ refundable_products = RefundableProducts . new . call ( event_store , order_id )
2546
26- assert_equal ( [ { product_id : product_1_id , quantity : 1 } , { product_id : product_2_id , quantity : 1 } ] , refundable_products )
47+ assert_equal ( [ { product_id : product_1_id , quantity : 1 } , { product_id : product_2_id , quantity : 1 } ] , refundable_products )
48+ end
49+
50+ def test_order_have_to_be_placed
51+ order_id = SecureRandom . uuid
52+ stream_name = "Pricing::Offer$#{ order_id } "
53+
54+ event_store = RubyEventStore ::Client . new ( repository : RubyEventStore ::InMemoryRepository . new )
55+
56+ event_store . publish (
57+ [
58+ Pricing ::OfferAccepted . new (
59+ data : {
60+ order_id : order_id ,
61+ order_lines : [
62+ { product_id : SecureRandom . uuid , quantity : 1 } ,
63+ { product_id : SecureRandom . uuid , quantity : 1 } ,
64+ ]
65+ } ) ,
66+ ] ,
67+ stream_name : stream_name )
68+
69+ assert_nil ( RefundableProducts . new . call ( event_store , order_id ) )
2770 end
2871 end
2972end
0 commit comments