Skip to content

Commit 20a81dc

Browse files
committed
[backport]Fix issue 18941 Calling getCurrentUrl wrongly add "___store"
1 parent 0d99fa8 commit 20a81dc

File tree

3 files changed

+90
-9
lines changed

3 files changed

+90
-9
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: 86 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
* See COPYING.txt for license details.
55
*/
66

7-
// @codingStandardsIgnoreFile
8-
97
namespace Magento\Store\Model;
108

9+
use Magento\Catalog\Model\ProductRepository;
1110
use Magento\Framework\App\Bootstrap;
1211
use Magento\Framework\App\Filesystem\DirectoryList;
1312
use Magento\Framework\UrlInterface;
13+
use Magento\Store\Api\StoreRepositoryInterface;
1414
use Zend\Stdlib\Parameters;
1515

1616
/**
@@ -200,7 +200,7 @@ public function testGetBaseUrlInPub()
200200
*/
201201
public function testGetBaseUrlForCustomEntryPoint($type, $useCustomEntryPoint, $useStoreCode, $expected)
202202
{
203-
/* config operations require store to be loaded */
203+
/* config operations require store to be loaded */
204204
$this->model->load('default');
205205
\Magento\TestFramework\Helper\Bootstrap::getObjectManager()
206206
->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class)
@@ -269,12 +269,89 @@ public function testIsCanDelete()
269269
$this->assertFalse($this->model->isCanDelete());
270270
}
271271

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

280357
/**
@@ -292,7 +369,11 @@ public function testCRUD()
292369
'sort_order' => 0,
293370
'is_active' => 1,
294371
]);
295-
$crud = new \Magento\TestFramework\Entity($this->model, ['name' => 'new name'], \Magento\Store\Model\Store::class);
372+
$crud = new \Magento\TestFramework\Entity(
373+
$this->model,
374+
['name' => 'new name'],
375+
\Magento\Store\Model\Store::class
376+
);
296377
$crud->testCrud();
297378
}
298379

0 commit comments

Comments
 (0)