/**
  * Validate row attributes. Pass VALID row data ONLY as argument.
  *
  * @param array $rowData
  * @param int $rowNum
  * @param bool $isNewProduct Optional
  * @return bool
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  */
 public function isRowValid(array $rowData, $rowNum, $isNewProduct = true)
 {
     $error = false;
     $rowScope = $this->_entityModel->getRowScope($rowData);
     if (\Magento\CatalogImportExport\Model\Import\Product::SCOPE_NULL != $rowScope) {
         foreach ($this->_getProductAttributes($rowData) as $attrCode => $attrParams) {
             // check value for non-empty in the case of required attribute?
             if (isset($rowData[$attrCode]) && strlen($rowData[$attrCode])) {
                 $error |= !$this->_entityModel->isAttributeValid($attrCode, $attrParams, $rowData, $rowNum);
             } elseif ($this->_isAttributeRequiredCheckNeeded($attrCode) && $attrParams['is_required']) {
                 // For the default scope - if this is a new product or
                 // for an old product, if the imported doc has the column present for the attrCode
                 if (\Magento\CatalogImportExport\Model\Import\Product::SCOPE_DEFAULT == $rowScope && ($isNewProduct || array_key_exists($attrCode, $rowData))) {
                     $this->_entityModel->addRowError(\Magento\CatalogImportExport\Model\Import\Product::ERROR_VALUE_IS_REQUIRED, $rowNum, $attrCode);
                     $error = true;
                 }
             }
         }
     }
     $error |= !$this->_isParticularAttributesValid($rowData, $rowNum);
     return !$error;
 }
Example #2
0
 public function testValidateDefaultScopeNotValidAttributesResetSku()
 {
     $sku = 'sku';
     $rowNum = 0;
     $attrCode = 'code';
     $stringUtilsMock = $this->getMockBuilder('\\Magento\\Framework\\Stdlib\\StringUtils')->setMethods(null)->getMock();
     $this->setPropertyValue($this->importProduct, 'string', $stringUtilsMock);
     $scopeMock = $this->getMock('\\Magento\\CatalogImportExport\\Model\\Import\\Product', ['getRowScope'], [], '', false);
     $colStore = \Magento\CatalogImportExport\Model\Import\Product::COL_STORE;
     $scopeRowData = [$sku => 'sku', $colStore => null];
     $scopeResult = \Magento\CatalogImportExport\Model\Import\Product::SCOPE_DEFAULT;
     $scopeMock->expects($this->any())->method('getRowScope')->with($scopeRowData)->willReturn($scopeResult);
     $oldSku = [$sku => ['type_id' => 'type_id_val']];
     $this->setPropertyValue($this->importProduct, '_oldSku', $oldSku);
     $expectedSku = false;
     $newSku = ['attr_set_code' => 'new_attr_set_code', 'type_id' => 'new_type_id_val'];
     $this->skuProcessor->expects($this->any())->method('getNewSku')->with($expectedSku)->willReturn($newSku);
     $this->setPropertyValue($this->importProduct, 'skuProcessor', $this->skuProcessor);
     $attrParams = ['type' => 'varchar'];
     $attrRowData = ['code' => str_repeat('a', \Magento\CatalogImportExport\Model\Import\Product::DB_MAX_VARCHAR_LENGTH + 1)];
     $this->validator->expects($this->once())->method('isAttributeValid')->willReturn(false);
     $messages = ['validator message'];
     $this->validator->expects($this->once())->method('getMessages')->willReturn($messages);
     $result = $this->importProduct->isAttributeValid($attrCode, $attrParams, $attrRowData, $rowNum);
     $this->assertFalse($result);
 }
Example #3
0
 /**
  * @dataProvider isAttributeValidAssertAttrInvalidDataProvider
  */
 public function testIsAttributeValidAssertAttrInvalid($attrParams, $rowData)
 {
     $attrCode = 'code';
     $rowNum = 0;
     $string = $this->getMockBuilder('\\Magento\\Framework\\Stdlib\\String')->setMethods(null)->getMock();
     $this->setPropertyValue($this->importProduct, 'string', $string);
     $result = $this->importProduct->isAttributeValid($attrCode, $attrParams, $rowData, $rowNum);
     $this->assertFalse($result);
 }