ProcessProductAfterDeleteEventObserverTest.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Review\Test\Unit\Observer;
  8. use Magento\Catalog\Model\Product;
  9. use Magento\Framework\Event;
  10. use Magento\Framework\Event\Observer;
  11. use Magento\Review\Model\ResourceModel\Rating;
  12. use Magento\Review\Model\ResourceModel\Review;
  13. use Magento\Review\Observer\ProcessProductAfterDeleteEventObserver;
  14. use PHPUnit\Framework\TestCase;
  15. use PHPUnit_Framework_MockObject_MockObject;
  16. /**
  17. * Class ProcessProductAfterDeleteEventObserverTest
  18. */
  19. class ProcessProductAfterDeleteEventObserverTest extends TestCase
  20. {
  21. /**
  22. * Testable Object
  23. *
  24. * @var ProcessProductAfterDeleteEventObserver
  25. */
  26. private $observer;
  27. /**
  28. * @var Review|PHPUnit_Framework_MockObject_MockObject
  29. */
  30. private $resourceReviewMock;
  31. /**
  32. * @var Rating|PHPUnit_Framework_MockObject_MockObject
  33. */
  34. private $resourceRatingMock;
  35. /**
  36. * Set up
  37. */
  38. protected function setUp()
  39. {
  40. $this->resourceReviewMock = $this->createMock(Review::class);
  41. $this->resourceRatingMock = $this->createMock(Rating::class);
  42. $this->observer = new ProcessProductAfterDeleteEventObserver(
  43. $this->resourceReviewMock,
  44. $this->resourceRatingMock
  45. );
  46. }
  47. /**
  48. * Test cleanup product reviews after product delete
  49. *
  50. * @return void
  51. */
  52. public function testCleanupProductReviewsWithProduct()
  53. {
  54. $productId = 1;
  55. $observerMock = $this->createMock(Observer::class);
  56. $eventMock = $this->getMockBuilder(Event::class)
  57. ->disableOriginalConstructor()
  58. ->setMethods(['getProduct'])
  59. ->getMock();
  60. $productMock = $this->getMockBuilder(Product::class)
  61. ->disableOriginalConstructor()
  62. ->setMethods(['getId'])
  63. ->getMock();
  64. $productMock->expects(self::exactly(3))
  65. ->method('getId')
  66. ->willReturn($productId);
  67. $eventMock->expects($this->once())
  68. ->method('getProduct')
  69. ->willReturn($productMock);
  70. $observerMock->expects($this->once())
  71. ->method('getEvent')
  72. ->willReturn($eventMock);
  73. $this->resourceReviewMock->expects($this->once())
  74. ->method('deleteReviewsByProductId')
  75. ->willReturnSelf();
  76. $this->resourceRatingMock->expects($this->once())
  77. ->method('deleteAggregatedRatingsByProductId')
  78. ->willReturnSelf();
  79. $this->observer->execute($observerMock);
  80. }
  81. /**
  82. * Test with no event product
  83. *
  84. * @return void
  85. */
  86. public function testCleanupProductReviewsWithoutProduct()
  87. {
  88. $observerMock = $this->createMock(Observer::class);
  89. $eventMock = $this->getMockBuilder(Event::class)
  90. ->disableOriginalConstructor()
  91. ->setMethods(['getProduct'])
  92. ->getMock();
  93. $eventMock->expects($this->once())
  94. ->method('getProduct')
  95. ->willReturn(null);
  96. $observerMock->expects($this->once())
  97. ->method('getEvent')
  98. ->willReturn($eventMock);
  99. $this->resourceReviewMock->expects($this->never())
  100. ->method('deleteReviewsByProductId')
  101. ->willReturnSelf();
  102. $this->resourceRatingMock->expects($this->never())
  103. ->method('deleteAggregatedRatingsByProductId')
  104. ->willReturnSelf();
  105. $this->observer->execute($observerMock);
  106. }
  107. }