/** * 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)); }