1515use Magento \CatalogUrlRewrite \Model \Map \DataCategoryUrlRewriteDatabaseMap ;
1616use Magento \CatalogUrlRewrite \Model \Map \DataProductUrlRewriteDatabaseMap ;
1717use Magento \CatalogUrlRewrite \Model \ResourceModel \Category \Product ;
18+ use Magento \Store \Api \WebsiteRepositoryInterface ;
1819use Magento \Store \Model \ScopeInterface ;
1920use Magento \UrlRewrite \Model \Exception \UrlAlreadyExistsException ;
2021use Magento \UrlRewrite \Model \OptionProvider ;
@@ -63,6 +64,8 @@ protected function setUp(): void
6364 }
6465
6566 /**
67+ * Test url rewrite after category save
68+ *
6669 * @magentoDataFixture Magento/Catalog/_files/category_with_position.php
6770 * @dataProvider categoryProvider
6871 * @param array $data
@@ -80,6 +83,8 @@ public function testUrlRewriteOnCategorySave(array $data): void
8083 }
8184
8285 /**
86+ * Provider. categoryProvider
87+ *
8388 * @return array
8489 */
8590 public function categoryProvider (): array
@@ -123,6 +128,8 @@ public function categoryProvider(): array
123128 }
124129
125130 /**
131+ * Test category product url rewrite
132+ *
126133 * @magentoDataFixture Magento/Catalog/_files/category_tree.php
127134 * @magentoDataFixture Magento/Catalog/_files/second_product_simple.php
128135 * @dataProvider productRewriteProvider
@@ -140,6 +147,8 @@ public function testCategoryProductUrlRewrite(array $data): void
140147 }
141148
142149 /**
150+ * Provider. productRewriteProvider
151+ *
143152 * @return array
144153 */
145154 public function productRewriteProvider (): array
@@ -165,6 +174,8 @@ public function productRewriteProvider(): array
165174 }
166175
167176 /**
177+ * Test url rewrites after category save with existing url key
178+ *
168179 * @magentoDataFixture Magento/CatalogUrlRewrite/_files/categories_with_products.php
169180 * @magentoAppIsolation enabled
170181 * @dataProvider existingUrlProvider
@@ -179,6 +190,8 @@ public function testUrlRewriteOnCategorySaveWithExistingUrlKey(array $data): voi
179190 }
180191
181192 /**
193+ * Provider. existingUrlProvider
194+ *
182195 * @return array
183196 */
184197 public function existingUrlProvider (): array
@@ -226,6 +239,8 @@ public function existingUrlProvider(): array
226239 }
227240
228241 /**
242+ * Test url rewrites after category move
243+ *
229244 * @magentoDataFixture Magento/Catalog/_files/category_product.php
230245 * @magentoDataFixture Magento/Catalog/_files/catalog_category_with_slash.php
231246 * @dataProvider categoryMoveProvider
@@ -287,6 +302,7 @@ public function categoryMoveProvider(): array
287302 }
288303
289304 /**
305+ * Test url rewrites after category delete
290306 * @magentoDataFixture Magento/Catalog/_files/category.php
291307 * @return void
292308 */
@@ -302,6 +318,8 @@ public function testUrlRewritesAfterCategoryDelete(): void
302318 }
303319
304320 /**
321+ * Test url rewrites after category with products delete
322+ *
305323 * @magentoAppArea adminhtml
306324 * @magentoDataFixture Magento/CatalogUrlRewrite/_files/categories_with_product_ids.php
307325 * @return void
@@ -325,6 +343,8 @@ public function testUrlRewritesAfterCategoryWithProductsDelete(): void
325343 }
326344
327345 /**
346+ * Test category url rewrite per Store Views
347+ *
328348 * @magentoDataFixture Magento/Store/_files/second_store.php
329349 * @magentoDataFixture Magento/Catalog/_files/category.php
330350 * @return void
@@ -353,6 +373,53 @@ public function testCategoryUrlRewritePerStoreViews(): void
353373 }
354374 }
355375
376+ /**
377+ * Test category url rewrite while reassign store view
378+ *
379+ * @magentoAppArea adminhtml
380+ * @magentoDataFixture Magento/Store/_files/second_store_group_with_second_website.php
381+ * @magentoDataFixture Magento/Catalog/_files/category.php
382+ * @return void
383+ */
384+ public function testCategoryUrlRewriteMovingToOtherStoreView (): void
385+ {
386+ $ categoryId = 333 ;
387+ $ store = $ this ->storeRepository ->get ('default ' );
388+ $ storeId = $ store ->getId ();
389+ $ urlRewrites = [
390+ ['category-1-updated.html ' , 'category-1.html ' ],
391+ ['category-1-most-recent.html ' , 'category-1-updated.html ' ],
392+ ];
393+ foreach ($ urlRewrites as $ rewrite ) {
394+ /** @var \Magento\UrlRewrite\Model\UrlRewrite $urlRewrite */
395+ $ urlRewrite = $ this ->objectManager ->create (\Magento \UrlRewrite \Model \UrlRewrite::class);
396+ $ urlRewrite ->setEntityType (\Magento \CatalogUrlRewrite \Model \CategoryUrlRewriteGenerator::ENTITY_TYPE )
397+ ->setEntityId ($ categoryId )
398+ ->setRequestPath ($ rewrite [0 ])
399+ ->setTargetPath ($ rewrite [1 ])
400+ ->setRedirectType (\Magento \UrlRewrite \Model \OptionProvider::PERMANENT )
401+ ->setStoreId ($ storeId );
402+ $ urlRewrite ->save ();
403+ }
404+
405+ /** @var WebsiteRepositoryInterface $websiteRepo */
406+ $ websiteRepo = $ this ->objectManager ->get (WebsiteRepositoryInterface::class);
407+ $ website = $ websiteRepo ->get ('test ' );
408+ $ group = $ website ->getDefaultGroup ();
409+ $ group ->setRootCategoryId (2 );
410+ $ group ->save ();
411+ $ groupId = $ group ->getId ();
412+ $ store ->setStoreGroupId ($ groupId );
413+ $ store ->save ();
414+
415+ $ urlRewriteItems = $ this ->getEntityRewriteCollection ($ categoryId )->getItems ();
416+ $ this ->assertTrue (count ($ urlRewriteItems ) === 3 );
417+ $ expectedRewriteRequestPaths = ['category-1.html ' , 'category-1-updated.html ' , 'category-1-most-recent.html ' ];
418+ foreach ($ urlRewriteItems as $ item ) {
419+ $ this ->assertTrue (in_array ($ item ->getRequestPath (), $ expectedRewriteRequestPaths ));
420+ }
421+ }
422+
356423 /**
357424 * @inheritdoc
358425 */
0 commit comments