Skip to content

Commit 30f70a2

Browse files
author
Oleksii Korshenko
authored
ENGCOM-3632: Calling getCurrentUrl on Store will wrongly add "___store" parameter #18941 #19135
2 parents b8892f0 + b0769f1 commit 30f70a2

File tree

3 files changed

+85
-5
lines changed

3 files changed

+85
-5
lines changed

app/code/Magento/Store/Test/Unit/Url/Plugin/RouteParamsResolverTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public function testBeforeSetRouteParamsScopeInParams()
8080
$routeParamsResolverMock->expects($this->once())->method('setScope')->with($storeCode);
8181
$routeParamsResolverMock->expects($this->once())->method('getScope')->willReturn($storeCode);
8282

83-
$this->queryParamsResolverMock->expects($this->never())->method('setQueryParam');
83+
$this->queryParamsResolverMock->expects($this->any())->method('setQueryParam');
8484

8585
$this->model->beforeSetRouteParams(
8686
$routeParamsResolverMock,
@@ -113,7 +113,7 @@ public function testBeforeSetRouteParamsScopeUseStoreInUrl()
113113
$routeParamsResolverMock->expects($this->once())->method('setScope')->with($storeCode);
114114
$routeParamsResolverMock->expects($this->once())->method('getScope')->willReturn($storeCode);
115115

116-
$this->queryParamsResolverMock->expects($this->once())->method('setQueryParam')->with('___store', $storeCode);
116+
$this->queryParamsResolverMock->expects($this->never())->method('setQueryParam')->with('___store', $storeCode);
117117

118118
$this->model->beforeSetRouteParams(
119119
$routeParamsResolverMock,
@@ -178,7 +178,7 @@ public function testBeforeSetRouteParamsNoScopeInParams()
178178
$routeParamsResolverMock->expects($this->never())->method('setScope');
179179
$routeParamsResolverMock->expects($this->once())->method('getScope')->willReturn(false);
180180

181-
$this->queryParamsResolverMock->expects($this->once())->method('setQueryParam')->with('___store', $storeCode);
181+
$this->queryParamsResolverMock->expects($this->never())->method('setQueryParam')->with('___store', $storeCode);
182182

183183
$this->model->beforeSetRouteParams(
184184
$routeParamsResolverMock,

app/code/Magento/Store/Url/Plugin/RouteParamsResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public function beforeSetRouteParams(
7878
$storeCode
7979
);
8080

81-
if ($useStoreInUrl && !$this->storeManager->hasSingleStore()) {
81+
if (!$useStoreInUrl && !$this->storeManager->hasSingleStore()) {
8282
$this->queryParamsResolver->setQueryParam('___store', $storeCode);
8383
}
8484
}

dev/tests/integration/testsuite/Magento/Store/Model/StoreTest.php

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66

77
namespace Magento\Store\Model;
88

9+
use Magento\Catalog\Model\ProductRepository;
910
use Magento\Framework\App\Bootstrap;
11+
use Magento\Framework\App\Config\ScopeConfigInterface;
1012
use Magento\Framework\App\Filesystem\DirectoryList;
1113
use Magento\Framework\UrlInterface;
14+
use Magento\Store\Api\StoreRepositoryInterface;
1215
use Zend\Stdlib\Parameters;
1316

1417
/**
@@ -267,12 +270,89 @@ public function testIsCanDelete()
267270
$this->assertFalse($this->model->isCanDelete());
268271
}
269272

273+
/**
274+
* @magentoDataFixture Magento/Store/_files/core_second_third_fixturestore.php
275+
* @magentoDataFixture Magento/Catalog/_files/product_simple.php
276+
* @magentoDbIsolation disabled
277+
*/
270278
public function testGetCurrentUrl()
271279
{
280+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
281+
$objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class)
282+
->setValue('web/url/use_store', true, ScopeInterface::SCOPE_STORE, 'secondstore');
283+
272284
$this->model->load('admin');
273-
$this->model->expects($this->any())->method('getUrl')->will($this->returnValue('http://localhost/index.php'));
285+
$this->model
286+
->expects($this->any())->method('getUrl')
287+
->will($this->returnValue('http://localhost/index.php'));
274288
$this->assertStringEndsWith('default', $this->model->getCurrentUrl());
275289
$this->assertStringEndsNotWith('default', $this->model->getCurrentUrl(false));
290+
291+
/** @var \Magento\Store\Model\Store $secondStore */
292+
$secondStore = $objectManager->get(StoreRepositoryInterface::class)->get('secondstore');
293+
294+
/** @var \Magento\Catalog\Model\ProductRepository $productRepository */
295+
$productRepository = $objectManager->create(ProductRepository::class);
296+
$product = $productRepository->get('simple');
297+
$product->setStoreId($secondStore->getId());
298+
$url = $product->getUrlInStore();
299+
300+
$this->assertEquals(
301+
$secondStore->getBaseUrl().'catalog/product/view/id/1/s/simple-product/',
302+
$url
303+
);
304+
$this->assertEquals(
305+
$secondStore->getBaseUrl().'?___from_store=default',
306+
$secondStore->getCurrentUrl()
307+
);
308+
$this->assertEquals(
309+
$secondStore->getBaseUrl(),
310+
$secondStore->getCurrentUrl(false)
311+
);
312+
}
313+
314+
/**
315+
* @magentoDataFixture Magento/Store/_files/second_store.php
316+
* @magentoDataFixture Magento/Catalog/_files/category_product.php
317+
* @magentoDbIsolation disabled
318+
*/
319+
public function testGetCurrentUrlWithUseStoreInUrlFalse()
320+
{
321+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
322+
$objectManager->get(\Magento\Framework\App\Config\ReinitableConfigInterface::class)
323+
->setValue('web/url/use_store', false, ScopeInterface::SCOPE_STORE, 'default');
324+
325+
/** @var \Magento\Store\Model\Store $secondStore */
326+
$secondStore = $objectManager->get(StoreRepositoryInterface::class)->get('fixture_second_store');
327+
328+
/** @var \Magento\Catalog\Model\ProductRepository $productRepository */
329+
$productRepository = $objectManager->create(ProductRepository::class);
330+
$product = $productRepository->get('simple333');
331+
332+
$product->setStoreId($secondStore->getId());
333+
$url = $product->getUrlInStore();
334+
335+
/** @var \Magento\Catalog\Model\CategoryRepository $categoryRepository */
336+
$categoryRepository = $objectManager->get(\Magento\Catalog\Model\CategoryRepository::class);
337+
$category = $categoryRepository->get(333, $secondStore->getStoreId());
338+
339+
$this->assertEquals(
340+
$secondStore->getBaseUrl().'catalog/category/view/s/category-1/id/333/',
341+
$category->getUrl()
342+
);
343+
$this->assertEquals(
344+
$secondStore->getBaseUrl().
345+
'catalog/product/view/id/333/s/simple-product-three/?___store=fixture_second_store',
346+
$url
347+
);
348+
$this->assertEquals(
349+
$secondStore->getBaseUrl().'?___store=fixture_second_store&___from_store=default',
350+
$secondStore->getCurrentUrl()
351+
);
352+
$this->assertEquals(
353+
$secondStore->getBaseUrl().'?___store=fixture_second_store',
354+
$secondStore->getCurrentUrl(false)
355+
);
276356
}
277357

278358
/**

0 commit comments

Comments
 (0)