Skip to content

Commit 60ce2dc

Browse files
committed
Merge branch 'MC-37615' of https://github.com/magento-tango/magento2ce into PR-09-24-2020
2 parents a70f829 + 5818736 commit 60ce2dc

File tree

2 files changed

+43
-34
lines changed

2 files changed

+43
-34
lines changed

app/code/Magento/UrlRewriteGraphQl/Model/Resolver/EntityUrl.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,9 @@ public function resolve(
6464

6565
$storeId = (int)$context->getExtensionAttributes()->getStore()->getId();
6666
$result = null;
67-
$url = $args['url'];
67+
// phpcs:ignore Magento2.Functions.DiscouragedFunction
68+
$urlParts = parse_url($args['url']);
69+
$url = $urlParts['path'] ?? $args['url'];
6870
if (substr($url, 0, 1) === '/' && $url !== '/') {
6971
$url = ltrim($url, '/');
7072
}
@@ -81,6 +83,9 @@ public function resolve(
8183
'redirectCode' => $this->redirectType,
8284
'type' => $this->sanitizeType($finalUrlRewrite->getEntityType())
8385
];
86+
if (!empty($urlParts['query'])) {
87+
$resultArray['relative_url'] .= '?' . $urlParts['query'];
88+
}
8489

8590
if (empty($resultArray['id'])) {
8691
throw new GraphQlNoSuchEntityException(

dev/tests/api-functional/testsuite/Magento/GraphQl/CmsUrlRewrite/UrlResolverTest.php

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -45,44 +45,40 @@ public function testCMSPageUrlResolver()
4545
$targetPath = $urlPathGenerator->getCanonicalUrlPath($page);
4646
$expectedEntityType = CmsPageUrlRewriteGenerator::ENTITY_TYPE;
4747

48-
$query
49-
= <<<QUERY
50-
{
51-
urlResolver(url:"{$requestPath}")
52-
{
53-
id
54-
relative_url
55-
type
56-
redirectCode
57-
}
58-
}
59-
QUERY;
48+
$query = $this->createQuery($requestPath);
6049
$response = $this->graphQlQuery($query);
6150
$this->assertEquals($cmsPageId, $response['urlResolver']['id']);
6251
$this->assertEquals($requestPath, $response['urlResolver']['relative_url']);
6352
$this->assertEquals(strtoupper(str_replace('-', '_', $expectedEntityType)), $response['urlResolver']['type']);
6453
$this->assertEquals(0, $response['urlResolver']['redirectCode']);
6554

6655
// querying by non seo friendly url path should return seo friendly relative url
67-
$query
68-
= <<<QUERY
69-
{
70-
urlResolver(url:"{$targetPath}")
71-
{
72-
id
73-
relative_url
74-
type
75-
redirectCode
76-
}
77-
}
78-
QUERY;
56+
$query = $this->createQuery($targetPath);
7957
$response = $this->graphQlQuery($query);
8058
$this->assertEquals($cmsPageId, $response['urlResolver']['id']);
8159
$this->assertEquals($requestPath, $response['urlResolver']['relative_url']);
8260
$this->assertEquals(strtoupper(str_replace('-', '_', $expectedEntityType)), $response['urlResolver']['type']);
8361
$this->assertEquals(0, $response['urlResolver']['redirectCode']);
8462
}
8563

64+
/**
65+
* @magentoApiDataFixture Magento/Cms/_files/pages.php
66+
*/
67+
public function testResolveCMSPageWithQueryParameters()
68+
{
69+
$page = $this->objectManager->create(\Magento\Cms\Model\Page::class);
70+
$page->load('page100');
71+
$cmsPageId = $page->getId();
72+
$requestPath = $page->getIdentifier();
73+
$requestPath .= '?key=value';
74+
75+
$query = $this->createQuery($requestPath);
76+
$response = $this->graphQlQuery($query);
77+
$this->assertNotEmpty($response['urlResolver']);
78+
$this->assertEquals($cmsPageId, $response['urlResolver']['id']);
79+
$this->assertEquals($requestPath, $response['urlResolver']['relative_url']);
80+
}
81+
8682
/**
8783
* Test resolution of '/' path to home page
8884
*/
@@ -98,10 +94,24 @@ public function testResolveSlash()
9894
$page = $this->objectManager->get(\Magento\Cms\Model\Page::class);
9995
$page->load($homePageIdentifier);
10096
$homePageId = $page->getId();
101-
$query
102-
= <<<QUERY
97+
$query = $this->createQuery('/');
98+
$response = $this->graphQlQuery($query);
99+
$this->assertArrayHasKey('urlResolver', $response);
100+
$this->assertEquals($homePageId, $response['urlResolver']['id']);
101+
$this->assertEquals($homePageIdentifier, $response['urlResolver']['relative_url']);
102+
$this->assertEquals('CMS_PAGE', $response['urlResolver']['type']);
103+
$this->assertEquals(0, $response['urlResolver']['redirectCode']);
104+
}
105+
106+
/**
107+
* @param string $path
108+
* @return string
109+
*/
110+
private function createQuery(string $path): string
111+
{
112+
return <<<QUERY
103113
{
104-
urlResolver(url:"/")
114+
urlResolver(url:"{$path}")
105115
{
106116
id
107117
relative_url
@@ -110,11 +120,5 @@ public function testResolveSlash()
110120
}
111121
}
112122
QUERY;
113-
$response = $this->graphQlQuery($query);
114-
$this->assertArrayHasKey('urlResolver', $response);
115-
$this->assertEquals($homePageId, $response['urlResolver']['id']);
116-
$this->assertEquals($homePageIdentifier, $response['urlResolver']['relative_url']);
117-
$this->assertEquals('CMS_PAGE', $response['urlResolver']['type']);
118-
$this->assertEquals(0, $response['urlResolver']['redirectCode']);
119123
}
120124
}

0 commit comments

Comments
 (0)