Skip to content

Commit 1af8b1f

Browse files
committed
Merge remote-tracking branch 'origin/MAGETWO-58385' into develop-team-pr1
2 parents 7201bc0 + 21379b8 commit 1af8b1f

File tree

4 files changed

+109
-4
lines changed

4 files changed

+109
-4
lines changed

app/code/Magento/CatalogImportExport/Model/Import/Product.php

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Magento\ImportExport\Model\Import\Entity\AbstractEntity;
1919
use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingError;
2020
use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface;
21+
use Magento\Catalog\Model\Config as CatalogConfig;
2122

2223
/**
2324
* Import entity product model
@@ -657,6 +658,13 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
657658
*/
658659
private $multiLineSeparatorForRegexp;
659660

661+
/**
662+
* Catalog config.
663+
*
664+
* @var CatalogConfig
665+
*/
666+
private $catalogConfig;
667+
660668
/**
661669
* @param \Magento\Framework\Json\Helper\Data $jsonHelper
662670
* @param \Magento\ImportExport\Helper\Data $importExportData
@@ -695,6 +703,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
695703
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
696704
* @param array $data
697705
* @param array $dateAttrCodes
706+
* @param CatalogConfig $catalogConfig
698707
* @throws \Magento\Framework\Exception\LocalizedException
699708
*
700709
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -737,7 +746,8 @@ public function __construct(
737746
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
738747
\Magento\Catalog\Model\Product\Url $productUrl,
739748
array $data = [],
740-
array $dateAttrCodes = []
749+
array $dateAttrCodes = [],
750+
CatalogConfig $catalogConfig = null
741751
) {
742752
$this->_eventManager = $eventManager;
743753
$this->stockRegistry = $stockRegistry;
@@ -767,6 +777,9 @@ public function __construct(
767777
$this->scopeConfig = $scopeConfig;
768778
$this->productUrl = $productUrl;
769779
$this->dateAttrCodes = array_merge($this->dateAttrCodes, $dateAttrCodes);
780+
$this->catalogConfig = $catalogConfig ?: \Magento\Framework\App\ObjectManager::getInstance()
781+
->get(CatalogConfig::class);
782+
770783
parent::__construct(
771784
$jsonHelper,
772785
$importExportData,
@@ -1330,7 +1343,7 @@ public function saveProductEntity(array $entityRowsIn, array $entityRowsUp)
13301343
$entityTable = $this->_resourceFactory->create()->getEntityTable();
13311344
}
13321345
if ($entityRowsUp) {
1333-
$this->_connection->insertOnDuplicate($entityTable, $entityRowsUp, ['updated_at']);
1346+
$this->_connection->insertOnDuplicate($entityTable, $entityRowsUp, ['updated_at', 'attribute_set_id']);
13341347
}
13351348
if ($entityRowsIn) {
13361349
$this->_connection->insertMultiple($entityTable, $entityRowsIn);
@@ -1563,9 +1576,29 @@ protected function _saveProducts()
15631576
// 1. Entity phase
15641577
if (isset($this->_oldSku[$rowSku])) {
15651578
// existing row
1579+
if (isset($rowData['attribute_set_code'])) {
1580+
$attributeSetId = $this->catalogConfig->getAttributeSetId(
1581+
$this->getEntityTypeId(),
1582+
$rowData['attribute_set_code']
1583+
);
1584+
1585+
// wrong attribute_set_code was received
1586+
if (!$attributeSetId) {
1587+
throw new \Magento\Framework\Exception\LocalizedException(
1588+
__(
1589+
'Wrong attribute set code "%1", please correct it and try again.',
1590+
$rowData['attribute_set_code']
1591+
)
1592+
);
1593+
}
1594+
} else {
1595+
$attributeSetId = $this->skuProcessor->getNewSku($rowSku)['attr_set_id'];
1596+
}
1597+
15661598
$entityRowsUp[] = [
15671599
'updated_at' => (new \DateTime())->format(DateTime::DATETIME_PHP_FORMAT),
1568-
$this->getProductEntityLinkField() => $this->_oldSku[$rowSku][$this->getProductEntityLinkField()],
1600+
'attribute_set_id' => $attributeSetId,
1601+
$this->getProductEntityLinkField() => $this->_oldSku[$rowSku][$this->getProductEntityLinkField()]
15691602
];
15701603
} else {
15711604
if (!$productLimit || $productsQty < $productLimit) {

app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/Product/CollectionTest.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,20 @@ protected function setUp()
8484
$productLimitationMock = $this->getMock(
8585
\Magento\Catalog\Model\ResourceModel\Product\Collection\ProductLimitation::class
8686
);
87-
$productLimitationFactoryMock = $this->getMock(ProductLimitationFactory::class, ['create']);
87+
$productLimitationFactoryMock = $this->getMockBuilder(ProductLimitationFactory::class)
88+
->setMethods(['create'])
89+
->disableOriginalConstructor()
90+
->getMock();
91+
8892
$productLimitationFactoryMock->method('create')
8993
->willReturn($productLimitationMock);
94+
95+
$objectManager = $this->getMockBuilder(\Magento\Framework\ObjectManagerInterface::class)
96+
->disableOriginalConstructor()
97+
->getMock();
98+
99+
\Magento\Framework\App\ObjectManager::setInstance($objectManager);
100+
90101
$this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
91102
$this->model = $this->objectManager->getObject(
92103
\Magento\Review\Model\ResourceModel\Review\Product\Collection::class,

dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1640,4 +1640,62 @@ public function testValidateData()
16401640

16411641
$this->assertTrue($errors->getErrorsCount() == 0);
16421642
}
1643+
1644+
/**
1645+
* Test if we can change attribute set for product via import.
1646+
*
1647+
* @magentoDataFixture Magento/Catalog/_files/attribute_set_with_renamed_group.php
1648+
* @magentoDataFixture Magento/Catalog/_files/product_without_options.php
1649+
* @magentoDataFixture Magento/Catalog/_files/second_product_simple.php
1650+
*
1651+
*/
1652+
public function testImportDataChangeAttributeSet()
1653+
{
1654+
$filesystem = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
1655+
->create(\Magento\Framework\Filesystem::class);
1656+
1657+
$directory = $filesystem->getDirectoryWrite(DirectoryList::ROOT);
1658+
1659+
$source = $this->objectManager->create(
1660+
\Magento\ImportExport\Model\Import\Source\Csv::class,
1661+
[
1662+
'file' => __DIR__ . '/_files/products_to_import_with_new_attribute_set.csv',
1663+
'directory' => $directory
1664+
]
1665+
);
1666+
$errors = $this->_model->setParameters(
1667+
[
1668+
'behavior' => \Magento\ImportExport\Model\Import::BEHAVIOR_ADD_UPDATE,
1669+
'entity' => \Magento\Catalog\Model\Product::ENTITY
1670+
]
1671+
)->setSource(
1672+
$source
1673+
)->validateData();
1674+
1675+
$this->assertTrue($errors->getErrorsCount() == 0);
1676+
1677+
$this->_model->importData();
1678+
1679+
/** @var \Magento\Catalog\Model\Product[] $products */
1680+
$products[] = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
1681+
->create(\Magento\Catalog\Model\ProductRepository::class)->get('simple');
1682+
$products[] = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
1683+
->create(\Magento\Catalog\Model\ProductRepository::class)->get('simple2');
1684+
1685+
/** @var \Magento\Catalog\Model\Config $catalogConfig */
1686+
$catalogConfig = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
1687+
->create(\Magento\Catalog\Model\Config::class);
1688+
1689+
/** @var \Magento\Eav\Model\Config $eavConfig */
1690+
$eavConfig = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
1691+
->create(\Magento\Eav\Model\Config::class);
1692+
1693+
$entityTypeId = (int)$eavConfig->getEntityType(\Magento\Catalog\Model\Product::ENTITY)
1694+
->getId();
1695+
1696+
foreach ($products as $product) {
1697+
$attributeSetName = $catalogConfig->getAttributeSetName($entityTypeId, $product->getAttributeSetId());
1698+
$this->assertEquals('attribute_set_test', $attributeSetName);
1699+
}
1700+
}
16431701
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
sku,product_type,store_view_code,name,price,attribute_set_code,categories
2+
simple,simple,,"simple imported",25,attribute_set_test,"Default Category/Category 1"
3+
simple2,simple,,"simple2 imported",33,attribute_set_test,"Default Category/Category 1"

0 commit comments

Comments
 (0)