![]() 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/vendor/magento/module-theme/Test/Unit/Model/Theme/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Theme\Test\Unit\Model\Theme; use Magento\Framework\Data\Collection\EntityFactory; use Magento\Framework\Filesystem\Directory\ReadFactory; use Magento\Framework\Filesystem\Directory\ReadInterface; use Magento\Framework\View\Design\Theme\ThemePackage; use Magento\Framework\View\Design\Theme\ThemePackageList; use Magento\Framework\View\Design\ThemeInterface; use Magento\Theme\Model\Theme; use Magento\Theme\Model\Theme\Collection; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class CollectionTest extends TestCase { /** * @var Collection */ private $model; /** * @var \Magento\Framework\Config\ThemeFactory|MockObject */ private $themeConfigFactory; /** * @var ReadInterface|MockObject */ private $directory; /** * @var EntityFactory|MockObject */ private $entityFactory; /** * @var ThemePackageList|MockObject */ private $themePackageList; /** * @var ReadFactory|MockObject */ private $readDirFactory; protected function setUp(): void { $this->entityFactory = $this->getMockBuilder(EntityFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $this->themeConfigFactory = $this->getMockBuilder(\Magento\Framework\Config\ThemeFactory::class) ->setMethods(['create']) ->disableOriginalConstructor() ->getMock(); $this->directory = $this->getMockBuilder(ReadInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->themePackageList = $this->createMock(ThemePackageList::class); $this->readDirFactory = $this->createMock(ReadFactory::class); $this->readDirFactory->expects($this->any()) ->method('create') ->willReturn($this->directory); $this->model = new Collection( $this->entityFactory, $this->themeConfigFactory, $this->themePackageList, $this->readDirFactory ); } /** * @test * @return void */ public function testLoadData() { $fileContent = 'content file'; $media = ['preview_image' => 'preview.jpg']; $themeTitle = 'Theme title'; $themeConfigFile = 'theme.xml'; $themeConfig = $this->getMockBuilder( \Magento\Framework\Config\Theme::class )->disableOriginalConstructor() ->getMock(); $theme = $this->getMockBuilder(Theme::class) ->disableOriginalConstructor() ->getMock(); $parentTheme = ['parentThemeCode']; $parentThemePath = 'frontend/parent/theme'; $themePackage = $this->createMock(ThemePackage::class); $themePackage->expects($this->any()) ->method('getArea') ->willReturn('frontend'); $themePackage->expects($this->any()) ->method('getVendor') ->willReturn('theme'); $themePackage->expects($this->any()) ->method('getName') ->willReturn('code'); $this->themePackageList->expects($this->once()) ->method('getThemes') ->willReturn([$themePackage]); $this->directory->expects($this->once()) ->method('isExist') ->with($themeConfigFile) ->willReturn(true); $this->directory->expects($this->once()) ->method('readFile') ->with($themeConfigFile) ->willReturn($fileContent); $this->themeConfigFactory->expects($this->once()) ->method('create') ->with(['configContent' => $fileContent]) ->willReturn($themeConfig); $this->entityFactory->expects($this->any()) ->method('create') ->with(ThemeInterface::class) ->willReturn($theme); $themeConfig->expects($this->once()) ->method('getMedia') ->willReturn($media); $themeConfig->expects($this->once()) ->method('getParentTheme') ->willReturn($parentTheme); $themeConfig->expects($this->once()) ->method('getThemeTitle') ->willReturn($themeTitle); $theme->expects($this->once()) ->method('addData') ->with( [ 'parent_id' => null, 'type' => ThemeInterface::TYPE_PHYSICAL, 'area' => 'frontend', 'theme_path' => 'theme/code', 'code' => 'theme/code', 'theme_title' => $themeTitle, 'preview_image' => $media['preview_image'], 'parent_theme_path' => 'theme/parentThemeCode' ] ) ->willReturnSelf(); $theme->expects($this->once()) ->method('getData') ->with('parent_theme_path') ->willReturn($parentThemePath); $theme->expects($this->once()) ->method('getArea') ->willReturn('frontend'); $this->assertInstanceOf(get_class($this->model), $this->model->loadData()); } public function testAddConstraintUnsupportedType() { $this->expectException('UnexpectedValueException'); $this->expectExceptionMessage('Constraint \'unsupported_type\' is not supported'); $this->model->addConstraint('unsupported_type', 'value'); } /** * @param array $inputValues * @param array $expected * * @dataProvider addConstraintDataProvider */ public function testAddConstraint(array $inputValues, array $expected) { $this->markTestSkipped('Skipped in #27500 due to testing protected/private methods and properties'); foreach ($inputValues as $data) { $type = $data[0]; $value = $data[1]; $this->model->addConstraint($type, $value); } $default = [ Collection::CONSTRAINT_AREA => [], Collection::CONSTRAINT_VENDOR => [], Collection::CONSTRAINT_THEME_NAME => [] ]; $expected = array_merge($default, $expected); $this->assertAttributeSame($expected, 'constraints', $this->model); } /** * @return array */ public function addConstraintDataProvider() { return [ 'area' => [ [[Collection::CONSTRAINT_AREA, 'area']], [Collection::CONSTRAINT_AREA => ['area']] ], 'vendor' => [ [[Collection::CONSTRAINT_VENDOR, 'Vendor']], [Collection::CONSTRAINT_VENDOR => ['Vendor']] ], 'theme name' => [ [[Collection::CONSTRAINT_THEME_NAME, 'theme_name']], [Collection::CONSTRAINT_THEME_NAME => ['theme_name']] ], 'area, vendor and theme name' => [ [ [Collection::CONSTRAINT_AREA, 'area_one'], [Collection::CONSTRAINT_AREA, 'area_two'], [Collection::CONSTRAINT_VENDOR, 'Vendor'], [Collection::CONSTRAINT_VENDOR, 'Vendor'], [Collection::CONSTRAINT_THEME_NAME, 'theme_name'] ], [ Collection::CONSTRAINT_AREA => ['area_one', 'area_two'], Collection::CONSTRAINT_VENDOR => ['Vendor'], Collection::CONSTRAINT_THEME_NAME => ['theme_name'] ] ], ]; } }