PageTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Cms\Model;
  7. use Magento\Cms\Api\PageRepositoryInterface;
  8. use Magento\Framework\App\ResourceConnection;
  9. use Magento\Framework\Stdlib\DateTime\DateTime;
  10. /**
  11. * @magentoAppArea adminhtml
  12. */
  13. class PageTest extends \PHPUnit\Framework\TestCase
  14. {
  15. protected function setUp()
  16. {
  17. $user = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  18. \Magento\User\Model\User::class
  19. )->loadByUsername(
  20. \Magento\TestFramework\Bootstrap::ADMIN_NAME
  21. );
  22. /** @var $session \Magento\Backend\Model\Auth\Session */
  23. $session = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
  24. \Magento\Backend\Model\Auth\Session::class
  25. );
  26. $session->setUser($user);
  27. }
  28. /**
  29. * Tests the get by identifier command
  30. * @param array $pageData
  31. * @throws \Magento\Framework\Exception\NoSuchEntityException
  32. * @magentoDbIsolation enabled
  33. * @dataProvider testGetByIdentifierDataProvider
  34. */
  35. public function testGetByIdentifier(array $pageData)
  36. {
  37. $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  38. /** @var \Magento\Cms\Model\GetPageByIdentifier $getPageByIdentifierCommand */
  39. /** @var \Magento\Cms\Model\ResourceModel\Page $pageResource */
  40. /** @var \Magento\Cms\Model\PageFactory $pageFactory */
  41. $pageFactory = $objectManager->create(\Magento\Cms\Model\PageFactory::class);
  42. $pageResource = $objectManager->create(\Magento\Cms\Model\ResourceModel\Page::class);
  43. $getPageByIdentifierCommand = $objectManager->create(\Magento\Cms\Model\GetPageByIdentifier::class);
  44. # Prepare and save the temporary page
  45. $tempPage = $pageFactory->create();
  46. $tempPage->setData($pageData);
  47. $pageResource->save($tempPage);
  48. # Load previously created block and compare identifiers
  49. $storeId = reset($pageData['stores']);
  50. $page = $getPageByIdentifierCommand->execute($pageData['identifier'], $storeId);
  51. $this->assertEquals($pageData['identifier'], $page->getIdentifier());
  52. }
  53. /**
  54. * @param array $data
  55. * @param string $expectedIdentifier
  56. * @magentoDbIsolation enabled
  57. * @dataProvider generateIdentifierFromTitleDataProvider
  58. */
  59. public function testGenerateIdentifierFromTitle($data, $expectedIdentifier)
  60. {
  61. $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  62. /** @var \Magento\Cms\Model\Page $page */
  63. $page = $objectManager->create(\Magento\Cms\Model\Page::class);
  64. $page->setData($data);
  65. $page->save();
  66. $this->assertEquals($expectedIdentifier, $page->getIdentifier());
  67. }
  68. /**
  69. * @magentoDbIsolation enabled
  70. */
  71. public function testUpdateTime()
  72. {
  73. $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  74. /**
  75. * @var $db \Magento\Framework\DB\Adapter\AdapterInterface
  76. */
  77. $db = $objectManager->get(\Magento\Framework\App\ResourceConnection::class)
  78. ->getConnection(ResourceConnection::DEFAULT_CONNECTION);
  79. /** @var \Magento\Cms\Model\Page $page */
  80. $page = $objectManager->create(\Magento\Cms\Model\Page::class);
  81. $page->setData(['title' => 'Test', 'stores' => [1]]);
  82. $beforeTimestamp = $db->fetchCol('SELECT UNIX_TIMESTAMP()')[0];
  83. $page->save();
  84. $afterTimestamp = $db->fetchCol('SELECT UNIX_TIMESTAMP()')[0];
  85. $page = $objectManager->get(PageRepositoryInterface::class)->getById($page->getId());
  86. $pageTimestamp = strtotime($page->getUpdateTime());
  87. /*
  88. * These checks prevent a race condition MAGETWO-95534
  89. */
  90. $this->assertGreaterThanOrEqual($beforeTimestamp, $pageTimestamp);
  91. $this->assertLessThanOrEqual($afterTimestamp, $pageTimestamp);
  92. }
  93. public function generateIdentifierFromTitleDataProvider() : array
  94. {
  95. return [
  96. ['data' => ['title' => 'Test title', 'stores' => [1]], 'expectedIdentifier' => 'test-title'],
  97. [
  98. 'data' => ['title' => 'Кирилический заголовок', 'stores' => [1]],
  99. 'expectedIdentifier' => 'kirilicheskij-zagolovok'
  100. ],
  101. [
  102. 'data' => ['title' => 'Test title', 'identifier' => 'custom-identifier', 'stores' => [1]],
  103. 'expectedIdentifier' => 'custom-identifier'
  104. ]
  105. ];
  106. }
  107. /**
  108. * Data provider for "testGetByIdentifier" method
  109. * @return array
  110. */
  111. public function testGetByIdentifierDataProvider() : array
  112. {
  113. return [
  114. ['data' => [
  115. 'title' => 'Test title',
  116. 'identifier' => 'test-identifier',
  117. 'page_layout' => '1column',
  118. 'stores' => [1],
  119. 'content' => 'Test content',
  120. 'is_active' => 1
  121. ]]
  122. ];
  123. }
  124. }