Skip to content

Commit bd05c1a

Browse files
committed
Merge remote-tracking branch 'origin/MAGETWO-58213' into 2.3-develop-pr12
2 parents f1bf163 + af7cfc4 commit bd05c1a

File tree

4 files changed

+112
-2
lines changed

4 files changed

+112
-2
lines changed

app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Magento\Catalog\Api\Data\ProductInterface;
1212
use Magento\CatalogImportExport\Model\Import\Product as ImportProduct;
1313
use Magento\Framework\EntityManager\MetadataPool;
14+
use Magento\Framework\Exception\LocalizedException;
1415

1516
/**
1617
* Importing configurable products
@@ -469,14 +470,22 @@ protected function _processSuperData()
469470
* @param array $rowData
470471
*
471472
* @return array
473+
* @throws LocalizedException
472474
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
473475
* @SuppressWarnings(PHPMD.NPathComplexity)
474476
*/
475477
protected function _parseVariations($rowData)
476478
{
477479
$additionalRows = [];
478-
if (!isset($rowData['configurable_variations'])) {
480+
if (empty($rowData['configurable_variations'])) {
479481
return $additionalRows;
482+
} elseif (!empty($rowData['store_view_code'])) {
483+
throw new LocalizedException(
484+
__(
485+
'Product with assigned super attributes should not have specified "%1" value',
486+
'store_view_code'
487+
)
488+
);
480489
}
481490
$variations = explode(ImportProduct::PSEUDO_MULTI_LINE_SEPARATOR, $rowData['configurable_variations']);
482491
foreach ($variations as $variation) {
@@ -821,7 +830,14 @@ protected function configurableInBunch($bunch)
821830
public function isRowValid(array $rowData, $rowNum, $isNewProduct = true)
822831
{
823832
$error = false;
824-
$dataWithExtraVirtualRows = $this->_parseVariations($rowData);
833+
try {
834+
$dataWithExtraVirtualRows = $this->_parseVariations($rowData);
835+
} catch (LocalizedException $exception) {
836+
$this->_entityModel->addRowError($exception->getMessage(), $rowNum);
837+
838+
return false;
839+
}
840+
825841
$skus = [];
826842
$rowData['price'] = isset($rowData['price']) && $rowData['price'] ? $rowData['price'] : '0.00';
827843
if (!empty($dataWithExtraVirtualRows)) {

dev/tests/integration/testsuite/Magento/ConfigurableImportExport/Model/Import/Product/Type/ConfigurableTest.php

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
/**
1212
* @magentoAppArea adminhtml
13+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
1314
*/
1415
class ConfigurableTest extends \PHPUnit\Framework\TestCase
1516
{
@@ -64,6 +65,7 @@ public function configurableImportDataProvider()
6465
* @param $optionSkuList Name of variations for configurable product
6566
* @magentoDataFixture Magento/ConfigurableProduct/_files/configurable_attribute.php
6667
* @magentoAppArea adminhtml
68+
* @magentoAppIsolation enabled
6769
* @dataProvider configurableImportDataProvider
6870
*/
6971
public function testConfigurableImport($pathToFile, $productName, $optionSkuList)
@@ -148,4 +150,87 @@ public function testConfigurableImport($pathToFile, $productName, $optionSkuList
148150
$this->assertEquals(2, count($valuesData));
149151
}
150152
}
153+
154+
/**
155+
* @magentoDataFixture Magento/Store/_files/second_store.php
156+
* @magentoDataFixture Magento/ConfigurableProduct/_files/configurable_attribute.php
157+
* @magentoAppArea adminhtml
158+
* @magentoAppIsolation enabled
159+
* @return void
160+
*/
161+
public function testConfigurableImportWithMultipleStores()
162+
{
163+
$productSku = 'Configurable 1';
164+
$products = [
165+
'default' => 'Configurable 1',
166+
'fixture_second_store' => 'Configurable 1 Second Store',
167+
];
168+
$filesystem = $this->objectManager->create(
169+
\Magento\Framework\Filesystem::class
170+
);
171+
172+
$directory = $filesystem->getDirectoryWrite(DirectoryList::ROOT);
173+
$source = $this->objectManager->create(
174+
\Magento\ImportExport\Model\Import\Source\Csv::class,
175+
[
176+
'file' => __DIR__ . '/../../_files/import_configurable_for_multiple_store_views.csv',
177+
'directory' => $directory,
178+
]
179+
);
180+
$errors = $this->model->setSource($source)->setParameters(
181+
[
182+
'behavior' => \Magento\ImportExport\Model\Import::BEHAVIOR_APPEND,
183+
'entity' => 'catalog_product',
184+
]
185+
)->validateData();
186+
187+
$this->assertTrue($errors->getErrorsCount() === 0);
188+
$this->model->importData();
189+
190+
foreach ($products as $storeCode => $productName) {
191+
$store = $this->objectManager->create(\Magento\Store\Model\Store::class);
192+
$store->load($storeCode, 'code');
193+
/** @var ProductRepositoryInterface $productRepository */
194+
$productRepository = $this->objectManager->get(ProductRepositoryInterface::class);
195+
/** @var \Magento\Catalog\Api\Data\ProductInterface $product */
196+
$product = $productRepository->get($productSku, 0, $store->getId());
197+
$this->assertFalse($product->isObjectNew());
198+
$this->assertEquals($productName, $product->getName());
199+
$this->assertEquals(self::TEST_PRODUCT_TYPE, $product->getTypeId());
200+
}
201+
}
202+
203+
/**
204+
* @magentoDataFixture Magento/Store/_files/second_store.php
205+
* @magentoDataFixture Magento/ConfigurableProduct/_files/configurable_attribute.php
206+
* @magentoDbIsolation disabled
207+
* @magentoAppArea adminhtml
208+
* @return void
209+
*/
210+
public function testConfigurableImportWithStoreSpecifiedMainItem()
211+
{
212+
$expectedErrorMessage = 'Product with assigned super attributes should not have specified "store_view_code"'
213+
. ' value';
214+
$filesystem = $this->objectManager->create(
215+
\Magento\Framework\Filesystem::class
216+
);
217+
218+
$directory = $filesystem->getDirectoryWrite(DirectoryList::ROOT);
219+
$source = $this->objectManager->create(
220+
\Magento\ImportExport\Model\Import\Source\Csv::class,
221+
[
222+
'file' => __DIR__ . '/../../_files/import_configurable_for_multiple_store_views_error.csv',
223+
'directory' => $directory,
224+
]
225+
);
226+
$errors = $this->model->setSource($source)->setParameters(
227+
[
228+
'behavior' => \Magento\ImportExport\Model\Import::BEHAVIOR_APPEND,
229+
'entity' => 'catalog_product',
230+
]
231+
)->validateData();
232+
233+
$this->assertTrue($errors->getErrorsCount() === 1);
234+
$this->assertEquals($expectedErrorMessage, $errors->getAllErrors()[0]->getErrorMessage());
235+
}
151236
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
sku,store_view_code,attribute_set_code,product_type,name,description,short_description,weight,product_online,tax_class_name,visibility,price,url_key,display_product_options_in,map_price,additional_attributes,qty,out_of_stock_qty,use_config_min_qty,is_qty_decimal,allow_backorders,use_config_backorders,min_cart_qty,use_config_min_sale_qty,max_cart_qty,use_config_max_sale_qty,is_in_stock,notify_on_stock_below,use_config_notify_stock_qty,manage_stock,use_config_manage_stock,use_config_qty_increments,qty_increments,use_config_enable_qty_inc,enable_qty_increments,is_decimal_divided,website_id,configurable_variations,configurable_variation_labels,associated_skus
2+
Configurable 1-Option 1,,Default,simple,Configurable 1-Option 1,,,,1,Taxable Goods,Not Visible Individually,10,configurable-1-option-1,Block after Info Column,,"attribute_with_option=Option Label,has_options=0,quantity_and_stock_status=In Stock,required_options=0,test_configurable=Option 1",99999,0,0,0,0,1,1,0,0,0,1,,1,1,0,0,1,0,0,0,1,,,
3+
Configurable 1-Option 2,,Default,simple,Configurable 1-Option 2,,,,1,Taxable Goods,Not Visible Individually,10,configurable-1-option-2,Block after Info Column,,"has_options=0,quantity_and_stock_status=In Stock,required_options=0,test_configurable=Option 2",99999,0,0,0,0,1,1,0,0,0,1,,1,1,0,0,1,0,0,0,1,,,
4+
Configurable 1,,Default,configurable,Configurable 1,,,,1,Taxable Goods,"Catalog, Search",10,configurable-1,Block after Info Column,,"has_options=1,quantity_and_stock_status=In Stock,required_options=0",0,0,0,0,0,1,1,0,0,0,1,,1,0,0,0,1,0,0,0,1,"sku=Configurable 1-Option 1,test_configurable=Option 1|sku=Configurable 1-Option 2,test_configurable=Option 2",test_configurable=test_configurable_custom_label,
5+
Configurable 1,fixture_second_store,Default,configurable,Configurable 1 Second Store,,,,1,Taxable Goods,"Catalog, Search",10,configurable-1,Block after Info Column,,"has_options=1,quantity_and_stock_status=In Stock,required_options=0",0,0,0,0,0,1,1,0,0,0,1,,1,0,0,0,1,0,0,0,1,,test_configurable=test_configurable_custom_label_second_store,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
sku,store_view_code,attribute_set_code,product_type,name,description,short_description,weight,product_online,tax_class_name,visibility,price,url_key,display_product_options_in,map_price,additional_attributes,qty,out_of_stock_qty,use_config_min_qty,is_qty_decimal,allow_backorders,use_config_backorders,min_cart_qty,use_config_min_sale_qty,max_cart_qty,use_config_max_sale_qty,is_in_stock,notify_on_stock_below,use_config_notify_stock_qty,manage_stock,use_config_manage_stock,use_config_qty_increments,qty_increments,use_config_enable_qty_inc,enable_qty_increments,is_decimal_divided,website_id,configurable_variations,configurable_variation_labels,associated_skus
2+
Configurable 1-Option 1,,Default,simple,Configurable 1-Option 1,,,,1,Taxable Goods,Not Visible Individually,10,configurable-1-option-1,Block after Info Column,,"attribute_with_option=Option Label,has_options=0,quantity_and_stock_status=In Stock,required_options=0,test_configurable=Option 1",99999,0,0,0,0,1,1,0,0,0,1,,1,1,0,0,1,0,0,0,1,,,
3+
Configurable 1-Option 2,,Default,simple,Configurable 1-Option 2,,,,1,Taxable Goods,Not Visible Individually,10,configurable-1-option-2,Block after Info Column,,"has_options=0,quantity_and_stock_status=In Stock,required_options=0,test_configurable=Option 2",99999,0,0,0,0,1,1,0,0,0,1,,1,1,0,0,1,0,0,0,1,,,
4+
Configurable 1,default,Default,configurable,Configurable 1,,,,1,Taxable Goods,"Catalog, Search",10,configurable-1,Block after Info Column,,"has_options=1,quantity_and_stock_status=In Stock,required_options=0",0,0,0,0,0,1,1,0,0,0,1,,1,0,0,0,1,0,0,0,1,"sku=Configurable 1-Option 1,test_configurable=Option 1|sku=Configurable 1-Option 2,test_configurable=Option 2",test_configurable=test_configurable_custom_label,

0 commit comments

Comments
 (0)