CustomerLoginObserverTest.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Reports\Test\Unit\Observer;
  7. /**
  8. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  9. */
  10. class CustomerLoginObserverTest extends \PHPUnit\Framework\TestCase
  11. {
  12. /**
  13. * @var \Magento\Reports\Observer\CustomerLoginObserver
  14. */
  15. protected $observer;
  16. /**
  17. * @var \Magento\Customer\Model\Session|\PHPUnit_Framework_MockObject_MockObject
  18. */
  19. protected $customerSessionMock;
  20. /**
  21. * @var \Magento\Customer\Model\Visitor|\PHPUnit_Framework_MockObject_MockObject
  22. */
  23. protected $customerVisitorMock;
  24. /**
  25. * @var \Magento\Reports\Model\Product\Index\Viewed|\PHPUnit_Framework_MockObject_MockObject
  26. */
  27. protected $productIndexMock;
  28. /**
  29. * @var \Magento\Reports\Model\Event|\PHPUnit_Framework_MockObject_MockObject
  30. */
  31. protected $reportEventMock;
  32. /**
  33. * @var \Magento\Reports\Model\Product\Index\ComparedFactory|\PHPUnit_Framework_MockObject_MockObject
  34. */
  35. protected $productCompFactoryMock;
  36. /**
  37. * @var \Magento\Reports\Model\Product\Index\Compared|\PHPUnit_Framework_MockObject_MockObject
  38. */
  39. protected $productCompModelMock;
  40. /**
  41. * @var \Magento\Reports\Model\Product\Index\ViewedFactory|\PHPUnit_Framework_MockObject_MockObject
  42. */
  43. protected $productIndexFactoryMock;
  44. /**
  45. * {@inheritDoc}
  46. */
  47. protected function setUp()
  48. {
  49. $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  50. $this->customerSessionMock = $this->getMockBuilder(\Magento\Customer\Model\Session::class)
  51. ->disableOriginalConstructor()->getMock();
  52. $this->customerVisitorMock = $this->getMockBuilder(\Magento\Customer\Model\Visitor::class)
  53. ->disableOriginalConstructor()->getMock();
  54. $this->productIndexFactoryMock = $this->getMockBuilder(
  55. \Magento\Reports\Model\Product\Index\ViewedFactory::class
  56. )->setMethods(['create'])
  57. ->disableOriginalConstructor()->getMock();
  58. $this->productIndexMock = $this->getMockBuilder(\Magento\Reports\Model\Product\Index\Viewed::class)
  59. ->disableOriginalConstructor()->getMock();
  60. $this->productIndexFactoryMock->expects($this->any())
  61. ->method('create')
  62. ->willReturn($this->productIndexMock);
  63. $reportEventFactory = $this->getMockBuilder(\Magento\Reports\Model\EventFactory::class)
  64. ->setMethods(['create'])->disableOriginalConstructor()->getMock();
  65. $this->reportEventMock = $this->getMockBuilder(\Magento\Reports\Model\Event::class)
  66. ->disableOriginalConstructor()->getMock();
  67. $reportEventFactory->expects($this->any())
  68. ->method('create')
  69. ->willReturn($this->reportEventMock);
  70. $this->productCompModelMock = $this->getMockBuilder(\Magento\Reports\Model\Product\Index\Compared::class)
  71. ->disableOriginalConstructor()
  72. ->getMock();
  73. $this->productCompFactoryMock = $this->getMockBuilder(
  74. \Magento\Reports\Model\Product\Index\ComparedFactory::class
  75. )->disableOriginalConstructor()
  76. ->setMethods(['create'])
  77. ->getMock();
  78. $this->productCompFactoryMock->expects($this->any())
  79. ->method('create')
  80. ->willReturn($this->productCompModelMock);
  81. $this->observer = $objectManager->getObject(
  82. \Magento\Reports\Observer\CustomerLoginObserver::class,
  83. [
  84. 'event' => $reportEventFactory,
  85. 'productCompFactory' => $this->productCompFactoryMock,
  86. 'productIndexFactory' => $this->productIndexFactoryMock,
  87. 'customerSession' => $this->customerSessionMock,
  88. 'customerVisitor' => $this->customerVisitorMock,
  89. ]
  90. );
  91. }
  92. /**
  93. * @return void
  94. */
  95. public function testCustomerLoginLoggedInTrue()
  96. {
  97. $customerId = 222;
  98. $visitorId = 333;
  99. $observerMock = $this->getObserverMock(111);
  100. $this->customerSessionMock->expects($this->once())->method('isLoggedIn')->willReturn(true);
  101. $this->customerSessionMock->expects($this->once())->method('getCustomerId')->willReturn($customerId);
  102. $this->customerVisitorMock->expects($this->once())->method('getId')->willReturn($visitorId);
  103. $this->reportEventMock->expects($this->once())->method('updateCustomerType')->with($visitorId, $customerId);
  104. $this->productCompModelMock->expects($this->once())->method('updateCustomerFromVisitor')->willReturnSelf();
  105. $this->productCompModelMock->expects($this->once())->method('calculate')->willReturnSelf();
  106. $this->productIndexMock->expects($this->once())->method('updateCustomerFromVisitor')->willReturnSelf();
  107. $this->productIndexMock->expects($this->once())->method('calculate')->willReturnSelf();
  108. $this->observer->execute($observerMock);
  109. }
  110. /**
  111. * @return void
  112. */
  113. public function testCustomerLoginLoggedInFalse()
  114. {
  115. $observerMock = $this->getObserverMock(111);
  116. $this->customerSessionMock->expects($this->once())->method('isLoggedIn')->willReturn(false);
  117. $this->customerSessionMock->expects($this->never())->method('getCustomerId');
  118. $this->customerVisitorMock->expects($this->never())->method('getId');
  119. $this->productCompModelMock->expects($this->never())->method('updateCustomerFromVisitor')->willReturnSelf();
  120. $this->productCompModelMock->expects($this->never())->method('calculate')->willReturnSelf();
  121. $this->productIndexMock->expects($this->never())->method('updateCustomerFromVisitor')->willReturnSelf();
  122. $this->productIndexMock->expects($this->never())->method('calculate')->willReturnSelf();
  123. $this->observer->execute($observerMock);
  124. }
  125. /**
  126. * @param int $productId
  127. * @return \PHPUnit_Framework_MockObject_MockObject
  128. */
  129. protected function getObserverMock($productId)
  130. {
  131. $eventObserverMock = $this->getMockBuilder(\Magento\Framework\Event\Observer::class)
  132. ->disableOriginalConstructor()
  133. ->getMock();
  134. $eventMock = $this->getMockBuilder(\Magento\Framework\Event::class)
  135. ->disableOriginalConstructor()
  136. ->setMethods(['getProduct'])->getMock();
  137. $productMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
  138. ->disableOriginalConstructor()
  139. ->getMock();
  140. $productMock->expects($this->any())->method('getId')->willReturn($productId);
  141. $eventMock->expects($this->any())->method('getProduct')->willReturn($productMock);
  142. $eventObserverMock->expects($this->any())->method('getEvent')->willReturn($eventMock);
  143. return $eventObserverMock;
  144. }
  145. }