IsAllowedGuestCheckoutObserverTest.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Downloadable\Test\Unit\Observer;
  7. use Magento\Downloadable\Observer\IsAllowedGuestCheckoutObserver;
  8. use Magento\Downloadable\Model\Product\Type;
  9. use Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory;
  10. use Magento\Store\Model\ScopeInterface;
  11. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  12. /**
  13. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  14. */
  15. class IsAllowedGuestCheckoutObserverTest extends \PHPUnit\Framework\TestCase
  16. {
  17. /** @var IsAllowedGuestCheckoutObserver */
  18. private $isAllowedGuestCheckoutObserver;
  19. /**
  20. * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\App\Config
  21. */
  22. private $scopeConfig;
  23. /**
  24. * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\DataObject
  25. */
  26. private $resultMock;
  27. /**
  28. * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Event
  29. */
  30. private $eventMock;
  31. /**
  32. * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Event\Observer
  33. */
  34. private $observerMock;
  35. /**
  36. * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\DataObject
  37. */
  38. private $storeMock;
  39. /**
  40. * Sets up the fixture, for example, open a network connection.
  41. * This method is called before a test is executed.
  42. */
  43. protected function setUp()
  44. {
  45. $this->scopeConfig = $this->getMockBuilder(\Magento\Framework\App\Config::class)
  46. ->disableOriginalConstructor()
  47. ->setMethods(['isSetFlag', 'getValue'])
  48. ->getMock();
  49. $this->resultMock = $this->getMockBuilder(\Magento\Framework\DataObject::class)
  50. ->disableOriginalConstructor()
  51. ->setMethods(['setIsAllowed'])
  52. ->getMock();
  53. $this->eventMock = $this->getMockBuilder(\Magento\Framework\Event::class)
  54. ->disableOriginalConstructor()
  55. ->setMethods(['getStore', 'getResult', 'getQuote', 'getOrder'])
  56. ->getMock();
  57. $this->observerMock = $this->getMockBuilder(\Magento\Framework\Event\Observer::class)
  58. ->disableOriginalConstructor()
  59. ->setMethods(['getEvent'])
  60. ->getMock();
  61. $this->storeMock = $this->getMockBuilder(\Magento\Framework\DataObject::class)
  62. ->disableOriginalConstructor()
  63. ->getMock();
  64. $this->isAllowedGuestCheckoutObserver = (new ObjectManagerHelper($this))->getObject(
  65. \Magento\Downloadable\Observer\IsAllowedGuestCheckoutObserver::class,
  66. [
  67. 'scopeConfig' => $this->scopeConfig,
  68. ]
  69. );
  70. }
  71. /**
  72. *
  73. * @dataProvider dataProviderForTestisAllowedGuestCheckoutConfigSetToTrue
  74. *
  75. * @param $productType
  76. * @param $isAllowed
  77. */
  78. public function testIsAllowedGuestCheckoutConfigSetToTrue($productType, $isAllowed)
  79. {
  80. if ($isAllowed) {
  81. $this->resultMock->expects($this->at(0))
  82. ->method('setIsAllowed')
  83. ->with(false);
  84. }
  85. $product = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
  86. ->disableOriginalConstructor()
  87. ->setMethods(['getTypeId'])
  88. ->getMock();
  89. $product->expects($this->once())
  90. ->method('getTypeId')
  91. ->willReturn($productType);
  92. $item = $this->getMockBuilder(\Magento\Quote\Model\Quote\Item::class)
  93. ->disableOriginalConstructor()
  94. ->setMethods(['getProduct'])
  95. ->getMock();
  96. $item->expects($this->once())
  97. ->method('getProduct')
  98. ->willReturn($product);
  99. $quote = $this->getMockBuilder(\Magento\Quote\Model\Quote::class)
  100. ->disableOriginalConstructor()
  101. ->setMethods(['getAllItems'])
  102. ->getMock();
  103. $quote->expects($this->once())
  104. ->method('getAllItems')
  105. ->willReturn([$item]);
  106. $this->eventMock->expects($this->once())
  107. ->method('getStore')
  108. ->will($this->returnValue($this->storeMock));
  109. $this->eventMock->expects($this->once())
  110. ->method('getResult')
  111. ->will($this->returnValue($this->resultMock));
  112. $this->eventMock->expects($this->once())
  113. ->method('getQuote')
  114. ->will($this->returnValue($quote));
  115. $this->scopeConfig->expects($this->once())
  116. ->method('isSetFlag')
  117. ->with(
  118. IsAllowedGuestCheckoutObserver::XML_PATH_DISABLE_GUEST_CHECKOUT,
  119. ScopeInterface::SCOPE_STORE,
  120. $this->storeMock
  121. )
  122. ->willReturn(true);
  123. $this->observerMock->expects($this->exactly(3))
  124. ->method('getEvent')
  125. ->will($this->returnValue($this->eventMock));
  126. $this->assertInstanceOf(
  127. \Magento\Downloadable\Observer\IsAllowedGuestCheckoutObserver::class,
  128. $this->isAllowedGuestCheckoutObserver->execute($this->observerMock)
  129. );
  130. }
  131. /**
  132. * @return array
  133. */
  134. public function dataProviderForTestisAllowedGuestCheckoutConfigSetToTrue()
  135. {
  136. return [
  137. 1 => [Type::TYPE_DOWNLOADABLE, true],
  138. 2 => ['unknown', false],
  139. ];
  140. }
  141. public function testIsAllowedGuestCheckoutConfigSetToFalse()
  142. {
  143. $this->eventMock->expects($this->once())
  144. ->method('getStore')
  145. ->will($this->returnValue($this->storeMock));
  146. $this->eventMock->expects($this->once())
  147. ->method('getResult')
  148. ->will($this->returnValue($this->resultMock));
  149. $this->scopeConfig->expects($this->once())
  150. ->method('isSetFlag')
  151. ->with(
  152. IsAllowedGuestCheckoutObserver::XML_PATH_DISABLE_GUEST_CHECKOUT,
  153. ScopeInterface::SCOPE_STORE,
  154. $this->storeMock
  155. )
  156. ->willReturn(false);
  157. $this->observerMock->expects($this->exactly(2))
  158. ->method('getEvent')
  159. ->will($this->returnValue($this->eventMock));
  160. $this->assertInstanceOf(
  161. \Magento\Downloadable\Observer\IsAllowedGuestCheckoutObserver::class,
  162. $this->isAllowedGuestCheckoutObserver->execute($this->observerMock)
  163. );
  164. }
  165. }