Skip to content

Commit 94f0327

Browse files
authored
Merge pull request #32 from justbetter/feature/compare-backorders
2 parents 9c6b820 + 5a641f8 commit 94f0327

File tree

4 files changed

+69
-6
lines changed

4 files changed

+69
-6
lines changed

src/Actions/Comparison/CompareMsiStock.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use JustBetter\MagentoStock\Contracts\Comparison\ComparesMsiStock;
1010
use JustBetter\MagentoStock\Events\DifferenceDetectedEvent;
1111
use JustBetter\MagentoStock\Models\Stock;
12+
use JustBetter\MagentoStock\Repositories\BaseRepository;
1213

1314
class CompareMsiStock implements ComparesMsiStock
1415
{
@@ -27,11 +28,22 @@ public function compare(Stock $stock): void
2728
->where('sku', '=', $stock->sku)
2829
->get();
2930

31+
$shouldCompareBackorders = BaseRepository::resolve()->backorders();
32+
33+
if ($shouldCompareBackorders) {
34+
$product = $this->magento
35+
->get('products/'.urlencode($stock->sku))
36+
->throw();
37+
38+
$backorders = $product->json('extension_attributes.stock_item.backorders');
39+
$backordersEqual = $stock->backorders->value === $backorders;
40+
}
41+
3042
$msiStock = $this->magento
3143
->lazy('inventory/source-items', $search)
3244
->collect();
3345

34-
if ($this->quantityEquals($stock, $msiStock)) {
46+
if ($this->quantityEquals($stock, $msiStock) && ($shouldCompareBackorders ? $backordersEqual : true)) {
3547
return;
3648
}
3749

src/Actions/Comparison/CompareSimpleStock.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use JustBetter\MagentoStock\Contracts\Comparison\ComparesSimpleStock;
88
use JustBetter\MagentoStock\Events\DifferenceDetectedEvent;
99
use JustBetter\MagentoStock\Models\Stock;
10+
use JustBetter\MagentoStock\Repositories\BaseRepository;
1011

1112
class CompareSimpleStock implements ComparesSimpleStock
1213
{
@@ -27,7 +28,11 @@ public function compare(Stock $stock): void
2728

2829
$stockItem = $product->json('extension_attributes.stock_item', []);
2930

30-
if ($stockItem === null || $this->quantityEquals($stock, $stockItem)) {
31+
$shouldCompareBackorders = BaseRepository::resolve()->backorders();
32+
33+
$isEqual = $this->quantityEquals($stock, $stockItem) && ($shouldCompareBackorders ? $stock->backorders->value === $stockItem['backorders'] : true);
34+
35+
if ($stockItem === null || $isEqual) {
3136
return;
3237
}
3338

tests/Actions/Comparison/CompareMsiStockTest.php

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
use Illuminate\Support\Facades\Http;
77
use JustBetter\MagentoProducts\Contracts\ChecksMagentoExistence;
88
use JustBetter\MagentoStock\Actions\Comparison\CompareMsiStock;
9+
use JustBetter\MagentoStock\Enums\Backorders;
910
use JustBetter\MagentoStock\Events\DifferenceDetectedEvent;
1011
use JustBetter\MagentoStock\Models\Stock;
12+
use JustBetter\MagentoStock\Tests\Fakes\FakeBackorderRepository;
1113
use JustBetter\MagentoStock\Tests\TestCase;
1214
use Mockery\MockInterface;
1315
use PHPUnit\Framework\Attributes\DataProvider;
@@ -37,24 +39,33 @@ public function it_does_nothing(): void
3739

3840
#[Test]
3941
#[DataProvider('dataProvider')]
40-
public function quantity_equals(array $magentoStocks, array $localStocks, bool $shouldUpdate): void
42+
public function it_checks_if_equals(array $magentoStocks, array $localStocks, int $magentoBackorders, Backorders $localBackorders, bool $shouldUpdate): void
4143
{
4244
Event::fake();
45+
config()->set('magento-stock.repository', FakeBackorderRepository::class);
4346

4447
$this->mock(ChecksMagentoExistence::class, function (MockInterface $mock) {
4548
$mock->shouldReceive('exists')->andReturnTrue();
4649
});
4750

4851
Http::fake([
49-
'*inventory/source-items*' => Http::response([
52+
'magento/rest/all/V1/products/%3A%3Asku%3A%3A' => Http::response([
53+
'extension_attributes' => [
54+
'stock_item' => [
55+
'backorders' => $magentoBackorders,
56+
],
57+
],
58+
]),
59+
'magento/rest/all/V1/inventory/source-items*' => Http::response([
5060
'items' => $magentoStocks,
5161
]),
52-
]);
62+
])->preventStrayRequests();
5363

5464
/** @var Stock $stock */
5565
$stock = Stock::query()->create([
5666
'sku' => '::sku::',
5767
'msi_stock' => $localStocks,
68+
'backorders' => $localBackorders,
5869
'in_stock' => true,
5970
'update' => false,
6071
]);
@@ -90,6 +101,8 @@ public static function dataProvider(): array
90101
],
91102
],
92103
'localStocks' => ['A' => 10, 'B' => 0],
104+
'magentoBackorders' => 0,
105+
'localBackorders' => Backorders::NoBackorders,
93106
'shouldUpdate' => true,
94107
],
95108
'equals' => [
@@ -104,6 +117,8 @@ public static function dataProvider(): array
104117
],
105118
],
106119
'localStocks' => ['A' => 10, 'B' => 10],
120+
'magentoBackorders' => 0,
121+
'localBackorders' => Backorders::NoBackorders,
107122
'shouldUpdate' => false,
108123
],
109124
'ignores extra local stock' => [
@@ -114,8 +129,23 @@ public static function dataProvider(): array
114129
],
115130
],
116131
'localStocks' => [],
132+
'magentoBackorders' => 0,
133+
'localBackorders' => Backorders::NoBackorders,
117134
'shouldUpdate' => false,
118135
],
136+
'backorders not equal' => [
137+
'magentoStocks' => [
138+
[
139+
'source_code' => 'A',
140+
'quantity' => 10,
141+
],
142+
],
143+
'localStocks' => [],
144+
'magentoBackorders' => 0,
145+
'localBackorders' => Backorders::Backorders,
146+
'shouldUpdate' => true,
147+
],
148+
119149
];
120150
}
121151
}

