Skip to content

Commit f6c1774

Browse files
committed
MC-37615: Graphql urlresolver returning Null when using SEO friendly URLs with parameters
1 parent 4ae0f74 commit f6c1774

File tree

2 files changed

+37
-34
lines changed

2 files changed

+37
-34
lines changed

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

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

6565
$storeId = (int)$context->getExtensionAttributes()->getStore()->getId();
6666
$result = null;
67-
$url = $args['url'];
67+
$url = parse_url($args['url'], PHP_URL_PATH);
6868
if (substr($url, 0, 1) === '/' && $url !== '/') {
6969
$url = ltrim($url, '/');
7070
}

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

Lines changed: 36 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -45,44 +45,39 @@ 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+
74+
$query = $this->createQuery($requestPath . '?key=value');
75+
$response = $this->graphQlQuery($query);
76+
$this->assertNotEmpty($response['urlResolver']);
77+
$this->assertEquals($cmsPageId, $response['urlResolver']['id']);
78+
$this->assertEquals($requestPath, $response['urlResolver']['relative_url']);
79+
}
80+
8681
/**
8782
* Test resolution of '/' path to home page
8883
*/
@@ -98,10 +93,24 @@ public function testResolveSlash()
9893
$page = $this->objectManager->get(\Magento\Cms\Model\Page::class);
9994
$page->load($homePageIdentifier);
10095
$homePageId = $page->getId();
101-
$query
102-
= <<<QUERY
96+
$query = $this->createQuery('/');
97+
$response = $this->graphQlQuery($query);
98+
$this->assertArrayHasKey('urlResolver', $response);
99+
$this->assertEquals($homePageId, $response['urlResolver']['id']);
100+
$this->assertEquals($homePageIdentifier, $response['urlResolver']['relative_url']);
101+
$this->assertEquals('CMS_PAGE', $response['urlResolver']['type']);
102+
$this->assertEquals(0, $response['urlResolver']['redirectCode']);
103+
}
104+
105+
/**
106+
* @param string $path
107+
* @return string
108+
*/
109+
private function createQuery(string $path): string
110+
{
111+
return <<<QUERY
103112
{
104-
urlResolver(url:"/")
113+
urlResolver(url:"{$path}")
105114
{
106115
id
107116
relative_url
@@ -110,11 +119,5 @@ public function testResolveSlash()
110119
}
111120
}
112121
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']);
119122
}
120123
}

0 commit comments

Comments
 (0)