@@ -138,3 +138,24 @@ 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+ messagebus .handle (events .BatchCreated ("batch1" , "INDIFFERENT-TABLE" , 50 , None ), uow )
148+ messagebus .handle (events .BatchCreated ("batch2" , "INDIFFERENT-TABLE" , 50 , date .today ()), uow )
149+ messagebus .handle (events .AllocationRequired ("order1" , "INDIFFERENT-TABLE" , 20 ), uow )
150+ messagebus .handle (events .AllocationRequired ("order2" , "INDIFFERENT-TABLE" , 20 ), uow )
151+ [batch1 , batch2 ] = uow .products .get (sku = "INDIFFERENT-TABLE" ).batches
152+ assert batch1 .available_quantity == 10
153+
154+ messagebus .handle (events .BatchQuantityChanged ("batch1" , 25 ), uow )
155+
156+ # assert on new events emitted rather than downstream side-effects
157+ [reallocation_event ] = uow .events_published
158+ assert isinstance (reallocation_event , events .AllocationRequired )
159+ assert reallocation_event .orderid in {'order1' , 'order2' }
160+ assert reallocation_event .sku == 'INDIFFERENT-TABLE'
161+
0 commit comments