151 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			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']
 | 
						|
        ];
 | 
						|
    }
 | 
						|
}
 |