123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- <?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()
- {
- $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()
- {
- /** @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()
- {
- $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);
- }
- }
|