216 lines
8.9 KiB
PHP
Executable File
216 lines
8.9 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Theme\Model\View;
|
|
|
|
use Magento\Framework\App\Filesystem\DirectoryList;
|
|
use Magento\Store\Model\ScopeInterface;
|
|
|
|
/**
|
|
* @magentoComponentsDir Magento/Theme/Model/_files/design
|
|
* @magentoDbIsolation enabled
|
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
|
*/
|
|
class DesignTest extends \PHPUnit\Framework\TestCase
|
|
{
|
|
/**
|
|
* @var \Magento\Framework\View\DesignInterface
|
|
*/
|
|
protected $_model;
|
|
|
|
/**
|
|
* @var \Magento\Framework\View\FileSystem
|
|
*/
|
|
protected $_viewFileSystem;
|
|
|
|
/**
|
|
* @var \Magento\Framework\View\ConfigInterface
|
|
*/
|
|
protected $_viewConfig;
|
|
|
|
public static function setUpBeforeClass(): void
|
|
{
|
|
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
|
|
/** @var \Magento\Framework\Filesystem $filesystem */
|
|
$filesystem = $objectManager->get(\Magento\Framework\Filesystem::class);
|
|
$themeDir = $filesystem->getDirectoryWrite(DirectoryList::MEDIA);
|
|
$themeDir->delete('theme/frontend');
|
|
$themeDir->delete('theme/_merged');
|
|
|
|
$libDir = $filesystem->getDirectoryWrite(DirectoryList::LIB_WEB);
|
|
$libDir->copyFile('prototype/prototype.js', 'prototype/prototype.min.js');
|
|
}
|
|
|
|
public static function tearDownAfterClass(): void
|
|
{
|
|
/** @var \Magento\Framework\Filesystem $filesystem */
|
|
$filesystem = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
|
|
->get(\Magento\Framework\Filesystem::class);
|
|
$libDir = $filesystem->getDirectoryWrite(DirectoryList::LIB_WEB);
|
|
$libDir->delete('prototype/prototype.min.js');
|
|
}
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
|
|
/** @var \Magento\Theme\Model\Theme\Registration $registration */
|
|
$registration = $objectManager->get(
|
|
\Magento\Theme\Model\Theme\Registration::class
|
|
);
|
|
$registration->register();
|
|
$this->_model = $objectManager->create(\Magento\Framework\View\DesignInterface::class);
|
|
$this->_viewFileSystem = $objectManager->create(\Magento\Framework\View\FileSystem::class);
|
|
$this->_viewConfig = $objectManager->create(\Magento\Framework\View\ConfigInterface::class);
|
|
$objectManager->get(\Magento\Framework\App\State::class)->setAreaCode('frontend');
|
|
}
|
|
|
|
/**
|
|
* Emulate fixture design theme
|
|
*
|
|
* @param string $themePath
|
|
*/
|
|
protected function _emulateFixtureTheme($themePath = 'Test_FrameworkThemeTest/default')
|
|
{
|
|
\Magento\TestFramework\Helper\Bootstrap::getInstance()->loadArea('frontend');
|
|
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
|
|
$objectManager->get(\Magento\Framework\View\DesignInterface::class)->setDesignTheme($themePath);
|
|
|
|
$this->_viewFileSystem = $objectManager->create(\Magento\Framework\View\FileSystem::class);
|
|
$this->_viewConfig = $objectManager->create(\Magento\Framework\View\ConfigInterface::class);
|
|
}
|
|
|
|
public function testSetGetArea()
|
|
{
|
|
$this->assertEquals(\Magento\Framework\View\DesignInterface::DEFAULT_AREA, $this->_model->getArea());
|
|
\Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(\Magento\Framework\App\State::class)
|
|
->setAreaCode(\Magento\Framework\App\Area::AREA_ADMINHTML);
|
|
$this->assertEquals(\Magento\Framework\App\Area::AREA_ADMINHTML, $this->_model->getArea());
|
|
}
|
|
|
|
public function testSetDesignTheme()
|
|
{
|
|
$this->_model->setDesignTheme('Magento/blank', 'frontend');
|
|
$this->assertEquals('Magento/blank', $this->_model->getDesignTheme()->getThemePath());
|
|
}
|
|
|
|
public function testGetDesignTheme()
|
|
{
|
|
$this->assertInstanceOf(\Magento\Framework\View\Design\ThemeInterface::class, $this->_model->getDesignTheme());
|
|
}
|
|
|
|
/**
|
|
* @magentoConfigFixture current_store design/theme/theme_id 0
|
|
*/
|
|
public function testGetConfigurationDesignThemeDefaults()
|
|
{
|
|
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
|
|
|
|
$themes = ['frontend' => 'test_f', 'adminhtml' => 'test_a'];
|
|
$design = $objectManager->create(\Magento\Theme\Model\View\Design::class, ['themes' => $themes]);
|
|
$objectManager->addSharedInstance($design, \Magento\Theme\Model\View\Design::class);
|
|
|
|
$model = $objectManager->get(\Magento\Theme\Model\View\Design::class);
|
|
|
|
$this->assertEquals('test_f', $model->getConfigurationDesignTheme());
|
|
$this->assertEquals('test_f', $model->getConfigurationDesignTheme('frontend'));
|
|
$this->assertEquals('test_f', $model->getConfigurationDesignTheme('frontend', ['store' => 0]));
|
|
$this->assertEquals('test_f', $model->getConfigurationDesignTheme('frontend', ['store' => null]));
|
|
$this->assertEquals('test_a', $model->getConfigurationDesignTheme('adminhtml'));
|
|
$this->assertEquals('test_a', $model->getConfigurationDesignTheme('adminhtml', ['store' => uniqid()]));
|
|
}
|
|
|
|
/**
|
|
* @magentoConfigFixture current_store design/theme/theme_id one
|
|
* @magentoDataFixture Magento/Store/_files/core_fixturestore.php
|
|
*/
|
|
public function testGetConfigurationDesignThemeStore()
|
|
{
|
|
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
|
|
|
|
/** @var \Magento\Framework\App\Config\MutableScopeConfigInterface $mutableConfig */
|
|
$mutableConfig = $objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class);
|
|
$mutableConfig->setValue('design/theme/theme_id', 'two', ScopeInterface::SCOPE_STORE, 'fixturestore');
|
|
|
|
$storeId = $objectManager->get(\Magento\Store\Model\StoreManagerInterface::class)
|
|
->getStore()
|
|
->getId();
|
|
$this->assertEquals('one', $this->_model->getConfigurationDesignTheme());
|
|
$this->assertEquals('one', $this->_model->getConfigurationDesignTheme(null, ['store' => $storeId]));
|
|
$this->assertEquals('one', $this->_model->getConfigurationDesignTheme('frontend', ['store' => $storeId]));
|
|
$this->assertEquals('two', $this->_model->getConfigurationDesignTheme(null, ['store' => 'fixturestore']));
|
|
$this->assertEquals(
|
|
'two',
|
|
$this->_model->getConfigurationDesignTheme('frontend', ['store' => 'fixturestore'])
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider getFilenameDataProvider
|
|
* @magentoAppIsolation enabled
|
|
*/
|
|
public function testGetFilename($file, $params)
|
|
{
|
|
$this->_emulateFixtureTheme();
|
|
$this->assertFileExists($this->_viewFileSystem->getFilename($file, $params));
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getFilenameDataProvider()
|
|
{
|
|
return [
|
|
['theme_file.txt', ['module' => 'Magento_Catalog']],
|
|
['Magento_Catalog::theme_file.txt', []],
|
|
['Magento_Catalog::theme_file_with_2_dots..txt', []],
|
|
['Magento_Catalog::theme_file.txt', ['module' => 'Overridden_Module']]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @magentoAppIsolation enabled
|
|
*/
|
|
public function testGetViewConfig()
|
|
{
|
|
$this->_emulateFixtureTheme();
|
|
$config = $this->_viewConfig->getViewConfig();
|
|
$this->assertInstanceOf(\Magento\Framework\Config\View::class, $config);
|
|
$this->assertEquals(['var1' => 'value1', 'var2' => 'value2'], $config->getVars('Namespace_Module'));
|
|
}
|
|
|
|
/**
|
|
* @magentoAppIsolation enabled
|
|
*/
|
|
public function testGetConfigCustomized()
|
|
{
|
|
$this->_emulateFixtureTheme();
|
|
/** @var $theme \Magento\Framework\View\Design\ThemeInterface */
|
|
$theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
|
|
\Magento\Framework\View\DesignInterface::class
|
|
)->getDesignTheme();
|
|
$customConfigFile = $theme->getCustomization()->getCustomViewConfigPath();
|
|
/** @var $filesystem \Magento\Framework\Filesystem */
|
|
$filesystem = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
|
|
->create(\Magento\Framework\Filesystem::class);
|
|
$directory = $filesystem->getDirectoryWrite(DirectoryList::ROOT);
|
|
$relativePath = $directory->getRelativePath($customConfigFile);
|
|
try {
|
|
$directory->writeFile(
|
|
$relativePath,
|
|
'<?xml version="1.0" encoding="UTF-8"?>
|
|
<view><vars module="Namespace_Module"><var name="customVar">custom value</var></vars></view>'
|
|
);
|
|
|
|
$config = $this->_viewConfig->getViewConfig();
|
|
$this->assertInstanceOf(\Magento\Framework\Config\View::class, $config);
|
|
$this->assertEquals(['customVar' => 'custom value'], $config->getVars('Namespace_Module'));
|
|
} catch (\Exception $e) {
|
|
$directory->delete($relativePath);
|
|
throw $e;
|
|
}
|
|
$directory->delete($relativePath);
|
|
}
|
|
}
|