139 lines
5.0 KiB
PHP
Executable File
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
|
|
]]
|
|
];
|
|
}
|
|
}
|