Skip to content

Commit 9d724e1

Browse files
committed
Merge remote-tracking branch 'origin/AC-12302' into spartans_pr_16082025
2 parents 259f4e6 + 6ed906e commit 9d724e1

File tree

3 files changed

+171
-14
lines changed

3 files changed

+171
-14
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<?php
2+
/**
3+
* Copyright 2025 Adobe
4+
* All Rights Reserved.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\UrlRewrite\Test\Fixture;
9+
10+
use Magento\Cms\Api\PageRepositoryInterface;
11+
use Magento\Cms\Model\PageFactory;
12+
use Magento\Framework\DataObject;
13+
use Magento\TestFramework\Fixture\Api\DataMerger;
14+
use Magento\TestFramework\Fixture\RevertibleDataFixtureInterface;
15+
16+
class CmsPage implements RevertibleDataFixtureInterface
17+
{
18+
private const DEFAULT_DATA = [
19+
'title' => 'CMS Test Page',
20+
'identifier' => 'cms-test-page',
21+
'stores' => [0],
22+
'is_active' => 0, // Key difference - disabled by default
23+
'content' => '<h1>This is a disabled CMS page</h1><p>This page should not be accessible via GraphQL.</p>',
24+
'content_heading' => 'Disabled Page Heading',
25+
'page_layout' => '1column',
26+
'meta_title' => 'Disabled Page Meta Title',
27+
'meta_keywords' => 'disabled, cms, page, test, graphql',
28+
'meta_description' => 'This is a disabled CMS page used for GraphQL error handling tests'
29+
];
30+
31+
/**
32+
* @param PageFactory $pageFactory
33+
* @param PageRepositoryInterface $pageRepository
34+
* @param DataMerger $dataMerger
35+
*/
36+
public function __construct(
37+
private readonly PageFactory $pageFactory,
38+
private readonly PageRepositoryInterface $pageRepository,
39+
private readonly DataMerger $dataMerger,
40+
) {
41+
}
42+
43+
/**
44+
* @inheritdoc
45+
*/
46+
public function apply(array $data = []): ?DataObject
47+
{
48+
$data = $this->dataMerger->merge(self::DEFAULT_DATA, $data);
49+
50+
$page = $this->pageFactory->create();
51+
$page->setTitle($data['title'])
52+
->setIdentifier($data['identifier'])
53+
->setStores($data['stores'])
54+
->setIsActive($data['is_active'])
55+
->setContent($data['content'])
56+
->setContentHeading($data['content_heading'])
57+
->setPageLayout($data['page_layout'])
58+
->setMetaTitle($data['meta_title'])
59+
->setMetaKeywords($data['meta_keywords'])
60+
->setMetaDescription($data['meta_description']);
61+
62+
$this->pageRepository->save($page);
63+
64+
return $page;
65+
}
66+
67+
/**
68+
* @inheritdoc
69+
*/
70+
public function revert(DataObject $data): void
71+
{
72+
$this->pageRepository->delete($data);
73+
}
74+
}

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

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
<?php
22
/**
3-
* Copyright © Magento, Inc. All rights reserved.
4-
* See COPYING.txt for license details.
3+
* Copyright 2020 Adobe
4+
* All Rights Reserved.
55
*/
66
declare(strict_types=1);
77

88
namespace Magento\UrlRewriteGraphQl\Model\Resolver;
99

10+
use Magento\Framework\Exception\NoSuchEntityException;
1011
use Magento\Framework\GraphQl\Config\Element\Field;
1112
use Magento\Framework\GraphQl\Query\ResolverInterface;
1213
use Magento\Framework\GraphQl\Query\Uid;
@@ -58,19 +59,23 @@ public function resolve(
5859
);
5960
$storeId = (int)$context->getExtensionAttributes()->getStore()->getId();
6061
if ($resultArray) {
61-
$result = [];
62-
if (isset($resultArray['type'])) {
63-
$result = $this->entityDataProviderComposite->getData(
64-
$resultArray['type'],
65-
(int)$resultArray['id'],
66-
$info,
67-
$storeId
68-
);
62+
try {
63+
$result = [];
64+
if (isset($resultArray['type'])) {
65+
$result = $this->entityDataProviderComposite->getData(
66+
$resultArray['type'],
67+
(int)$resultArray['id'],
68+
$info,
69+
$storeId
70+
);
71+
}
72+
$result['redirect_code'] = $resultArray['redirect_code'];
73+
$result['relative_url'] = $resultArray['relative_url'];
74+
$result['type'] = $resultArray['type'];
75+
return $result;
76+
} catch (NoSuchEntityException) {
77+
return null;
6978
}
70-
$result['redirect_code'] = $resultArray['redirect_code'];
71-
$result['relative_url'] = $resultArray['relative_url'];
72-
$result['type'] = $resultArray['type'];
73-
return $result;
7479
}
7580
return null;
7681
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
<?php
2+
/**
3+
* Copyright 2025 Adobe
4+
* All Rights Reserved.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\GraphQl\Cms;
9+
10+
use Magento\UrlRewrite\Test\Fixture\CmsPage;
11+
use Magento\TestFramework\Fixture\DataFixture;
12+
use Magento\TestFramework\TestCase\GraphQlAbstract;
13+
14+
/**
15+
* Test to return category aggregations
16+
*/
17+
class CmsPageErrorHandlingTest extends GraphQlAbstract
18+
{
19+
#[
20+
DataFixture(
21+
CmsPage::class,
22+
[
23+
'is_active' => 1,
24+
"identifier"=>"enabled-test-page"
25+
],
26+
as: 'enabled_page'
27+
)
28+
]
29+
public function testGetEnabledCmsPageReturnsData()
30+
{
31+
$query = $this->buildCmsPageQuery('enabled-test-page');
32+
$response = $this->graphQlQuery($query);
33+
$this->assertArrayHasKey('route', $response);
34+
$this->assertEquals('enabled-test-page', $response['route']['relative_url']);
35+
$this->assertEquals('CMS_PAGE', $response['route']['type']);
36+
}
37+
38+
#[
39+
DataFixture(
40+
CmsPage::class,
41+
[
42+
'is_active' => 0,
43+
"identifier"=>"disabled-test-page"
44+
],
45+
as: 'enabled_page'
46+
)
47+
]
48+
public function testGetDisabledCmsPageReturnsData()
49+
{
50+
$query = $this->buildCmsPageQuery('disabled-test-page');
51+
$response = $this->graphQlQuery($query);
52+
$this->assertArrayHasKey('route', $response);
53+
54+
$this->assertNull(
55+
$response['route'],
56+
'Disabled CMS page should return null instead of throwing error'
57+
);
58+
}
59+
60+
/**
61+
* Build GraphQL query for CMS page
62+
*
63+
* @param string $value
64+
* @return string
65+
*/
66+
private function buildCmsPageQuery(string $value): string
67+
{
68+
return <<<QUERY
69+
{
70+
route(url: "{$value}" ) {
71+
redirect_code
72+
relative_url
73+
type
74+
}
75+
}
76+
QUERY;
77+
}
78+
}

0 commit comments

Comments
 (0)