Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CleanThemeRelatedContentObserverTest.php
Go to the documentation of this file.
1 <?php
8 
9 class CleanThemeRelatedContentObserverTest extends \PHPUnit\Framework\TestCase
10 {
14  protected $themeConfig;
15 
19  protected $themeImageFactory;
20 
24  protected $updateCollection;
25 
29  protected $themeObserver;
30 
31  protected function setUp()
32  {
33  $this->themeConfig = $this->getMockBuilder(\Magento\Theme\Model\Config\Customization::class)
34  ->disableOriginalConstructor()
35  ->getMock();
36 
37  $this->themeImageFactory = $this->getMockBuilder(\Magento\Framework\View\Design\Theme\ImageFactory::class)
38  ->setMethods(['create', 'removePreviewImage'])
39  ->disableOriginalConstructor()
40  ->getMock();
41 
42  $this->updateCollection = $this->getMockBuilder(
43  \Magento\Widget\Model\ResourceModel\Layout\Update\Collection::class
44  )->setMethods(['addThemeFilter', 'delete'])
45  ->disableOriginalConstructor()
46  ->getMock();
47 
48  $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
49  $this->themeObserver = $objectManagerHelper->getObject(
50  \Magento\Theme\Observer\CleanThemeRelatedContentObserver::class,
51  [
52  'themeConfig' => $this->themeConfig,
53  'themeImageFactory' => $this->themeImageFactory,
54  'updateCollection' => $this->updateCollection,
55  ]
56  );
57  }
58 
59  public function testCleanThemeRelatedContent()
60  {
61  $themeMock = $this->getMockBuilder(
62  \Magento\Framework\View\Design\ThemeInterface::class
63  )->getMockForAbstractClass();
64 
65  $eventMock = $this->getMockBuilder(\Magento\Framework\Event::class)->disableOriginalConstructor()->getMock();
66  $eventMock->expects($this->any())->method('getData')->with('theme')->willReturn($themeMock);
67 
68  $observerMock = $this->getMockBuilder(\Magento\Framework\Event\Observer::class)
69  ->disableOriginalConstructor()
70  ->getMock();
71  $observerMock->expects($this->any())->method('getEvent')->willReturn($eventMock);
72 
73  $this->themeConfig
74  ->expects($this->any())
75  ->method('isThemeAssignedToStore')
76  ->with($themeMock)
77  ->willReturn(false);
78 
79  $this->themeImageFactory
80  ->expects($this->once())
81  ->method('create')
82  ->with(['theme' => $themeMock])
83  ->willReturnSelf();
84  $this->themeImageFactory->expects($this->once())->method('removePreviewImage');
85 
86  $this->updateCollection->expects($this->once())->method('addThemeFilter')->willReturnSelf();
87  $this->updateCollection->expects($this->once())->method('delete');
88 
89  $this->themeObserver->execute($observerMock);
90  }
91 
93  {
94  $themeMock = $this->getMockBuilder(
95  \Magento\Framework\View\Design\ThemeInterface::class
96  )->getMockForAbstractClass();
97 
98  $eventMock = $this->getMockBuilder(\Magento\Framework\Event::class)->disableOriginalConstructor()->getMock();
99  $eventMock->expects($this->any())->method('getData')->with('theme')->willReturn($themeMock);
100 
101  $observerMock = $this->getMockBuilder(\Magento\Framework\Event\Observer::class)
102  ->disableOriginalConstructor()
103  ->getMock();
104  $observerMock->expects($this->any())->method('getEvent')->willReturn($eventMock);
105 
106  $this->themeConfig->expects($this->any())->method('isThemeAssignedToStore')->with($themeMock)->willReturn(true);
107 
108  $this->expectException(\Magento\Framework\Exception\LocalizedException::class);
109  $this->expectExceptionMessage('Theme isn\'t deletable.');
110  $this->themeObserver->execute($observerMock);
111  }
112 
114  {
115  $eventMock = $this->getMockBuilder(\Magento\Framework\Event::class)->disableOriginalConstructor()->getMock();
116  $eventMock->expects($this->any())->method('getData')->with('theme')->willReturn('Theme as a string');
117 
118  $observerMock = $this->getMockBuilder(\Magento\Framework\Event\Observer::class)
119  ->disableOriginalConstructor()
120  ->getMock();
121  $observerMock->expects($this->any())->method('getEvent')->willReturn($eventMock);
122 
123  $this->themeConfig->expects($this->never())->method('isThemeAssignedToStore');
124 
125  $this->themeObserver->execute($observerMock);
126  }
127 }