Skip to content

Commit 263588a

Browse files
committed
magento/graphql-ce#387: Test coverage of getting IDs of CMS page/blocks by GraphQL API
1 parent b8d93d8 commit 263588a

File tree

3 files changed

+119
-47
lines changed

3 files changed

+119
-47
lines changed

app/code/Magento/CmsGraphQl/Model/Resolver/DataProvider/Page.php

Lines changed: 8 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -8,52 +8,37 @@
88
namespace Magento\CmsGraphQl\Model\Resolver\DataProvider;
99

1010
use Magento\Cms\Api\Data\PageInterface;
11-
use Magento\Cms\Api\GetPageByIdentifierInterface;
1211
use Magento\Cms\Api\PageRepositoryInterface;
1312
use Magento\Framework\Exception\NoSuchEntityException;
14-
use Magento\Store\Model\StoreManagerInterface;
1513
use Magento\Widget\Model\Template\FilterEmulate;
1614

1715
/**
16+
* @deprecated
17+
* @see Magento\CmsGraphQl\Model\Resolver\DataProvider\PageDataProvider
18+
*
1819
* Cms page data provider
1920
*/
2021
class Page
2122
{
2223
/**
23-
* @var GetPageByIdentifierInterface
24+
* @var FilterEmulate
2425
*/
25-
private $pageByIdentifier;
26+
private $widgetFilter;
2627

2728
/**
2829
* @var PageRepositoryInterface
2930
*/
3031
private $pageRepository;
3132

3233
/**
33-
* @var StoreManagerInterface
34-
*/
35-
private $storeManager;
36-
37-
/**
38-
* @var FilterEmulate
39-
*/
40-
private $widgetFilter;
41-
42-
/**
43-
* @param GetPageByIdentifierInterface $getPageByIdentifier
44-
* @param FilterEmulate $widgetFilter
4534
* @param PageRepositoryInterface $pageRepository
46-
* @param StoreManagerInterface $storeManager
35+
* @param FilterEmulate $widgetFilter
4736
*/
4837
public function __construct(
49-
GetPageByIdentifierInterface $getPageByIdentifier,
50-
FilterEmulate $widgetFilter,
5138
PageRepositoryInterface $pageRepository,
52-
StoreManagerInterface $storeManager
39+
FilterEmulate $widgetFilter
5340
) {
54-
$this->pageByIdentifier = $getPageByIdentifier;
5541
$this->pageRepository = $pageRepository;
56-
$this->storeManager = $storeManager;
5742
$this->widgetFilter = $widgetFilter;
5843
}
5944

@@ -62,32 +47,10 @@ public function __construct(
6247
* @return array
6348
* @throws NoSuchEntityException
6449
*/
65-
public function getDataByPageId(int $pageId): array
50+
public function getData(int $pageId): array
6651
{
6752
$page = $this->pageRepository->getById($pageId);
6853

69-
return $this->convertPageData($page);
70-
}
71-
72-
/**
73-
* @param string $pageIdentifier
74-
* @return array
75-
*/
76-
public function getDataByPageIdentifier(string $pageIdentifier): array
77-
{
78-
$storeId = (int)$this->storeManager->getStore()->getId();
79-
$page = $this->pageByIdentifier->execute($pageIdentifier, $storeId);
80-
81-
return $this->convertPageData($page);
82-
}
83-
84-
/**
85-
* @param PageInterface $page
86-
* @return array
87-
* @throws NoSuchEntityException
88-
*/
89-
private function convertPageData(PageInterface $page)
90-
{
9154
if (false === $page->isActive()) {
9255
throw new NoSuchEntityException();
9356
}
@@ -96,7 +59,6 @@ private function convertPageData(PageInterface $page)
9659

9760
$pageData = [
9861
'url_key' => $page->getIdentifier(),
99-
PageInterface::PAGE_ID => $page->getId(),
10062
PageInterface::TITLE => $page->getTitle(),
10163
PageInterface::CONTENT => $renderedContent,
10264
PageInterface::CONTENT_HEADING => $page->getContentHeading(),
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\CmsGraphQl\Model\Resolver\DataProvider;
9+
10+
use Magento\Cms\Api\Data\PageInterface;
11+
use Magento\Cms\Api\GetPageByIdentifierInterface;
12+
use Magento\Cms\Api\PageRepositoryInterface;
13+
use Magento\Framework\Exception\NoSuchEntityException;
14+
use Magento\Store\Model\StoreManagerInterface;
15+
use Magento\Widget\Model\Template\FilterEmulate;
16+
17+
/**
18+
* Cms page data provider
19+
*/
20+
class PageDataProvider
21+
{
22+
/**
23+
* @var GetPageByIdentifierInterface
24+
*/
25+
private $pageByIdentifier;
26+
27+
/**
28+
* @var PageRepositoryInterface
29+
*/
30+
private $pageRepository;
31+
32+
/**
33+
* @var StoreManagerInterface
34+
*/
35+
private $storeManager;
36+
37+
/**
38+
* @var FilterEmulate
39+
*/
40+
private $widgetFilter;
41+
42+
/**
43+
* @param GetPageByIdentifierInterface $getPageByIdentifier
44+
* @param FilterEmulate $widgetFilter
45+
* @param PageRepositoryInterface $pageRepository
46+
* @param StoreManagerInterface $storeManager
47+
*/
48+
public function __construct(
49+
GetPageByIdentifierInterface $getPageByIdentifier,
50+
FilterEmulate $widgetFilter,
51+
PageRepositoryInterface $pageRepository,
52+
StoreManagerInterface $storeManager
53+
) {
54+
$this->pageByIdentifier = $getPageByIdentifier;
55+
$this->pageRepository = $pageRepository;
56+
$this->storeManager = $storeManager;
57+
$this->widgetFilter = $widgetFilter;
58+
}
59+
60+
/**
61+
* @param int $pageId
62+
* @return array
63+
* @throws NoSuchEntityException
64+
*/
65+
public function getDataByPageId(int $pageId): array
66+
{
67+
$page = $this->pageRepository->getById($pageId);
68+
69+
return $this->convertPageData($page);
70+
}
71+
72+
/**
73+
* @param string $pageIdentifier
74+
* @return array
75+
*/
76+
public function getDataByPageIdentifier(string $pageIdentifier): array
77+
{
78+
$storeId = (int)$this->storeManager->getStore()->getId();
79+
$page = $this->pageByIdentifier->execute($pageIdentifier, $storeId);
80+
81+
return $this->convertPageData($page);
82+
}
83+
84+
/**
85+
* @param PageInterface $page
86+
* @return array
87+
* @throws NoSuchEntityException
88+
*/
89+
private function convertPageData(PageInterface $page)
90+
{
91+
if (false === $page->isActive()) {
92+
throw new NoSuchEntityException();
93+
}
94+
95+
$renderedContent = $this->widgetFilter->filter($page->getContent());
96+
97+
$pageData = [
98+
'url_key' => $page->getIdentifier(),
99+
PageInterface::PAGE_ID => $page->getId(),
100+
PageInterface::TITLE => $page->getTitle(),
101+
PageInterface::CONTENT => $renderedContent,
102+
PageInterface::CONTENT_HEADING => $page->getContentHeading(),
103+
PageInterface::PAGE_LAYOUT => $page->getPageLayout(),
104+
PageInterface::META_TITLE => $page->getMetaTitle(),
105+
PageInterface::META_DESCRIPTION => $page->getMetaDescription(),
106+
PageInterface::META_KEYWORDS => $page->getMetaKeywords(),
107+
];
108+
return $pageData;
109+
}
110+
}

app/code/Magento/CmsGraphQl/Model/Resolver/Page.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace Magento\CmsGraphQl\Model\Resolver;
99

10-
use Magento\CmsGraphQl\Model\Resolver\DataProvider\Page as PageDataProvider;
10+
use Magento\CmsGraphQl\Model\Resolver\DataProvider\PageDataProvider as PageDataProvider;
1111
use Magento\Framework\Exception\NoSuchEntityException;
1212
use Magento\Framework\GraphQl\Config\Element\Field;
1313
use Magento\Framework\GraphQl\Exception\GraphQlInputException;

0 commit comments

Comments
 (0)