PageRenderTime 55ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/dev/tests/api-functional/testsuite/Magento/Cms/Api/PageRepositoryTest.php

https://gitlab.com/crazybutterfly815/magento2
PHP | 282 lines | 198 code | 31 blank | 53 comment | 1 complexity | 100a56bdb4afd9359c094b04f830d870 MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Cms\Api;
  7. use Magento\Cms\Api\Data\PageInterface;
  8. use Magento\TestFramework\Helper\Bootstrap;
  9. use Magento\TestFramework\TestCase\WebapiAbstract;
  10. /**
  11. * Tests for cms page service.
  12. */
  13. class PageRepositoryTest extends WebapiAbstract
  14. {
  15. const SERVICE_NAME = 'cmsPageRepositoryV1';
  16. const SERVICE_VERSION = 'V1';
  17. const RESOURCE_PATH = '/V1/cmsPage';
  18. /**
  19. * @var \Magento\Cms\Api\Data\PageInterfaceFactory
  20. */
  21. protected $pageFactory;
  22. /**
  23. * @var \Magento\Cms\Api\PageRepositoryInterface
  24. */
  25. protected $pageRepository;
  26. /**
  27. * @var \Magento\Framework\Api\DataObjectHelper
  28. */
  29. protected $dataObjectHelper;
  30. /**
  31. * @var \Magento\Framework\Reflection\DataObjectProcessor
  32. */
  33. protected $dataObjectProcessor;
  34. /**
  35. * @var \Magento\Cms\Api\Data\PageInterface|null
  36. */
  37. protected $currentPage;
  38. /**
  39. * Execute per test initialization.
  40. */
  41. public function setUp()
  42. {
  43. $this->pageFactory = Bootstrap::getObjectManager()->create(\Magento\Cms\Api\Data\PageInterfaceFactory::class);
  44. $this->pageRepository = Bootstrap::getObjectManager()->create(\Magento\Cms\Api\PageRepositoryInterface::class);
  45. $this->dataObjectHelper = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\DataObjectHelper::class);
  46. $this->dataObjectProcessor = Bootstrap::getObjectManager()
  47. ->create(\Magento\Framework\Reflection\DataObjectProcessor::class);
  48. }
  49. /**
  50. * Clear temporary data
  51. */
  52. public function tearDown()
  53. {
  54. if ($this->currentPage) {
  55. $this->pageRepository->delete($this->currentPage);
  56. $this->currentPage = null;
  57. }
  58. }
  59. /**
  60. * Test get \Magento\Cms\Api\Data\PageInterface
  61. */
  62. public function testGet()
  63. {
  64. $pageTitle = 'Page title';
  65. $pageIdentifier = 'page-title' . uniqid();
  66. /** @var \Magento\Cms\Api\Data\PageInterface $pageDataObject */
  67. $pageDataObject = $this->pageFactory->create();
  68. $pageDataObject->setTitle($pageTitle)
  69. ->setIdentifier($pageIdentifier);
  70. $this->currentPage = $this->pageRepository->save($pageDataObject);
  71. $serviceInfo = [
  72. 'rest' => [
  73. 'resourcePath' => self::RESOURCE_PATH . '/' . $this->currentPage->getId(),
  74. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
  75. ],
  76. 'soap' => [
  77. 'service' => self::SERVICE_NAME,
  78. 'serviceVersion' => self::SERVICE_VERSION,
  79. 'operation' => self::SERVICE_NAME . 'GetById',
  80. ],
  81. ];
  82. $page = $this->_webApiCall($serviceInfo, [PageInterface::PAGE_ID => $this->currentPage->getId()]);
  83. $this->assertNotNull($page['id']);
  84. $pageData = $this->pageRepository->getById($page['id']);
  85. $this->assertEquals($pageData->getTitle(), $pageTitle);
  86. $this->assertEquals($pageData->getIdentifier(), $pageIdentifier);
  87. }
  88. /**
  89. * Test create \Magento\Cms\Api\Data\PageInterface
  90. */
  91. public function testCreate()
  92. {
  93. $pageTitle = 'Page title';
  94. $pageIdentifier = 'page-title' . uniqid();
  95. /** @var \Magento\Cms\Api\Data\PageInterface $pageDataObject */
  96. $pageDataObject = $this->pageFactory->create();
  97. $pageDataObject->setTitle($pageTitle)
  98. ->setIdentifier($pageIdentifier);
  99. $serviceInfo = [
  100. 'rest' => [
  101. 'resourcePath' => self::RESOURCE_PATH,
  102. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
  103. ],
  104. 'soap' => [
  105. 'service' => self::SERVICE_NAME,
  106. 'serviceVersion' => self::SERVICE_VERSION,
  107. 'operation' => self::SERVICE_NAME . 'Save',
  108. ],
  109. ];
  110. $requestData = ['page' => [
  111. PageInterface::IDENTIFIER => $pageDataObject->getIdentifier(),
  112. PageInterface::TITLE => $pageDataObject->getTitle(),
  113. ],
  114. ];
  115. $page = $this->_webApiCall($serviceInfo, $requestData);
  116. $this->assertNotNull($page['id']);
  117. $this->currentPage = $this->pageRepository->getById($page['id']);
  118. $this->assertEquals($this->currentPage->getTitle(), $pageTitle);
  119. $this->assertEquals($this->currentPage->getIdentifier(), $pageIdentifier);
  120. }
  121. /**
  122. * Test update \Magento\Cms\Api\Data\PageInterface
  123. */
  124. public function testUpdate()
  125. {
  126. $pageTitle = 'Page title';
  127. $newPageTitle = 'New Page title';
  128. $pageIdentifier = 'page-title' . uniqid();
  129. /** @var \Magento\Cms\Api\Data\PageInterface $pageDataObject */
  130. $pageDataObject = $this->pageFactory->create();
  131. $pageDataObject->setTitle($pageTitle)
  132. ->setIdentifier($pageIdentifier);
  133. $this->currentPage = $this->pageRepository->save($pageDataObject);
  134. $this->dataObjectHelper->populateWithArray(
  135. $this->currentPage,
  136. [PageInterface::TITLE => $newPageTitle],
  137. \Magento\Cms\Api\Data\PageInterface::class
  138. );
  139. $pageData = $this->dataObjectProcessor->buildOutputDataArray(
  140. $this->currentPage,
  141. \Magento\Cms\Api\Data\PageInterface::class
  142. );
  143. $serviceInfo = [
  144. 'rest' => [
  145. 'resourcePath' => self::RESOURCE_PATH,
  146. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
  147. ],
  148. 'soap' => [
  149. 'service' => self::SERVICE_NAME,
  150. 'serviceVersion' => self::SERVICE_VERSION,
  151. 'operation' => self::SERVICE_NAME . 'Save',
  152. ],
  153. ];
  154. $page = $this->_webApiCall($serviceInfo, ['page' => $pageData]);
  155. $this->assertNotNull($page['id']);
  156. $pageData = $this->pageRepository->getById($page['id']);
  157. $this->assertEquals($pageData->getTitle(), $newPageTitle);
  158. }
  159. /**
  160. * Test delete \Magento\Cms\Api\Data\PageInterface
  161. * @expectedException \Magento\Framework\Exception\NoSuchEntityException
  162. */
  163. public function testDelete()
  164. {
  165. $pageTitle = 'Page title';
  166. $pageIdentifier = 'page-title' . uniqid();
  167. /** @var \Magento\Cms\Api\Data\PageInterface $pageDataObject */
  168. $pageDataObject = $this->pageFactory->create();
  169. $pageDataObject->setTitle($pageTitle)
  170. ->setIdentifier($pageIdentifier);
  171. $this->currentPage = $this->pageRepository->save($pageDataObject);
  172. $serviceInfo = [
  173. 'rest' => [
  174. 'resourcePath' => self::RESOURCE_PATH . '/' . $this->currentPage->getId(),
  175. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
  176. ],
  177. 'soap' => [
  178. 'service' => self::SERVICE_NAME,
  179. 'serviceVersion' => self::SERVICE_VERSION,
  180. 'operation' => self::SERVICE_NAME . 'DeleteById',
  181. ],
  182. ];
  183. $this->_webApiCall($serviceInfo, [PageInterface::PAGE_ID => $this->currentPage->getId()]);
  184. $this->pageRepository->getById($this->currentPage['id']);
  185. }
  186. /**
  187. * Test search \Magento\Cms\Api\Data\PageInterface
  188. */
  189. public function testSearch()
  190. {
  191. $cmsPages = $this->prepareCmsPages();
  192. $filterBuilder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
  193. /** @var \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder */
  194. $searchCriteriaBuilder = Bootstrap::getObjectManager()
  195. ->create(\Magento\Framework\Api\SearchCriteriaBuilder::class);
  196. $filterIdentifier = $filterBuilder
  197. ->setField(PageInterface::IDENTIFIER)
  198. ->setValue($cmsPages['first']->getIdentifier())
  199. ->create();
  200. $searchCriteriaBuilder->addFilters([$filterIdentifier]);
  201. $filterTitle = $filterBuilder
  202. ->setField(PageInterface::TITLE)
  203. ->setValue($cmsPages['second']->getTitle())
  204. ->create();
  205. $filterStatus = $filterBuilder
  206. ->setField(PageInterface::IS_ACTIVE)
  207. ->setValue($cmsPages['first']->isActive())
  208. ->create();
  209. $searchCriteriaBuilder->addFilters([$filterTitle, $filterStatus]);
  210. $searchData = $searchCriteriaBuilder->create()->__toArray();
  211. $requestData = ['searchCriteria' => $searchData];
  212. $serviceInfo = [
  213. 'rest' => [
  214. 'resourcePath' => self::RESOURCE_PATH . "/search" . '?' . http_build_query($requestData),
  215. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
  216. ],
  217. 'soap' => [
  218. 'service' => self::SERVICE_NAME,
  219. 'serviceVersion' => self::SERVICE_VERSION,
  220. 'operation' => self::SERVICE_NAME . 'GetList',
  221. ],
  222. ];
  223. $searchResult = $this->_webApiCall($serviceInfo, $requestData);
  224. $this->assertEquals(1, $searchResult['total_count']);
  225. $this->assertEquals($searchResult['items'][0][PageInterface::IDENTIFIER], $cmsPages['first']->getIdentifier());
  226. }
  227. /**
  228. * @return PageInterface[]
  229. */
  230. private function prepareCmsPages()
  231. {
  232. $result = [];
  233. $pagesData['first'][PageInterface::TITLE] = 'Page title 1';
  234. $pagesData['first'][PageInterface::IDENTIFIER] = 'page-title-1' . uniqid();
  235. $pagesData['first'][PageInterface::IS_ACTIVE] = true;
  236. $pagesData['second'][PageInterface::TITLE] = 'Page title 2';
  237. $pagesData['second'][PageInterface::IDENTIFIER] = 'page-title-2' . uniqid();
  238. $pagesData['second'][PageInterface::IS_ACTIVE] = false;
  239. foreach ($pagesData as $key => $pageData) {
  240. /** @var \Magento\Cms\Api\Data\PageInterface $pageDataObject */
  241. $pageDataObject = $this->pageFactory->create();
  242. $this->dataObjectHelper->populateWithArray(
  243. $pageDataObject,
  244. $pageData,
  245. \Magento\Cms\Api\Data\PageInterface::class
  246. );
  247. $result[$key] = $this->pageRepository->save($pageDataObject);
  248. }
  249. return $result;
  250. }
  251. }