tests/Actions/Comparison/CompareSimpleStockTest.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
use Illuminate\Support\Facades\Http;
77
use JustBetter\MagentoProducts\Contracts\ChecksMagentoExistence;
88
use JustBetter\MagentoStock\Actions\Comparison\CompareSimpleStock;
9+
use JustBetter\MagentoStock\Enums\Backorders;
910
use JustBetter\MagentoStock\Events\DifferenceDetectedEvent;
1011
use JustBetter\MagentoStock\Models\Stock;
12+
use JustBetter\MagentoStock\Tests\Fakes\FakeBackorderRepository;
1113
use JustBetter\MagentoStock\Tests\TestCase;
1214
use Mockery\MockInterface;
1315
use PHPUnit\Framework\Attributes\DataProvider;
@@ -37,9 +39,10 @@ public function it_does_nothing(): void
3739

3840
#[Test]
3941
#[DataProvider('dataProvider')]
40-
public function test_quantity_equals(int $magentoQty, int $localQty, bool $shouldUpdate): void
42+
public function it_checks_if_equal(int $magentoQty, int $localQty, int $magentoBackorders, Backorders $localBackorders, bool $shouldUpdate): void
4143
{
4244
Event::fake();
45+
config()->set('magento-stock.repository', FakeBackorderRepository::class);
4346

4447
$this->mock(ChecksMagentoExistence::class, function (MockInterface $mock) {
4548
$mock->shouldReceive('exists')->andReturnTrue();
@@ -50,6 +53,7 @@ public function test_quantity_equals(int $magentoQty, int $localQty, bool $shoul
5053
'extension_attributes' => [
5154
'stock_item' => [
5255
'qty' => $magentoQty,
56+
'backorders' => $magentoBackorders,
5357
],
5458
],
5559
]),
@@ -59,6 +63,7 @@ public function test_quantity_equals(int $magentoQty, int $localQty, bool $shoul
5963
$stock = Stock::query()->create([
6064
'sku' => '::sku::',
6165
'quantity' => $localQty,
66+
'backorders' => $localBackorders,
6267
'in_stock' => true,
6368
'update' => false,
6469
]);
@@ -84,13 +89,24 @@ public static function dataProvider(): array
8489
'differs' => [
8590
'magentoQty' => 100,
8691
'localQty' => 1,
92+
'magentoBackorders' => 0,
93+
'localBackorders' => Backorders::NoBackorders,
8794
'shouldUpdate' => true,
8895
],
8996
'equals' => [
9097
'magentoQty' => 100,
9198
'localQty' => 100,
99+
'magentoBackorders' => 0,
100+
'localBackorders' => Backorders::NoBackorders,
92101
'shouldUpdate' => false,
93102
],
103+
'backorders' => [
104+
'magentoQty' => 100,
105+
'localQty' => 100,
106+
'magentoBackorders' => 0,
107+
'localBackorders' => Backorders::Backorders,
108+
'shouldUpdate' => true,
109+
],
94110
];
95111
}
96112
}

0 commit comments

Comments
 (0)