/**
  * @param array $data
  * @param Document $document
  */
 public function __construct(array $data = [], Document $document = null)
 {
     $this->data = $data;
     if ($document !== null) {
         $this->setStructure($document->getStructure());
         $this->setDocument($document);
     }
 }
 /**
  * @return void
  */
 public function testTransform()
 {
     $srcHandler = $this->initHandler($this->sourceDocument, 0);
     $destHandler = $this->initHandler($this->destDocument, 1);
     $this->recordTransformer->init();
     $this->sourceDocument->expects($this->any())->method('getName')->willReturn('source_document_name');
     $recordFrom = $this->getMock('Migration\\ResourceModel\\Record', [], [], '', false);
     $recordFrom->expects($this->any())->method('getFields')->will($this->returnValue(['field1', 'field2']));
     $recordFrom->expects($this->any())->method('getData')->will($this->returnValue(['field1' => 1, 'field2' => 2]));
     $recordTo = $this->getMock('Migration\\ResourceModel\\Record', [], [], '', false);
     $recordTo->expects($this->any())->method('getFields')->will($this->returnValue(['field2']));
     $recordTo->expects($this->any())->method('setData')->with(['field2' => 2]);
     $field2Handler = $this->getMock('Migration\\Handler\\SetValue', ['handle'], [], '', false);
     $field2Handler->expects($this->once())->method('handle');
     $srcHandler->expects($this->any())->method('getHandlers')->willReturn(['field2' => $field2Handler]);
     $destHandler->expects($this->any())->method('getHandlers')->willReturn([]);
     $this->mapReader->expects($this->any())->method('getFieldMap')->with('source_document_name', 'field1')->willReturnArgument(1);
     $this->recordTransformer->transform($recordFrom, $recordTo);
 }
 /**
  * @return void
  */
 public function testPerformFieldFail()
 {
     $this->integrity = new Integrity($this->destination, $this->logger, $this->progress);
     $this->progress->expects($this->once())->method('start')->with(1);
     $this->progress->expects($this->once())->method('advance');
     $this->progress->expects($this->never())->method('finish');
     $this->destination->expects($this->once())->method('getDocumentList')->willReturn(['rating', 'rating_store']);
     $this->structure->expects($this->once())->method('getFields')->willReturn(['field' => []]);
     $this->document->expects($this->once())->method('getStructure')->willReturn($this->structure);
     $this->destination->expects($this->once())->method('getDocument')->with('rating')->willReturn($this->document);
     $this->logger->expects($this->once())->method('error')->with('"is_active" field does not exist in "rating" document of the destination resource');
     $this->assertFalse($this->integrity->perform());
 }
 /**
  * @param bool|false $dataTypeMismatch
  * @return void
  */
 protected function setupFieldsValidation($dataTypeMismatch = false)
 {
     $dataTypeSource = $dataTypeMismatch ? 'varchar' : 'int';
     $fieldsSource = ['field1' => ['DATA_TYPE' => $dataTypeSource]];
     $structureSource = $this->getMockBuilder('\\Migration\\ResourceModel\\Structure')->disableOriginalConstructor()->setMethods([])->getMock();
     $structureSource->expects($this->any())->method('getFields')->will($this->returnValue($fieldsSource));
     $this->documentSource = $this->getMockBuilder('\\Migration\\ResourceModel\\Document')->disableOriginalConstructor()->getMock();
     $this->documentSource->expects($this->any())->method('getStructure')->will($this->returnValue($structureSource));
     $dataTypeDestination = 'int';
     $fieldsDestination = ['field1' => ['DATA_TYPE' => $dataTypeDestination]];
     $structureDestination = $this->getMockBuilder('\\Migration\\ResourceModel\\Structure')->disableOriginalConstructor()->setMethods([])->getMock();
     $structureDestination->expects($this->any())->method('getFields')->will($this->returnValue($fieldsDestination));
     $this->documentDestination = $this->getMockBuilder('\\Migration\\ResourceModel\\Document')->disableOriginalConstructor()->getMock();
     $this->documentDestination->expects($this->any())->method('getStructure')->will($this->returnValue($structureDestination));
     $this->source->expects($this->any())->method('getDocument')->will($this->returnValue($this->documentSource));
     $this->destination->expects($this->any())->method('getDocument')->will($this->returnValue($this->documentDestination));
 }
 /**
  * @param Record $from
  * @param Record $to
  * @return void
  */
 protected function copy(Record $from, Record $to)
 {
     $sourceDocumentName = $this->sourceDocument->getName();
     $data = $from->getData();
     $sourceFields = $from->getFields();
     $destinationFields = $to->getFields();
     $diff = array_diff($sourceFields, $destinationFields);
     foreach ($diff as $field) {
         if (!$this->mapReader->isFieldIgnored($sourceDocumentName, $field, MapInterface::TYPE_SOURCE)) {
             $fieldMap = $this->mapReader->getFieldMap($sourceDocumentName, $field, MapInterface::TYPE_SOURCE);
             $data[$fieldMap] = $from->getValue($field);
         }
         unset($data[$field]);
     }
     foreach ($data as $key => $value) {
         $to->setValue($key, $value);
     }
 }
 /**
  * @param ResourceModel\Document $sourceDocument
  * @param ResourceModel\Document $destDocument
  * @return bool
  */
 protected function haveEqualStructure(ResourceModel\Document $sourceDocument, ResourceModel\Document $destDocument)
 {
     $diff = array_diff_key($sourceDocument->getStructure()->getFields(), $destDocument->getStructure()->getFields());
     return empty($diff);
 }
 /**
  * @param ResourceModel\Document $sourceDocument
  * @param ResourceModel\Document $destinationDocument
  * @param string $type
  * @return void
  */
 protected function verifyFields($sourceDocument, $destinationDocument, $type)
 {
     $sourceFields = $sourceDocument->getStructure()->getFields();
     $destFields = $destinationDocument->getStructure()->getFields();
     foreach ($sourceFields as $sourceField => $sourceFieldMetaData) {
         $mappedField = $this->map->getFieldMap($sourceDocument->getName(), $sourceField, $type);
         if ($mappedField) {
             if (!isset($destFields[$mappedField])) {
                 $this->notMappedDocumentFields[$type][$sourceDocument->getName()][] = $mappedField;
             } else {
                 if ($sourceFieldMetaData['DATA_TYPE'] != $destFields[$mappedField]['DATA_TYPE'] && !$this->map->isFieldDataTypeIgnored($sourceDocument->getName(), $sourceField, $type)) {
                     $this->mismatchDocumentFieldDataTypes[$type][$sourceDocument->getName()][] = $sourceField;
                 }
             }
         }
     }
 }
 /**
  * @param Document $document
  * @param string $type
  * @return bool
  */
 protected function hasHandlers(Document $document, $type)
 {
     $result = false;
     foreach (array_keys($document->getStructure()->getFields()) as $fieldName) {
         $handlerConfig = $this->map->getHandlerConfig($document->getName(), $fieldName, $type);
         if (!empty($handlerConfig)) {
             $result = true;
             break;
         }
     }
     return $result;
 }
 /**
  * @param Document $document
  * @param Record\Collection $recordsToSave
  * @return void
  */
 protected function saveRecords(Document $document, Record\Collection $recordsToSave)
 {
     $this->destination->saveRecords($document->getName(), $recordsToSave);
 }
 /**
  * @return void
  */
 public function testGetStructure()
 {
     $this->assertSame($this->structure, $this->document->getStructure());
 }