@@ -138,3 +138,28 @@ def publish_events(self):
138138 for product in self .products .seen :
139139 while product .events :
140140 self .events_published .append (product .events .pop (0 ))
141+
142+
143+ def test_reallocates_if_necessary_isolated ():
144+ uow = FakeUnitOfWorkWithFakeMessageBus ()
145+
146+ # test setup as before
147+ event_history = [
148+ events .BatchCreated ("batch1" , "INDIFFERENT-TABLE" , 50 , None ),
149+ events .BatchCreated ("batch2" , "INDIFFERENT-TABLE" , 50 , date .today ()),
150+ events .AllocationRequired ("order1" , "INDIFFERENT-TABLE" , 20 ),
151+ events .AllocationRequired ("order2" , "INDIFFERENT-TABLE" , 20 ),
152+ ]
153+ for e in event_history :
154+ messagebus .handle (e , uow )
155+ [batch1 , batch2 ] = uow .products .get (sku = "INDIFFERENT-TABLE" ).batches
156+ assert batch1 .available_quantity == 10
157+ assert batch2 .available_quantity == 50
158+
159+ messagebus .handle (events .BatchQuantityChanged ("batch1" , 25 ), uow )
160+
161+ # assert on new events emitted rather than downstream side-effects
162+ [reallocation_event ] = uow .events_published
163+ assert isinstance (reallocation_event , events .AllocationRequired )
164+ assert reallocation_event .orderid in {"order1" , "order2" }
165+ assert reallocation_event .sku == "INDIFFERENT-TABLE"
0 commit comments