/**
  * Tests key() method.
  */
 public function testKey()
 {
     $this->syncStorage->expects($this->once())->method('getChunk')->will($this->returnValue([0 => ['document_id' => 11, 'type' => ActionTypes::DELETE]]));
     $iterator = new SyncStorageImportIterator(['sync_storage' => $this->syncStorage, 'shop_id' => 1, 'document_type' => 'product'], $this->elasticsearchRepository, $this->entityManager, 'Product');
     $iterator->next();
     $this->assertEquals(11, $iterator->key());
 }
 /**
  * Test getChunk action.
  */
 public function testSyncStorageGetChunk()
 {
     $valueMap = [[1, null, null, [1]], [2, null, null, [1, 2]], [0, null, null, null]];
     $this->storageManager->expects($this->exactly(count($valueMap) - 1))->method('getNextRecords')->will($this->returnValueMap($valueMap));
     foreach ($valueMap as $record) {
         $records = $this->service->getChunk($record[0], $record[1], $record[2]);
         $this->assertEquals(count($record[3]), count($records));
     }
 }
 /**
  * {@inheritdoc}
  */
 public function next()
 {
     $this->currentChunk = $this->syncStorage->getChunk(1, $this->documentType, $this->shopId);
     if (empty($this->currentChunk)) {
         $this->valid = false;
         return;
     }
     $this->currentEntity = $this->entityManager->getRepository($this->entityClass)->find($this->currentChunk[0]['document_id']);
     if (!empty($this->currentEntity) || $this->currentChunk[0]['type'] == ActionTypes::DELETE) {
         $this->valid = true;
         return;
     }
     $this->valid = false;
 }
 /**
  * {@inheritdoc}
  */
 protected function persistDocument()
 {
     switch ($this->syncStorageData['type']) {
         case ActionTypes::CREATE:
             $this->manager->persist($this->importItem->getDocument());
             break;
         case ActionTypes::UPDATE:
             $this->manager->persist($this->importItem->getDocument());
             break;
         case ActionTypes::DELETE:
             $this->manager->getRepository($this->documentType)->remove($this->importItem->getDocument()->getId());
             break;
         default:
             $this->log(sprintf('Failed to update document of type  %s id: %s: no valid operation type defined', get_class($this->importItem->getDocument()), $this->importItem->getDocument()->getId()));
             return false;
     }
     $this->syncStorage->deleteItem($this->syncStorageData['id'], [$this->syncStorageData['shop_id']]);
     return true;
 }