magento2-docker/dev/tests/integration/testsuite/Magento/Cms/Model/PageTest.php

139 lines
5.0 KiB
PHP
Executable File

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Cms\Model;
use Magento\Cms\Api\PageRepositoryInterface;
use Magento\Framework\App\ResourceConnection;
use Magento\Framework\Stdlib\DateTime\DateTime;
/**
* @magentoAppArea adminhtml
*/
class PageTest extends \PHPUnit\Framework\TestCase
{
protected function setUp(): void
{
$user = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
\Magento\User\Model\User::class
)->loadByUsername(
\Magento\TestFramework\Bootstrap::ADMIN_NAME
);
/** @var $session \Magento\Backend\Model\Auth\Session */
$session = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
\Magento\Backend\Model\Auth\Session::class
);
$session->setUser($user);
}
/**
* Tests the get by identifier command
* @param array $pageData
* @throws \Magento\Framework\Exception\NoSuchEntityException
* @magentoDbIsolation enabled
* @dataProvider testGetByIdentifierDataProvider
*/
public function testGetByIdentifier(array $pageData)
{
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
/** @var \Magento\Cms\Model\GetPageByIdentifier $getPageByIdentifierCommand */
/** @var \Magento\Cms\Model\ResourceModel\Page $pageResource */
/** @var \Magento\Cms\Model\PageFactory $pageFactory */
$pageFactory = $objectManager->create(\Magento\Cms\Model\PageFactory::class);
$pageResource = $objectManager->create(\Magento\Cms\Model\ResourceModel\Page::class);
$getPageByIdentifierCommand = $objectManager->create(\Magento\Cms\Model\GetPageByIdentifier::class);
# Prepare and save the temporary page
$tempPage = $pageFactory->create();
$tempPage->setData($pageData);
$pageResource->save($tempPage);
# Load previously created block and compare identifiers
$storeId = reset($pageData['stores']);
$page = $getPageByIdentifierCommand->execute($pageData['identifier'], $storeId);
$this->assertEquals($pageData['identifier'], $page->getIdentifier());
}
/**
* @param array $data
* @param string $expectedIdentifier
* @magentoDbIsolation enabled
* @dataProvider generateIdentifierFromTitleDataProvider
*/
public function testGenerateIdentifierFromTitle($data, $expectedIdentifier)
{
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
/** @var \Magento\Cms\Model\Page $page */
$page = $objectManager->create(\Magento\Cms\Model\Page::class);
$page->setData($data);
$page->save();
$this->assertEquals($expectedIdentifier, $page->getIdentifier());
}
/**
* @magentoDbIsolation enabled
*/
public function testUpdateTime()
{
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
/**
* @var $db \Magento\Framework\DB\Adapter\AdapterInterface
*/
$db = $objectManager->get(\Magento\Framework\App\ResourceConnection::class)
->getConnection(ResourceConnection::DEFAULT_CONNECTION);
/** @var \Magento\Cms\Model\Page $page */
$page = $objectManager->create(\Magento\Cms\Model\Page::class);
$page->setData(['title' => 'Test', 'stores' => [1]]);
$beforeTimestamp = $db->fetchCol('SELECT UNIX_TIMESTAMP()')[0];
$page->save();
$afterTimestamp = $db->fetchCol('SELECT UNIX_TIMESTAMP()')[0];
$page = $objectManager->get(PageRepositoryInterface::class)->getById($page->getId());
$pageTimestamp = strtotime($page->getUpdateTime());
/*
* These checks prevent a race condition MAGETWO-95534
*/
$this->assertGreaterThanOrEqual($beforeTimestamp, $pageTimestamp);
$this->assertLessThanOrEqual($afterTimestamp, $pageTimestamp);
}
public function generateIdentifierFromTitleDataProvider() : array
{
return [
['data' => ['title' => 'Test title', 'stores' => [1]], 'expectedIdentifier' => 'test-title'],
[
'data' => ['title' => 'Кирилический заголовок', 'stores' => [1]],
'expectedIdentifier' => 'kirilicheskij-zagolovok'
],
[
'data' => ['title' => 'Test title', 'identifier' => 'custom-identifier', 'stores' => [1]],
'expectedIdentifier' => 'custom-identifier'
]
];
}
/**
* Data provider for "testGetByIdentifier" method
* @return array
*/
public function testGetByIdentifierDataProvider() : array
{
return [
['data' => [
'title' => 'Test title',
'identifier' => 'test-identifier',
'page_layout' => '1column',
'stores' => [1],
'content' => 'Test content',
'is_active' => 1
]]
];
}
}