CleanThemeRelatedContentObserverTest.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Theme\Test\Unit\Observer;
  7. class CleanThemeRelatedContentObserverTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var \Magento\Theme\Model\Config\Customization|\PHPUnit_Framework_MockObject_MockObject
  11. */
  12. protected $themeConfig;
  13. /**
  14. * @var \Magento\Framework\View\Design\Theme\ImageFactory|\PHPUnit_Framework_MockObject_MockObject
  15. */
  16. protected $themeImageFactory;
  17. /**
  18. * @var \Magento\Widget\Model\ResourceModel\Layout\Update\Collection|\PHPUnit_Framework_MockObject_MockObject
  19. */
  20. protected $updateCollection;
  21. /**
  22. * @var \Magento\Theme\Observer\CleanThemeRelatedContentObserver
  23. */
  24. protected $themeObserver;
  25. protected function setUp()
  26. {
  27. $this->themeConfig = $this->getMockBuilder(\Magento\Theme\Model\Config\Customization::class)
  28. ->disableOriginalConstructor()
  29. ->getMock();
  30. $this->themeImageFactory = $this->getMockBuilder(\Magento\Framework\View\Design\Theme\ImageFactory::class)
  31. ->setMethods(['create', 'removePreviewImage'])
  32. ->disableOriginalConstructor()
  33. ->getMock();
  34. $this->updateCollection = $this->getMockBuilder(
  35. \Magento\Widget\Model\ResourceModel\Layout\Update\Collection::class
  36. )->setMethods(['addThemeFilter', 'delete'])
  37. ->disableOriginalConstructor()
  38. ->getMock();
  39. $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  40. $this->themeObserver = $objectManagerHelper->getObject(
  41. \Magento\Theme\Observer\CleanThemeRelatedContentObserver::class,
  42. [
  43. 'themeConfig' => $this->themeConfig,
  44. 'themeImageFactory' => $this->themeImageFactory,
  45. 'updateCollection' => $this->updateCollection,
  46. ]
  47. );
  48. }
  49. public function testCleanThemeRelatedContent()
  50. {
  51. $themeMock = $this->getMockBuilder(
  52. \Magento\Framework\View\Design\ThemeInterface::class
  53. )->getMockForAbstractClass();
  54. $eventMock = $this->getMockBuilder(\Magento\Framework\Event::class)->disableOriginalConstructor()->getMock();
  55. $eventMock->expects($this->any())->method('getData')->with('theme')->willReturn($themeMock);
  56. $observerMock = $this->getMockBuilder(\Magento\Framework\Event\Observer::class)
  57. ->disableOriginalConstructor()
  58. ->getMock();
  59. $observerMock->expects($this->any())->method('getEvent')->willReturn($eventMock);
  60. $this->themeConfig
  61. ->expects($this->any())
  62. ->method('isThemeAssignedToStore')
  63. ->with($themeMock)
  64. ->willReturn(false);
  65. $this->themeImageFactory
  66. ->expects($this->once())
  67. ->method('create')
  68. ->with(['theme' => $themeMock])
  69. ->willReturnSelf();
  70. $this->themeImageFactory->expects($this->once())->method('removePreviewImage');
  71. $this->updateCollection->expects($this->once())->method('addThemeFilter')->willReturnSelf();
  72. $this->updateCollection->expects($this->once())->method('delete');
  73. $this->themeObserver->execute($observerMock);
  74. }
  75. public function testCleanThemeRelatedContentException()
  76. {
  77. $themeMock = $this->getMockBuilder(
  78. \Magento\Framework\View\Design\ThemeInterface::class
  79. )->getMockForAbstractClass();
  80. $eventMock = $this->getMockBuilder(\Magento\Framework\Event::class)->disableOriginalConstructor()->getMock();
  81. $eventMock->expects($this->any())->method('getData')->with('theme')->willReturn($themeMock);
  82. $observerMock = $this->getMockBuilder(\Magento\Framework\Event\Observer::class)
  83. ->disableOriginalConstructor()
  84. ->getMock();
  85. $observerMock->expects($this->any())->method('getEvent')->willReturn($eventMock);
  86. $this->themeConfig->expects($this->any())->method('isThemeAssignedToStore')->with($themeMock)->willReturn(true);
  87. $this->expectException(\Magento\Framework\Exception\LocalizedException::class);
  88. $this->expectExceptionMessage('Theme isn\'t deletable.');
  89. $this->themeObserver->execute($observerMock);
  90. }
  91. public function testCleanThemeRelatedContentNonObjectTheme()
  92. {
  93. $eventMock = $this->getMockBuilder(\Magento\Framework\Event::class)->disableOriginalConstructor()->getMock();
  94. $eventMock->expects($this->any())->method('getData')->with('theme')->willReturn('Theme as a string');
  95. $observerMock = $this->getMockBuilder(\Magento\Framework\Event\Observer::class)
  96. ->disableOriginalConstructor()
  97. ->getMock();
  98. $observerMock->expects($this->any())->method('getEvent')->willReturn($eventMock);
  99. $this->themeConfig->expects($this->never())->method('isThemeAssignedToStore');
  100. $this->themeObserver->execute($observerMock);
  101. }
  102. }