187 lines
6.9 KiB
PHP
Executable File
187 lines
6.9 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
namespace Magento\Sales\Model\ResourceModel;
|
|
|
|
use Magento\Framework\ObjectManagerInterface;
|
|
use Magento\Sales\Model\Grid\LastUpdateTimeCache;
|
|
use Magento\Sales\Model\ResourceModel\Provider\UpdatedAtListProvider;
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
use PHPUnit\Framework\TestCase;
|
|
use Magento\Framework\DB\Adapter\Pdo\Mysql;
|
|
|
|
/**
|
|
* @magentoDataFixture Magento/Sales/_files/order_with_invoice_shipment_creditmemo.php
|
|
*/
|
|
class GridTest extends TestCase
|
|
{
|
|
/**
|
|
* @var ObjectManagerInterface
|
|
*/
|
|
private $objectManager;
|
|
|
|
/**
|
|
* @var LastUpdateTimeCache
|
|
*/
|
|
private $lastUpdateTimeCache;
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
protected function setUp(): void
|
|
{
|
|
$this->objectManager = Bootstrap::getObjectManager();
|
|
$this->lastUpdateTimeCache = $this->objectManager->get(LastUpdateTimeCache::class);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider gridDataProvider
|
|
* @param array $constructorArgs
|
|
* @param string $orderIdField
|
|
*/
|
|
public function testRefreshBySchedule(array $constructorArgs, string $orderIdField)
|
|
{
|
|
$constructorArgs['orderIdField'] = $constructorArgs['mainTableName'] . '.' . $orderIdField;
|
|
$constructorArgs['columns'] = [
|
|
$orderIdField => $constructorArgs['orderIdField'],
|
|
'created_at' => $constructorArgs['mainTableName'] . '.created_at',
|
|
'updated_at' => $constructorArgs['mainTableName'] . '.updated_at',
|
|
];
|
|
$constructorArgs['notSyncedDataProvider'] = $this->objectManager->get(UpdatedAtListProvider::class);
|
|
$grid = $this->objectManager->create(Grid::class, $constructorArgs);
|
|
|
|
$order = $this->objectManager->create(\Magento\Sales\Model\Order::class)
|
|
->loadByIncrementId('100000111');
|
|
$connection = $grid->getConnection();
|
|
$select = $connection->select()
|
|
->from($constructorArgs['mainTableName'], ['created_at', 'updated_at'])
|
|
->where($orderIdField, $order->getEntityId());
|
|
$data = $connection->fetchRow($select);
|
|
$this->assertNotEmpty($data);
|
|
|
|
//refresh data without cached updated_at
|
|
$this->lastUpdateTimeCache->remove($constructorArgs['gridTableName']);
|
|
$this->assertEmpty($this->lastUpdateTimeCache->get($constructorArgs['gridTableName']));
|
|
sleep(1);
|
|
$data['created_at'] = $data['updated_at'] = date('Y-m-d H:i:s');
|
|
$connection->update(
|
|
$constructorArgs['mainTableName'],
|
|
$data,
|
|
sprintf('%s = %d', $orderIdField, $order->getEntityId())
|
|
);
|
|
$grid->refreshBySchedule();
|
|
|
|
$select = $connection->select()
|
|
->from($constructorArgs['gridTableName'], ['created_at', 'updated_at'])
|
|
->where($orderIdField, $order->getEntityId());
|
|
$gridData = $connection->fetchRow($select);
|
|
$this->assertEquals($data, $gridData);
|
|
|
|
//refresh data with cached updated_at
|
|
$this->assertNotEmpty($this->lastUpdateTimeCache->get($constructorArgs['gridTableName']));
|
|
sleep(1);
|
|
$data['created_at'] = $data['updated_at'] = date('Y-m-d H:i:s');
|
|
$connection->update(
|
|
$constructorArgs['mainTableName'],
|
|
$data,
|
|
sprintf('%s = %d', $orderIdField, $order->getEntityId())
|
|
);
|
|
$grid->refreshBySchedule();
|
|
|
|
$select = $connection->select()
|
|
->from($constructorArgs['gridTableName'], ['created_at', 'updated_at'])
|
|
->where($orderIdField, $order->getEntityId());
|
|
$gridData = $connection->fetchRow($select);
|
|
$this->assertEquals($data, $gridData);
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function gridDataProvider(): array
|
|
{
|
|
return [
|
|
'Magento\Sales\Model\ResourceModel\Order\Grid' => [
|
|
[
|
|
'mainTableName' => 'sales_order',
|
|
'gridTableName' => 'sales_order_grid',
|
|
],
|
|
'entity_id',
|
|
],
|
|
'ShipmentGridAggregator' => [
|
|
[
|
|
'mainTableName' => 'sales_shipment',
|
|
'gridTableName' => 'sales_shipment_grid',
|
|
],
|
|
'order_id',
|
|
],
|
|
'CreditmemoGridAggregator' => [
|
|
[
|
|
'mainTableName' => 'sales_creditmemo',
|
|
'gridTableName' => 'sales_creditmemo_grid',
|
|
],
|
|
'order_id',
|
|
],
|
|
'Magento\Sales\Model\ResourceModel\Order\Invoice\Grid' => [
|
|
[
|
|
'mainTableName' => 'sales_invoice',
|
|
'gridTableName' => 'sales_invoice_grid',
|
|
],
|
|
'order_id',
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider shipmentGridDataProvider
|
|
* @param array $constructorArgs
|
|
* @param string $orderIdField
|
|
* @param string $orderIdIndex
|
|
*/
|
|
public function testSalesShipmentGridOrderIdFieldIndex(array $constructorArgs, string $orderIdField, string $orderIdIndex)
|
|
{
|
|
$constructorArgs['orderIdField'] = $constructorArgs['mainTableName'] . '.' . $orderIdField;
|
|
$constructorArgs['columns'] = [
|
|
$orderIdField => $constructorArgs['orderIdField'],
|
|
'created_at' => $constructorArgs['mainTableName'] . '.created_at',
|
|
'updated_at' => $constructorArgs['mainTableName'] . '.updated_at',
|
|
];
|
|
$constructorArgs['notSyncedDataProvider'] = $this->objectManager->get(UpdatedAtListProvider::class);
|
|
$grid = $this->objectManager->create(Grid::class, $constructorArgs);
|
|
/** @var Mysql $connection */
|
|
$connection = $grid->getConnection();
|
|
$order = $this->objectManager->create(\Magento\Sales\Model\Order::class)
|
|
->loadByIncrementId('100000111');
|
|
$select = $connection->select()
|
|
->from($constructorArgs['gridTableName'], ['order_id'])
|
|
->where("$orderIdField = ?", $order->getEntityId());
|
|
$gridTableIndexes = $connection->getIndexList($constructorArgs['gridTableName']);
|
|
$gridFieldData = $connection->fetchRow($select);
|
|
$testFiledData = ['order_id' => $order->getEntityId()];
|
|
$this->assertEquals($testFiledData, $gridFieldData);
|
|
$this->assertArrayHasKey($orderIdIndex, $gridTableIndexes);
|
|
$this->assertEquals($gridTableIndexes[$orderIdIndex]['fields'][0], $orderIdField);
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function shipmentGridDataProvider(): array
|
|
{
|
|
return [
|
|
'Magento\Sales\Model\ResourceModel\Grid' => [
|
|
[
|
|
'mainTableName' => 'sales_shipment',
|
|
'gridTableName' => 'sales_shipment_grid',
|
|
],
|
|
'order_id',
|
|
'SALES_SHIPMENT_GRID_ORDER_ID'
|
|
],
|
|
];
|
|
}
|
|
}
|