Skip to content

Commit 64cee1e

Browse files
authored
Merge pull request #410 from magento-l3/L3-PR-2023-09-13
L3 pr 2023 09 13
2 parents d6d53b2 + fbc6127 commit 64cee1e

File tree

2 files changed

+122
-5
lines changed

2 files changed

+122
-5
lines changed

InventoryIndexer/Plugin/InventoryApi/ReindexAfterSourceItemsSavePlugin.php

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,13 @@
77

88
namespace Magento\InventoryIndexer\Plugin\InventoryApi;
99

10+
use Magento\Framework\Exception\LocalizedException;
1011
use Magento\InventoryApi\Api\Data\SourceItemInterface;
1112
use Magento\InventoryApi\Api\SourceItemsSaveInterface;
13+
use Magento\InventoryCatalogApi\Api\DefaultSourceProviderInterface;
1214
use Magento\InventoryIndexer\Indexer\SourceItem\GetSourceItemIds;
1315
use Magento\InventoryIndexer\Indexer\SourceItem\SourceItemIndexer;
1416

15-
/**
16-
* Reindex after source items save plugin
17-
*/
1817
class ReindexAfterSourceItemsSavePlugin
1918
{
2019
/**
@@ -27,31 +26,63 @@ class ReindexAfterSourceItemsSavePlugin
2726
*/
2827
private $sourceItemIndexer;
2928

29+
/**
30+
* @var DefaultSourceProviderInterface
31+
*/
32+
private $defaultSourceProvider;
33+
3034
/**
3135
* @param GetSourceItemIds $getSourceItemIds
3236
* @param SourceItemIndexer $sourceItemIndexer
37+
* @param DefaultSourceProviderInterface $defaultSourceProvider
3338
*/
34-
public function __construct(GetSourceItemIds $getSourceItemIds, SourceItemIndexer $sourceItemIndexer)
35-
{
39+
public function __construct(
40+
GetSourceItemIds $getSourceItemIds,
41+
SourceItemIndexer $sourceItemIndexer,
42+
DefaultSourceProviderInterface $defaultSourceProvider
43+
) {
3644
$this->getSourceItemIds = $getSourceItemIds;
3745
$this->sourceItemIndexer = $sourceItemIndexer;
46+
$this->defaultSourceProvider = $defaultSourceProvider;
3847
}
3948

4049
/**
50+
* Run reindex process for saved source items
51+
*
4152
* @param SourceItemsSaveInterface $subject
4253
* @param void $result
4354
* @param SourceItemInterface[] $sourceItems
4455
* @return void
56+
* @throws LocalizedException
4557
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
4658
*/
4759
public function afterExecute(
4860
SourceItemsSaveInterface $subject,
4961
$result,
5062
array $sourceItems
5163
) {
64+
$sourceItems = $this->sanitizeSources($sourceItems);
5265
$sourceItemIds = $this->getSourceItemIds->execute($sourceItems);
5366
if (count($sourceItemIds)) {
5467
$this->sourceItemIndexer->executeList($sourceItemIds);
5568
}
5669
}
70+
71+
/**
72+
* Remove items with default source
73+
*
74+
* @param array $sourceItems
75+
* @return array
76+
*/
77+
private function sanitizeSources(array $sourceItems) : array
78+
{
79+
$result = [];
80+
$defaultCode = $this->defaultSourceProvider->getCode();
81+
foreach ($sourceItems as $item) {
82+
if ($item->getSourceCode() !== $defaultCode) {
83+
$result[] = $item;
84+
}
85+
}
86+
return $result;
87+
}
5788
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\InventoryIndexer\Test\Unit\Plugin\InventoryApi;
9+
10+
use Magento\InventoryApi\Api\SourceItemsSaveInterface;
11+
use Magento\InventoryApi\Api\Data\SourceItemInterface;
12+
use Magento\InventoryCatalogApi\Api\DefaultSourceProviderInterface;
13+
use Magento\InventoryIndexer\Indexer\SourceItem\GetSourceItemIds;
14+
use Magento\InventoryIndexer\Indexer\SourceItem\SourceItemIndexer;
15+
use Magento\InventoryIndexer\Plugin\InventoryApi\ReindexAfterSourceItemsSavePlugin;
16+
use PHPUnit\Framework\MockObject\MockObject;
17+
use PHPUnit\Framework\TestCase;
18+
19+
class ReindexAfterSourceItemsSavePluginTest extends TestCase
20+
{
21+
/**
22+
* @var GetSourceItemIds|MockObject
23+
*/
24+
private $getSourceItemIds;
25+
26+
/**
27+
* @var SourceItemIndexer|MockObject
28+
*/
29+
private $sourceItemIndexer;
30+
31+
/**
32+
* @var DefaultSourceProviderInterface|MockObject
33+
*/
34+
private $defaultSourceProvider;
35+
36+
/**
37+
* @var SourceItemInterface|MockObject
38+
*/
39+
private $sourceItem;
40+
41+
/**
42+
* @var SourceItemsSaveInterface|MockObject
43+
*/
44+
private $subject;
45+
46+
/**
47+
* @var ReindexAfterSourceItemsSavePlugin
48+
*/
49+
private $plugin;
50+
51+
/**
52+
* @inheridoc
53+
*/
54+
protected function setUp(): void
55+
{
56+
parent::setUp();
57+
$this->getSourceItemIds = $this->createMock(GetSourceItemIds::class);
58+
$this->sourceItemIndexer = $this->createMock(SourceItemIndexer::class);
59+
$this->defaultSourceProvider = $this->createMock(DefaultSourceProviderInterface::class);
60+
$this->sourceItem = $this->createMock(SourceItemInterface::class);
61+
$this->subject = $this->createMock(SourceItemsSaveInterface::class);
62+
$this->plugin = new ReindexAfterSourceItemsSavePlugin(
63+
$this->getSourceItemIds,
64+
$this->sourceItemIndexer,
65+
$this->defaultSourceProvider
66+
);
67+
}
68+
69+
public function testAfterExecuteWithDefaultSource() : void
70+
{
71+
$defaultCode = 'default';
72+
$this->defaultSourceProvider->expects($this->once())
73+
->method('getCode')
74+
->willReturn($defaultCode);
75+
$this->sourceItem->expects($this->once())
76+
->method('getSourceCode')
77+
->willReturn($defaultCode);
78+
$this->getSourceItemIds->expects($this->once())
79+
->method('execute')
80+
->with([])
81+
->willReturn([]);
82+
$this->sourceItemIndexer->expects($this->never())
83+
->method('executeList');
84+
$this->plugin->afterExecute($this->subject, null, [$this->sourceItem]);
85+
}
86+
}

0 commit comments

Comments
 (0)