function it_complains_if_inventory_units_contain_different_stockables(StockableInterface $stockable1, StockableInterface $stockable2, InventoryUnitInterface $inventoryUnit1, InventoryUnitInterface $inventoryUnit2)
 {
     $inventoryUnit1->getStockable()->shouldBeCalled()->willReturn($stockable1);
     $inventoryUnit2->getStockable()->shouldBeCalled()->willReturn($stockable2);
     $stockable1->getOnHand()->shouldBeCalled()->willReturn(50);
     $this->shouldThrow(\InvalidArgumentException::class)->duringProcessBackorders([$inventoryUnit1, $inventoryUnit2]);
 }
 function it_decreases_stockable_on_hand_and_ignores_backordered_units($availabilityChecker, $backordersHandler, StockableInterface $stockable, InventoryUnitInterface $inventoryUnit1, InventoryUnitInterface $inventoryUnit2, InventoryUnitInterface $inventoryUnit3)
 {
     $inventoryUnit1->getStockable()->willReturn($stockable);
     $inventoryUnit2->getStockable()->willReturn($stockable);
     $inventoryUnit3->getStockable()->willReturn($stockable);
     $availabilityChecker->isStockSufficient($stockable, 3)->shouldBeCalled()->willReturn(true);
     $backordersHandler->processBackorders(array($inventoryUnit1, $inventoryUnit2, $inventoryUnit3))->shouldBeCalled();
     $inventoryUnit1->getInventoryState()->shouldBeCalled()->willReturn(InventoryUnitInterface::STATE_SOLD);
     $inventoryUnit2->getInventoryState()->shouldBeCalled()->willReturn(InventoryUnitInterface::STATE_BACKORDERED);
     $inventoryUnit3->getInventoryState()->shouldBeCalled()->willReturn(InventoryUnitInterface::STATE_BACKORDERED);
     $stockable->getOnHand()->shouldBeCalled()->willReturn(1);
     $stockable->setOnHand(0)->shouldBeCalled();
     $this->decrease(array($inventoryUnit1, $inventoryUnit2, $inventoryUnit3));
 }