Skip to content

Commit e39d12c

Browse files
author
Yaroslav Onischenko
committed
MAGETWO-37729: Stock is not updated when Stock indexer is in Update on Schedule mode
1 parent 8ff2e8a commit e39d12c

File tree

3 files changed

+40
-5
lines changed
  • app/code/Magento
  • dev/tests/integration/testsuite/Magento/CatalogInventory/Model/Stock

3 files changed

+40
-5
lines changed

app/code/Magento/CatalogInventory/Model/Resource/Stock/Item.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ protected function _afterSave(AbstractModel $object)
123123
parent::_afterSave($object);
124124
/** @var StockItemInterface $object */
125125
if ($this->processIndexEvents) {
126+
$this->stockIndexerProcessor->markIndexerAsInvalid();
126127
$this->stockIndexerProcessor->reindexRow($object->getProductId());
127128
}
128129
return $this;

app/code/Magento/Indexer/etc/crontab.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77
-->
88
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../Cron/etc/crontab.xsd">
9-
<group id="index">
9+
<group id="default">
1010
<job name="indexer_reindex_all_invalid" instance="Magento\Indexer\Model\Processor" method="reindexAllInvalid">
1111
<schedule>* * * * *</schedule>
1212
</job>

dev/tests/integration/testsuite/Magento/CatalogInventory/Model/Stock/ItemTest.php

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
*/
66
namespace Magento\CatalogInventory\Model\Stock;
77

8+
use Magento\Indexer\Model\Indexer\State;
9+
810
class ItemTest extends \PHPUnit_Framework_TestCase
911
{
1012
/**
@@ -21,6 +23,7 @@ protected function setUp()
2123

2224
/**
2325
* @magentoDataFixture Magento/Catalog/_files/products.php
26+
* @magentoAppIsolation enabled
2427
*/
2528
public function testSaveWithNullQty()
2629
{
@@ -31,11 +34,11 @@ public function testSaveWithNullQty()
3134
$product->load(1);
3235

3336
/** @var \Magento\CatalogInventory\Model\Stock\StockItemRepository $stockItemRepository */
34-
$stockItemRepository = $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
37+
$stockItemRepository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
3538
->create('Magento\CatalogInventory\Model\Stock\StockItemRepository');
3639

3740
/** @var \Magento\CatalogInventory\Api\StockItemCriteriaInterface $stockItemCriteria */
38-
$stockItemCriteria = $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
41+
$stockItemCriteria = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
3942
->create('Magento\CatalogInventory\Api\StockItemCriteriaInterface');
4043

4144
$savedStockItem = current($stockItemRepository->getList($stockItemCriteria)->getItems());
@@ -60,15 +63,46 @@ public function testSaveWithNullQty()
6063

6164
/**
6265
* @magentoDataFixture Magento/Catalog/_files/products.php
66+
* @magentoAppIsolation enabled
67+
*/
68+
public function testIndexerInvalidation()
69+
{
70+
/** @var \Magento\CatalogInventory\Model\Stock\StockItemRepository $stockItemRepository */
71+
$stockItemRepository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
72+
->create('Magento\CatalogInventory\Model\Stock\StockItemRepository');
73+
74+
/** @var \Magento\CatalogInventory\Api\StockItemCriteriaInterface $stockItemCriteria */
75+
$stockItemCriteria = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
76+
->create('Magento\CatalogInventory\Api\StockItemCriteriaInterface');
77+
/** @var \Magento\CatalogInventory\Model\Indexer\Stock\Processor $indexerProcessor */
78+
$indexerProcessor = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
79+
->create('Magento\CatalogInventory\Model\Indexer\Stock\Processor');
80+
$indexer = $indexerProcessor->getIndexer();
81+
$indexer->setScheduled(true);
82+
$indexer->getState()->setStatus(State::STATUS_VALID)->save();
83+
84+
/** @var \Magento\CatalogInventory\Api\Data\StockItemInterface $savedStockItem */
85+
$savedStockItem = current($stockItemRepository->getList($stockItemCriteria)->getItems());
86+
$savedStockItem->setQty(1);
87+
$savedStockItem->setIsInStock(false);
88+
$savedStockItem->save();
89+
90+
91+
$this->assertEquals('invalid', $indexerProcessor->getIndexer()->getStatus());
92+
}
93+
94+
/**
95+
* @magentoDataFixture Magento/Catalog/_files/products.php
96+
* @magentoAppIsolation enabled
6397
*/
6498
public function testStockStatusChangedAuto()
6599
{
66100
/** @var \Magento\CatalogInventory\Model\Stock\StockItemRepository $stockItemRepository */
67-
$stockItemRepository = $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
101+
$stockItemRepository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
68102
->create('Magento\CatalogInventory\Model\Stock\StockItemRepository');
69103

70104
/** @var \Magento\CatalogInventory\Api\StockItemCriteriaInterface $stockItemCriteria */
71-
$stockItemCriteria = $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
105+
$stockItemCriteria = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
72106
->create('Magento\CatalogInventory\Api\StockItemCriteriaInterface');
73107

74108
$savedStockItem = current($stockItemRepository->getList($stockItemCriteria)->getItems());

0 commit comments

Comments
 (0)