/**
  * Test record retrieval.
  */
 public function testGetNextRecords()
 {
     $chunkSize = 3;
     $processedRecords = [(object) ['operationType' => ActionTypes::CREATE, 'documentType' => 'product', 'documentId' => 1234, 'dateTime' => new DateTime('-1 year')], (object) ['operationType' => ActionTypes::CREATE, 'documentType' => 'product', 'documentId' => 1235, 'dateTime' => new DateTime('-1 year')], (object) ['operationType' => ActionTypes::CREATE, 'documentType' => 'product', 'documentId' => 1236, 'dateTime' => new DateTime('-1 year')]];
     $this->service->createStorage();
     $this->addRecords($processedRecords);
     $updatedRecords = $this->getConnection()->executeUpdate('UPDATE `' . self::TABLE_NAME . '_0`
             SET status = :status', ['status' => 1]);
     $this->assertSame(count($processedRecords), $updatedRecords);
     $unprocessedRecords = [(object) ['operationType' => ActionTypes::CREATE, 'documentType' => 'product', 'documentId' => 2221, 'dateTime' => new DateTime('-6 months 11:00')], (object) ['operationType' => ActionTypes::CREATE, 'documentType' => 'product', 'documentId' => 2222, 'dateTime' => new DateTime('-6 months 10:00')], (object) ['operationType' => ActionTypes::CREATE, 'documentType' => 'product', 'documentId' => 2223, 'dateTime' => new DateTime('-6 months 09:00')], (object) ['operationType' => ActionTypes::UPDATE, 'documentType' => 'product', 'documentId' => 2224, 'dateTime' => new DateTime('-6 months 13:00')], (object) ['operationType' => ActionTypes::UPDATE, 'documentType' => 'product', 'documentId' => 2224, 'dateTime' => new DateTime('-6 months 14:00')]];
     $this->addRecords($unprocessedRecords);
     $nextRecords = $this->service->getNextRecords($chunkSize);
     $this->assertSame($chunkSize, count($nextRecords));
     // Test record order.
     $this->assertEquals($unprocessedRecords[2]->documentId, $nextRecords[0]['document_id']);
     $this->assertEquals($unprocessedRecords[2]->dateTime, new DateTime($nextRecords[0]['timestamp']));
     $this->assertEquals($unprocessedRecords[1]->documentId, $nextRecords[1]['document_id']);
     $this->assertEquals($unprocessedRecords[1]->dateTime, new DateTime($nextRecords[1]['timestamp']));
     $this->assertEquals($unprocessedRecords[0]->documentId, $nextRecords[2]['document_id']);
     $this->assertEquals($unprocessedRecords[0]->dateTime, new DateTime($nextRecords[2]['timestamp']));
     // Test retrieval of more records than are available.
     $nextRecords = $this->service->getNextRecords(136524);
     $this->assertEquals(1, count($nextRecords));
     $this->assertEquals($unprocessedRecords[4]->documentId, $nextRecords[0]['document_id']);
     $unprocessedRecords = [(object) ['operationType' => ActionTypes::CREATE, 'documentType' => 'product', 'documentId' => 2225, 'dateTime' => new DateTime('-6 months 11:00')], (object) ['operationType' => ActionTypes::CREATE, 'documentType' => 'product', 'documentId' => 2226, 'dateTime' => new DateTime('-6 months 10:00')], (object) ['operationType' => ActionTypes::CREATE, 'documentType' => 'category', 'documentId' => 311, 'dateTime' => new DateTime('-6 months 09:00')], (object) ['operationType' => ActionTypes::UPDATE, 'documentType' => 'category', 'documentId' => 312, 'dateTime' => new DateTime('-6 months 13:00')], (object) ['operationType' => ActionTypes::UPDATE, 'documentType' => 'category', 'documentId' => 313, 'dateTime' => new DateTime('-6 months 14:00')]];
     $this->addRecords($unprocessedRecords);
     $nextRecords = $this->service->getNextRecords(10, 'product');
     foreach ($nextRecords as $record) {
         $this->assertEquals('product', $record['document_type']);
         $this->assertNull($record['shop_id']);
     }
     $documents = $this->getConnection()->fetchAll('SELECT * FROM `' . self::TABLE_NAME . '_0`
         WHERE `document_type` = :documentType', ['documentType' => 'product']);
     foreach ($documents as $record) {
         $this->assertEquals(1, $record['status']);
     }
     $nextRecords = $this->service->getNextRecords(10, 'category');
     $this->assertEquals(3, count($nextRecords));
     foreach ($nextRecords as $record) {
         $this->assertEquals('category', $record['document_type']);
         $this->assertNull($record['shop_id']);
     }
 }
 /**
  * Test next records retrieval with invalid parameters.
  */
 public function testGetNextRecords()
 {
     $this->assertSame([], $this->service->getNextRecords(0));
 }