diff --git a/src/Actions/UpdateMsiStock.php b/src/Actions/UpdateMsiStock.php index 37fce3a..794850a 100644 --- a/src/Actions/UpdateMsiStock.php +++ b/src/Actions/UpdateMsiStock.php @@ -23,6 +23,10 @@ public function update(MagentoStock $model): void $availableSources = $this->getAvailableSources(); + if ($model->msi_stock === null) { + return; + } + foreach ($model->msi_stock as $location => $quantity) { if (! in_array($location, $availableSources)) { continue; diff --git a/src/Models/MagentoStock.php b/src/Models/MagentoStock.php index d5e4a01..1a0dd85 100644 --- a/src/Models/MagentoStock.php +++ b/src/Models/MagentoStock.php @@ -18,8 +18,8 @@ * @property bool $backorders * @property bool $magento_backorders_enabled * @property int $quantity - * @property array $msi_stock - * @property array $msi_status + * @property ?array $msi_stock + * @property ?array $msi_status * @property bool $retrieve * @property bool $update * @property ?Carbon $last_retrieved diff --git a/tests/Actions/UpdateMsiStockTest.php b/tests/Actions/UpdateMsiStockTest.php index c6be6f1..5da3865 100644 --- a/tests/Actions/UpdateMsiStockTest.php +++ b/tests/Actions/UpdateMsiStockTest.php @@ -135,6 +135,32 @@ function (Request $request) use ($expectedPayload) { Event::assertDispatched(StockUpdatedEvent::class); } + public function test_it_stops_when_stockdata_is_empty(): void + { + Http::fake([ + '*/rest/all/V1/inventory/source-items*' => Http::response(), + ]); + + /** @var UpdateMsiStock $action */ + $action = app(UpdateMsiStock::class); + + /** @var MagentoStock $stock */ + $stock = MagentoStock::query()->first(); + + $stock->msi_stock = null; + + $stock->msi_status = null; + + $action->update($stock); + + Event::assertNotDispatched(StockUpdatedEvent::class); + + Http::assertNotSent(function (Request $request): bool { + return $request->method() === 'POST' && + $request->url() === 'http://magento.test/rest/all/async/V1/inventory/source-items'; + }); + } + public function test_it_logs_error(): void { Http::fake([