Skip to content

Commit 4db9268

Browse files
committed
Merge remote-tracking branch 'tango/MC-19213' into Chaika-PR-2019-08-29-2
2 parents a361046 + 6bd639b commit 4db9268

File tree

3 files changed

+74
-10
lines changed

3 files changed

+74
-10
lines changed

app/code/Magento/CatalogUrlRewrite/Observer/AfterImportDataObserver.php

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -299,12 +299,16 @@ protected function _populateForUrlGeneration($rowData)
299299
*/
300300
private function isNeedToPopulateForUrlGeneration($rowData, $newSku, $oldSku): bool
301301
{
302-
if ((empty($newSku) || !isset($newSku['entity_id']))
303-
|| ($this->import->getRowScope($rowData) == ImportProduct::SCOPE_STORE
304-
&& empty($rowData[self::URL_KEY_ATTRIBUTE_CODE]))
305-
|| (array_key_exists($rowData[ImportProduct::COL_SKU], $oldSku)
306-
&& !isset($rowData[self::URL_KEY_ATTRIBUTE_CODE])
307-
&& $this->import->getBehavior() === ImportExport::BEHAVIOR_APPEND)) {
302+
if ((
303+
(empty($newSku) || !isset($newSku['entity_id']))
304+
|| ($this->import->getRowScope($rowData) == ImportProduct::SCOPE_STORE
305+
&& empty($rowData[self::URL_KEY_ATTRIBUTE_CODE]))
306+
|| (array_key_exists(strtolower($rowData[ImportProduct::COL_SKU]), $oldSku)
307+
&& !isset($rowData[self::URL_KEY_ATTRIBUTE_CODE])
308+
&& $this->import->getBehavior() === ImportExport::BEHAVIOR_APPEND)
309+
)
310+
&& !isset($rowData["categories"])
311+
) {
308312
return false;
309313
}
310314
return true;
@@ -477,7 +481,7 @@ protected function currentUrlRewritesRegenerate()
477481
$url = $currentUrlRewrite->getIsAutogenerated()
478482
? $this->generateForAutogenerated($currentUrlRewrite, $category)
479483
: $this->generateForCustom($currentUrlRewrite, $category);
480-
$urlRewrites = array_merge($urlRewrites, $url);
484+
$urlRewrites = $url + $urlRewrites;
481485
}
482486

483487
$this->product = null;

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

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use Magento\Framework\Registry;
2626
use Magento\ImportExport\Model\Import;
2727
use Magento\Store\Model\Store;
28+
use Magento\UrlRewrite\Model\ResourceModel\UrlRewriteCollection;
2829
use Psr\Log\LoggerInterface;
2930
use Magento\ImportExport\Model\Import\Source\Csv;
3031

@@ -626,7 +627,7 @@ function ($input) {
626627
explode(',', $optionData)
627628
)
628629
);
629-
// phpcs:ignore Magento2.Performance.ForeachArrayMerge.ForeachArrayMerge
630+
// phpcs:ignore Magento2.Performance.ForeachArrayMerge
630631
$option = array_merge(...$option);
631632

632633
if (!empty($option['type']) && !empty($option['name'])) {
@@ -693,14 +694,14 @@ protected function mergeWithExistingData(
693694
}
694695
} else {
695696
$existingOptionId = array_search($optionKey, $expectedOptions);
696-
// phpcs:ignore Magento2.Performance.ForeachArrayMerge.ForeachArrayMerge
697+
// phpcs:ignore Magento2.Performance.ForeachArrayMerge
697698
$expectedData[$existingOptionId] = array_merge(
698699
$this->getOptionData($option),
699700
$expectedData[$existingOptionId]
700701
);
701702
if ($optionValues) {
702703
foreach ($optionValues as $optionKey => $optionValue) {
703-
// phpcs:ignore Magento2.Performance.ForeachArrayMerge.ForeachArrayMerge
704+
// phpcs:ignore Magento2.Performance.ForeachArrayMerge
704705
$expectedValues[$existingOptionId][$optionKey] = array_merge(
705706
$optionValue,
706707
$expectedValues[$existingOptionId][$optionKey]
@@ -1710,6 +1711,63 @@ public function testImportWithNonExistingImage()
17101711
}
17111712
}
17121713

1714+
/**
1715+
* @magentoDataFixture Magento/Catalog/_files/product_without_options.php
1716+
* @magentoDbIsolation enabled
1717+
* @magentoAppIsolation enabled
1718+
*/
1719+
public function testUpdateUrlRewritesOnImport()
1720+
{
1721+
$filesystem = $this->objectManager->create(\Magento\Framework\Filesystem::class);
1722+
1723+
$directory = $filesystem->getDirectoryWrite(DirectoryList::ROOT);
1724+
1725+
$source = $this->objectManager->create(
1726+
\Magento\ImportExport\Model\Import\Source\Csv::class,
1727+
[
1728+
'file' => __DIR__ . '/_files/products_to_import_with_category.csv',
1729+
'directory' => $directory
1730+
]
1731+
);
1732+
$errors = $this->_model->setParameters(
1733+
[
1734+
'behavior' => \Magento\ImportExport\Model\Import::BEHAVIOR_APPEND,
1735+
'entity' => \Magento\Catalog\Model\Product::ENTITY
1736+
]
1737+
)->setSource(
1738+
$source
1739+
)->validateData();
1740+
1741+
$this->assertTrue($errors->getErrorsCount() == 0);
1742+
1743+
$this->_model->importData();
1744+
1745+
/** @var \Magento\Catalog\Model\Product $product */
1746+
$product = $this->objectManager->create(\Magento\Catalog\Model\ProductRepository::class)->get('simple');
1747+
1748+
$repUrlRewriteCol = $this->objectManager->create(
1749+
UrlRewriteCollection::class
1750+
);
1751+
1752+
/** @var UrlRewriteCollection $collUrlRewrite */
1753+
$collUrlRewrite = $repUrlRewriteCol->addFieldToSelect(['request_path'])
1754+
->addFieldToFilter('entity_id', ['eq'=> $product->getEntityId()])
1755+
->addFieldToFilter('entity_type', ['eq'=> 'product'])
1756+
->load();
1757+
1758+
$this->assertCount(2, $collUrlRewrite);
1759+
1760+
$this->assertEquals(
1761+
sprintf('%s.html', $product->getUrlKey()),
1762+
$collUrlRewrite->getFirstItem()->getRequestPath()
1763+
);
1764+
1765+
$this->assertContains(
1766+
sprintf('men/tops/%s.html', $product->getUrlKey()),
1767+
$collUrlRewrite->getLastItem()->getRequestPath()
1768+
);
1769+
}
1770+
17131771
/**
17141772
* @magentoDataFixture Magento/Catalog/_files/product_simple_with_url_key.php
17151773
* @magentoDbIsolation enabled
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
sku,store_view_code,attribute_set_code,product_type,categories
2+
simple,default,Default,simple,Default Category/Men/Tops

0 commit comments

Comments
 (0)