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

151 lines
4.9 KiB
PHP
Executable File

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Cms\Controller;
use Magento\Cms\Api\GetPageByIdentifierInterface;
use Magento\Cms\Model\Page\CustomLayoutManagerInterface;
use Magento\Framework\View\LayoutInterface;
use Magento\TestFramework\Cms\Model\CustomLayoutManager;
use Magento\TestFramework\TestCase\AbstractController;
/**
* Test for \Magento\Cms\Controller\Page\View class.
*/
class PageTest extends AbstractController
{
/**
* @var GetPageByIdentifierInterface
*/
private $pageRetriever;
/**
* @inheritDoc
*/
protected function setUp(): void
{
parent::setUp();
$this->_objectManager->configure([
'preferences' => [
CustomLayoutManagerInterface::class => CustomLayoutManager::class,
]
]);
$this->pageRetriever = $this->_objectManager->get(GetPageByIdentifierInterface::class);
}
public function testViewAction()
{
$this->dispatch('/enable-cookies');
$this->assertStringContainsString('What are Cookies?', $this->getResponse()->getBody());
}
public function testViewRedirectWithTrailingSlash()
{
$this->dispatch('/enable-cookies/');
$code = $this->getResponse()->getStatusCode();
$location = $this->getResponse()->getHeader('Location')->getFieldValue();
$this->assertEquals(301, $code, 'Invalid response code');
$this->assertStringEndsWith('/enable-cookies', $location, 'Invalid location header');
}
/**
* Test \Magento\Cms\Block\Page::_addBreadcrumbs
*/
public function testAddBreadcrumbs()
{
$this->dispatch('/enable-cookies');
$layout = $this->_objectManager->get(LayoutInterface::class);
$breadcrumbsBlock = $layout->getBlock('breadcrumbs');
$this->assertStringContainsString($breadcrumbsBlock->toHtml(), $this->getResponse()->getBody());
}
/**
* @magentoDataFixture cmsPageWithSystemRouteFixture
*/
public function testCreatePageWithSameModuleName()
{
$this->dispatch('/shipping');
$content = $this->getResponse()->getBody();
$this->assertStringContainsString('Shipping Test Page', $content);
}
public static function cmsPageWithSystemRouteFixture()
{
/** @var $page \Magento\Cms\Model\Page */
$page = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Cms\Model\Page::class);
$page->setTitle('Test title')
->setIdentifier('shipping')
->setStores([0])
->setIsActive(1)
->setContent('<h1>Shipping Test Page</h1>')
->setPageLayout('1column')
->save();
}
/**
* Check that custom handles are applied when rendering a page.
*
* @return void
* @throws \Throwable
* @magentoDataFixture Magento/Cms/_files/pages_with_layout_xml.php
*/
public function testCustomHandles(): void
{
$page = $this->pageRetriever->execute('test_custom_layout_page_3', 0);
$this->dispatch('/cms/page/view/page_id/' . $page->getId());
/** @var LayoutInterface $layout */
$layout = $this->_objectManager->get(LayoutInterface::class);
$handles = $layout->getUpdate()->getHandles();
$this->assertContains('cms_page_view_selectable_test_custom_layout_page_3_test_selected', $handles);
}
/**
* Check home page custom handle is applied when rendering a page.
*
* @return void
* @throws \Throwable
* @magentoDataFixture Magento/Cms/_files/home_with_custom_handle.php
*/
public function testHomePageCustomHandles(): void
{
$this->dispatch('/');
/** @var LayoutInterface $layout */
$layout = $this->_objectManager->get(LayoutInterface::class);
$handles = $layout->getUpdate()->getHandles();
$this->assertContains('cms_page_view_selectable_home_page_custom_layout', $handles);
}
/**
* Tests page renders even with unavailable custom page layout.
*
* @magentoDataFixture Magento/Cms/Fixtures/page_list.php
* @dataProvider pageLayoutDataProvider
* @param string $pageIdentifier
* @return void
*/
public function testPageWithCustomLayout(string $pageIdentifier): void
{
$page = $this->pageRetriever->execute($pageIdentifier, 0);
$this->dispatch('/cms/page/view/page_id/' . $page->getId());
$this->assertStringContainsString(
'<main id="maincontent" class="page-main">',
$this->getResponse()->getBody()
);
}
/**
* @return array
*/
public function pageLayoutDataProvider(): array
{
return [
'Page with 1column layout' => ['page-with-1column-layout'],
'Page with unavailable layout' => ['page-with-unavailable-layout']
];
}
}