createMock(Config::class); $config->method('shouldAutoReceive')->willReturn(true); $tracking = $this->createMock(TrackingRepository::class); $tracking->expects(self::once())->method('isOrderDelivered')->with(29)->willReturn(true); $order = $this->createMock(Order::class); $order->method('getStatus')->willReturn('shipped'); $order->expects(self::once())->method('setStatus')->with('received')->willReturnSelf(); $order->expects(self::once())->method('addCommentToStatusHistory')->willReturnSelf(); $orders = $this->createMock(OrderRepositoryInterface::class); $orders->method('get')->with(29)->willReturn($order); $orders->expects(self::once())->method('save')->with($order)->willReturn($order); (new DeliveryStatusUpdater($config, $tracking, $orders))->execute([29, 29]); } public function testDoesNotLoadOrderUntilEveryPackageIsDelivered(): void { $config = $this->createMock(Config::class); $config->method('shouldAutoReceive')->willReturn(true); $tracking = $this->createMock(TrackingRepository::class); $tracking->method('isOrderDelivered')->with(29)->willReturn(false); $orders = $this->createMock(OrderRepositoryInterface::class); $orders->expects(self::never())->method('get'); $orders->expects(self::never())->method('save'); (new DeliveryStatusUpdater($config, $tracking, $orders))->execute([29]); } }