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)); }