177 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			177 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Magento\Cms\Model\Page;
 | 
						|
 | 
						|
use Magento\Cms\Api\GetPageByIdentifierInterface;
 | 
						|
use Magento\Framework\App\Request\Http as HttpRequest;
 | 
						|
use Magento\Framework\App\RequestInterface;
 | 
						|
use Magento\Framework\ObjectManagerInterface;
 | 
						|
use Magento\TestFramework\Cms\Model\CustomLayoutManager;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
use PHPUnit\Framework\TestCase;
 | 
						|
 | 
						|
/**
 | 
						|
 * Test pages data provider.
 | 
						|
 *
 | 
						|
 * @magentoAppArea adminhtml
 | 
						|
 */
 | 
						|
class DataProviderTest extends TestCase
 | 
						|
{
 | 
						|
    private $providerData = [
 | 
						|
        'name' => 'test',
 | 
						|
        'primaryFieldName' => 'page_id',
 | 
						|
        'requestFieldName' => 'page_id',
 | 
						|
    ];
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var DataProvider
 | 
						|
     */
 | 
						|
    private $provider;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var GetPageByIdentifierInterface
 | 
						|
     */
 | 
						|
    private $repo;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var CustomLayoutManager
 | 
						|
     */
 | 
						|
    private $filesFaker;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var HttpRequest
 | 
						|
     */
 | 
						|
    private $request;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var ObjectManagerInterface
 | 
						|
     */
 | 
						|
    private $objectManager;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritDoc
 | 
						|
     */
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->objectManager = Bootstrap::getObjectManager();
 | 
						|
        $this->objectManager->configure([
 | 
						|
            'preferences' => [CustomLayoutManagerInterface::class => CustomLayoutManager::class]
 | 
						|
        ]);
 | 
						|
        $this->repo = $this->objectManager->get(GetPageByIdentifierInterface::class);
 | 
						|
        $this->filesFaker = $this->objectManager->get(CustomLayoutManager::class);
 | 
						|
        $this->request = $this->objectManager->get(HttpRequest::class);
 | 
						|
        $this->provider = $this->objectManager->create(
 | 
						|
            DataProvider::class,
 | 
						|
            array_merge($this->providerData, ['customLayoutManager' => $this->filesFaker])
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Check that custom layout date is handled properly.
 | 
						|
     *
 | 
						|
     * @magentoDataFixture Magento/Cms/_files/pages_with_layout_xml.php
 | 
						|
     * @dataProvider customLayoutDataProvider
 | 
						|
     *
 | 
						|
     * @param string $identifier
 | 
						|
     * @param string|null $layoutUpdateSelected
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function testCustomLayoutData(string $identifier, ?string $layoutUpdateSelected): void
 | 
						|
    {
 | 
						|
        $page = $this->repo->execute($identifier, 0);
 | 
						|
 | 
						|
        $request = $this->objectManager->create(RequestInterface::class);
 | 
						|
        $request->setParam('page_id', $page->getId());
 | 
						|
 | 
						|
        $provider = $this->objectManager->create(
 | 
						|
            DataProvider::class,
 | 
						|
            array_merge($this->providerData, ['request' => $request])
 | 
						|
        );
 | 
						|
 | 
						|
        $data = $provider->getData();
 | 
						|
        $pageData = $data[$page->getId()];
 | 
						|
 | 
						|
        $this->assertEquals($layoutUpdateSelected, $pageData['layout_update_selected']);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * DataProvider for testCustomLayoutData
 | 
						|
     *
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    public function customLayoutDataProvider(): array
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            ['test_custom_layout_page_1', '_existing_'],
 | 
						|
            ['test_custom_layout_page_2', null],
 | 
						|
            ['test_custom_layout_page_3', 'test_selected'],
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Check that proper meta for custom layout field is returned.
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     * @throws \Throwable
 | 
						|
     * @magentoDataFixture Magento/Cms/_files/pages_with_layout_xml.php
 | 
						|
     */
 | 
						|
    public function testCustomLayoutMeta(): void
 | 
						|
    {
 | 
						|
        //Testing a page without layout xml
 | 
						|
        $page = $this->repo->execute('test_custom_layout_page_3', 0);
 | 
						|
        $this->filesFaker->fakeAvailableFiles((int)$page->getId(), ['test1', 'test2']);
 | 
						|
        $this->request->setParam('page_id', $page->getId());
 | 
						|
 | 
						|
        $meta = $this->provider->getMeta();
 | 
						|
        $this->assertArrayHasKey('design', $meta);
 | 
						|
        $this->assertArrayHasKey('children', $meta['design']);
 | 
						|
        $this->assertArrayHasKey('custom_layout_update_select', $meta['design']['children']);
 | 
						|
        $this->assertArrayHasKey('arguments', $meta['design']['children']['custom_layout_update_select']);
 | 
						|
        $this->assertArrayHasKey('data', $meta['design']['children']['custom_layout_update_select']['arguments']);
 | 
						|
        $this->assertArrayHasKey(
 | 
						|
            'options',
 | 
						|
            $meta['design']['children']['custom_layout_update_select']['arguments']['data']
 | 
						|
        );
 | 
						|
        $expectedList = [
 | 
						|
            ['label' => 'No update', 'value' => '_no_update_'],
 | 
						|
            ['label' => 'test1', 'value' => 'test1'],
 | 
						|
            ['label' => 'test2', 'value' => 'test2']
 | 
						|
        ];
 | 
						|
        $metaList = $meta['design']['children']['custom_layout_update_select']['arguments']['data']['options'];
 | 
						|
        sort($expectedList);
 | 
						|
        sort($metaList);
 | 
						|
        $this->assertEquals($expectedList, $metaList);
 | 
						|
 | 
						|
        //Page with old layout xml
 | 
						|
        $page = $this->repo->execute('test_custom_layout_page_1', 0);
 | 
						|
        $this->filesFaker->fakeAvailableFiles((int)$page->getId(), ['test3']);
 | 
						|
        $this->request->setParam('page_id', $page->getId());
 | 
						|
 | 
						|
        $meta = $this->provider->getMeta();
 | 
						|
        $this->assertArrayHasKey('design', $meta);
 | 
						|
        $this->assertArrayHasKey('children', $meta['design']);
 | 
						|
        $this->assertArrayHasKey('custom_layout_update_select', $meta['design']['children']);
 | 
						|
        $this->assertArrayHasKey('arguments', $meta['design']['children']['custom_layout_update_select']);
 | 
						|
        $this->assertArrayHasKey('data', $meta['design']['children']['custom_layout_update_select']['arguments']);
 | 
						|
        $this->assertArrayHasKey(
 | 
						|
            'options',
 | 
						|
            $meta['design']['children']['custom_layout_update_select']['arguments']['data']
 | 
						|
        );
 | 
						|
        $expectedList = [
 | 
						|
            ['label' => 'No update', 'value' => '_no_update_'],
 | 
						|
            ['label' => 'Use existing layout update XML', 'value' => '_existing_'],
 | 
						|
            ['label' => 'test3', 'value' => 'test3'],
 | 
						|
        ];
 | 
						|
        $metaList = $meta['design']['children']['custom_layout_update_select']['arguments']['data']['options'];
 | 
						|
        sort($expectedList);
 | 
						|
        sort($metaList);
 | 
						|
        $this->assertEquals($expectedList, $metaList);
 | 
						|
    }
 | 
						|
}
 |