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' ], ]; } }