/** * @test * @return void * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testRegister() { $image = 'preview.jpg'; $themeFilePath = 'any/path'; $parentId = 1; $fullPath = '/full/path'; $theme = $this->getMockBuilder('Magento\\Framework\\View\\Design\\ThemeInterface')->setMethods(['setParentId', 'getId', 'getFullPath', 'getParentTheme', 'getCustomization', 'getPreviewImage', 'getThemeImage', 'setType', 'save'])->getMockForAbstractClass(); $parentTheme = $this->getMockBuilder('Magento\\Framework\\View\\Design\\ThemeInterface')->getMock(); $parentThemeFromCollectionId = 123; $parentThemeFromCollection = $this->getMockBuilder('Magento\\Framework\\View\\Design\\ThemeInterface')->setMethods(['getType', 'getId'])->getMockForAbstractClass(); $themeFromCollection = $this->getMockBuilder('Magento\\Framework\\View\\Design\\ThemeInterface')->setMethods(['setType', 'save', 'getParentTheme', 'getType', 'getParentId', 'setParentId'])->getMockForAbstractClass(); $collection = $this->getMockBuilder('Magento\\Theme\\Model\\ResourceModel\\Theme\\Data\\Collection')->disableOriginalConstructor()->getMock(); $customization = $this->getMockBuilder('Magento\\Framework\\View\\Design\\Theme\\CustomizationInterface')->getMock(); $imageModel = $this->getMockBuilder('Magento\\Framework\\View\\Design\\Theme\\Image')->disableOriginalConstructor()->getMock(); $theme->expects($this->once())->method('save')->willReturnSelf(); $theme->expects($this->once())->method('setType')->willReturn(ThemeInterface::TYPE_PHYSICAL); $theme->expects($this->any())->method('setParentId')->willReturn($parentId); $theme->expects($this->any())->method('getFullPath')->willReturn($fullPath); $theme->expects($this->any())->method('getParentTheme')->willReturn($parentTheme); $parentTheme->expects($this->any())->method('getId')->willReturn($parentId); $this->collectionFactory->expects($this->any())->method('create')->willReturn($collection); $this->filesystemCollection->expects($this->once())->method('clear'); $this->filesystemCollection->expects($this->once())->method('hasTheme')->with($themeFromCollection)->willReturn(false); $this->filesystemCollection->expects($this->once())->method('getIterator')->willReturn(new \ArrayIterator([$theme])); $collection->expects($this->once())->method('getThemeByFullPath')->with($fullPath)->willReturn($theme); $theme->expects($this->once())->method('getCustomization')->willReturn($customization); $customization->expects($this->once())->method('getThemeFilesPath')->willReturn($themeFilePath); $theme->expects($this->any())->method('getPreviewImage')->willReturn($image); $theme->expects($this->once())->method('getThemeImage')->willReturn($imageModel); $imageModel->expects($this->once())->method('createPreviewImage')->with($themeFilePath . '/' . $image)->willReturnSelf(); $collection->expects($this->once())->method('addTypeFilter')->with(ThemeInterface::TYPE_PHYSICAL)->willReturnSelf(); $collection->expects($this->any())->method('getIterator')->willReturn(new \ArrayIterator([$themeFromCollection])); $collection->expects($this->any())->method('addTypeRelationFilter')->willReturnSelf(); $themeFromCollection->expects($this->once())->method('setType')->with(ThemeInterface::TYPE_VIRTUAL)->willReturnSelf(); $themeFromCollection->expects($this->any())->method('save')->willReturnSelf(); $themeFromCollection->expects($this->any())->method('getParentTheme')->willReturn($parentThemeFromCollection); $themeFromCollection->expects($this->any())->method('getType')->willReturn(ThemeInterface::TYPE_STAGING); $themeFromCollection->expects($this->any())->method('getParentId')->willReturn(null); $themeFromCollection->expects($this->any())->method('setParentId')->with($parentThemeFromCollectionId)->willReturnSelf(); $parentThemeFromCollection->expects($this->any())->method('getType')->willReturn(ThemeInterface::TYPE_VIRTUAL); $parentThemeFromCollection->expects($this->any())->method('getId')->willReturn($parentThemeFromCollectionId); $this->assertInstanceOf(get_class($this->model), $this->model->register()); }
/** * Check whether all themes have correct parent theme by type * * @return $this */ public function checkAllowedThemeRelations() { foreach ($this->_forbiddenRelations as $typesSequence) { list($parentType, $childType) = $typesSequence; $collection = $this->_collectionFactory->create(); $collection->addTypeRelationFilter($parentType, $childType); /** @var $theme ThemeInterface */ foreach ($collection as $theme) { $parentId = $this->_getResetParentId($theme); if ($theme->getParentId() != $parentId) { $theme->setParentId($parentId)->save(); } } } return $this; }