![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/dev/tests/integration/testsuite/Magento/Theme/Model/View/ |
<?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); } }