GuestValidationTest.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\CheckoutAgreements\Test\Unit\Model\Checkout\Plugin;
  7. use Magento\CheckoutAgreements\Model\AgreementsProvider;
  8. use Magento\Store\Model\ScopeInterface;
  9. /**
  10. * Class GuestValidationTest
  11. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  12. */
  13. class GuestValidationTest extends \PHPUnit\Framework\TestCase
  14. {
  15. /**
  16. * @var \Magento\CheckoutAgreements\Model\Checkout\Plugin\GuestValidation
  17. */
  18. private $model;
  19. /**
  20. * @var \PHPUnit_Framework_MockObject_MockObject
  21. */
  22. private $agreementsValidatorMock;
  23. /**
  24. * @var \PHPUnit_Framework_MockObject_MockObject
  25. */
  26. private $subjectMock;
  27. /**
  28. * @var \PHPUnit_Framework_MockObject_MockObject
  29. */
  30. private $paymentMock;
  31. /**
  32. * @var \PHPUnit_Framework_MockObject_MockObject
  33. */
  34. private $addressMock;
  35. /**
  36. * @var \PHPUnit_Framework_MockObject_MockObject
  37. */
  38. private $extensionAttributesMock;
  39. /**
  40. * @var \PHPUnit_Framework_MockObject_MockObject
  41. */
  42. private $scopeConfigMock;
  43. /**
  44. * @var \PHPUnit_Framework_MockObject_MockObject
  45. */
  46. private $checkoutAgreementsListMock;
  47. /**
  48. * @var \PHPUnit_Framework_MockObject_MockObject
  49. */
  50. private $agreementsFilterMock;
  51. protected function setUp()
  52. {
  53. $this->agreementsValidatorMock = $this->createMock(\Magento\Checkout\Api\AgreementsValidatorInterface::class);
  54. $this->subjectMock = $this->createMock(\Magento\Checkout\Api\GuestPaymentInformationManagementInterface::class);
  55. $this->paymentMock = $this->createMock(\Magento\Quote\Api\Data\PaymentInterface::class);
  56. $this->addressMock = $this->createMock(\Magento\Quote\Api\Data\AddressInterface::class);
  57. $this->extensionAttributesMock = $this->createPartialMock(
  58. \Magento\Quote\Api\Data\PaymentExtension::class,
  59. ['getAgreementIds']
  60. );
  61. $this->scopeConfigMock = $this->createMock(\Magento\Framework\App\Config\ScopeConfigInterface::class);
  62. $this->checkoutAgreementsListMock = $this->createMock(
  63. \Magento\CheckoutAgreements\Api\CheckoutAgreementsListInterface::class
  64. );
  65. $this->agreementsFilterMock = $this->createMock(
  66. \Magento\CheckoutAgreements\Model\Api\SearchCriteria\ActiveStoreAgreementsFilter::class
  67. );
  68. $this->model = new \Magento\CheckoutAgreements\Model\Checkout\Plugin\GuestValidation(
  69. $this->agreementsValidatorMock,
  70. $this->scopeConfigMock,
  71. $this->checkoutAgreementsListMock,
  72. $this->agreementsFilterMock
  73. );
  74. }
  75. public function testBeforeSavePaymentInformationAndPlaceOrder()
  76. {
  77. $cartId = '100';
  78. $email = 'email@example.com';
  79. $agreements = [1, 2, 3];
  80. $this->scopeConfigMock
  81. ->expects($this->once())
  82. ->method('isSetFlag')
  83. ->with(AgreementsProvider::PATH_ENABLED, ScopeInterface::SCOPE_STORE)
  84. ->willReturn(true);
  85. $searchCriteriaMock = $this->createMock(\Magento\Framework\Api\SearchCriteria::class);
  86. $this->agreementsFilterMock->expects($this->once())
  87. ->method('buildSearchCriteria')
  88. ->willReturn($searchCriteriaMock);
  89. $this->checkoutAgreementsListMock->expects($this->once())
  90. ->method('getList')
  91. ->with($searchCriteriaMock)
  92. ->willReturn([1]);
  93. $this->extensionAttributesMock->expects($this->once())->method('getAgreementIds')->willReturn($agreements);
  94. $this->agreementsValidatorMock->expects($this->once())->method('isValid')->with($agreements)->willReturn(true);
  95. $this->paymentMock->expects(static::atLeastOnce())
  96. ->method('getExtensionAttributes')
  97. ->willReturn($this->extensionAttributesMock);
  98. $this->model->beforeSavePaymentInformation(
  99. $this->subjectMock,
  100. $cartId,
  101. $email,
  102. $this->paymentMock,
  103. $this->addressMock
  104. );
  105. }
  106. /**
  107. * @expectedException \Magento\Framework\Exception\CouldNotSaveException
  108. */
  109. public function testBeforeSavePaymentInformationAndPlaceOrderIfAgreementsNotValid()
  110. {
  111. $cartId = 100;
  112. $email = 'email@example.com';
  113. $agreements = [1, 2, 3];
  114. $this->scopeConfigMock
  115. ->expects($this->once())
  116. ->method('isSetFlag')
  117. ->with(AgreementsProvider::PATH_ENABLED, ScopeInterface::SCOPE_STORE)
  118. ->willReturn(true);
  119. $searchCriteriaMock = $this->createMock(\Magento\Framework\Api\SearchCriteria::class);
  120. $this->agreementsFilterMock->expects($this->once())
  121. ->method('buildSearchCriteria')
  122. ->willReturn($searchCriteriaMock);
  123. $this->checkoutAgreementsListMock->expects($this->once())
  124. ->method('getList')
  125. ->with($searchCriteriaMock)
  126. ->willReturn([1]);
  127. $this->extensionAttributesMock->expects($this->once())->method('getAgreementIds')->willReturn($agreements);
  128. $this->agreementsValidatorMock->expects($this->once())->method('isValid')->with($agreements)->willReturn(false);
  129. $this->paymentMock->expects(static::atLeastOnce())
  130. ->method('getExtensionAttributes')
  131. ->willReturn($this->extensionAttributesMock);
  132. $this->model->beforeSavePaymentInformation(
  133. $this->subjectMock,
  134. $cartId,
  135. $email,
  136. $this->paymentMock,
  137. $this->addressMock
  138. );
  139. $this->expectExceptionMessage(
  140. "The order wasn't placed. First, agree to the terms and conditions, then try placing your order again."
  141. );
  142. }
  143. public function testBeforeSavePaymentInformation()
  144. {
  145. $cartId = 100;
  146. $email = 'email@example.com';
  147. $agreements = [1, 2, 3];
  148. $this->scopeConfigMock
  149. ->expects($this->once())
  150. ->method('isSetFlag')
  151. ->with(AgreementsProvider::PATH_ENABLED, ScopeInterface::SCOPE_STORE)
  152. ->willReturn(true);
  153. $searchCriteriaMock = $this->createMock(\Magento\Framework\Api\SearchCriteria::class);
  154. $this->agreementsFilterMock->expects($this->once())
  155. ->method('buildSearchCriteria')
  156. ->willReturn($searchCriteriaMock);
  157. $this->checkoutAgreementsListMock->expects($this->once())
  158. ->method('getList')
  159. ->with($searchCriteriaMock)
  160. ->willReturn([1]);
  161. $this->extensionAttributesMock->expects($this->once())->method('getAgreementIds')->willReturn($agreements);
  162. $this->agreementsValidatorMock->expects($this->once())->method('isValid')->with($agreements)->willReturn(true);
  163. $this->paymentMock->expects(static::atLeastOnce())
  164. ->method('getExtensionAttributes')
  165. ->willReturn($this->extensionAttributesMock);
  166. $this->model->beforeSavePaymentInformation(
  167. $this->subjectMock,
  168. $cartId,
  169. $email,
  170. $this->paymentMock,
  171. $this->addressMock
  172. );
  173. }
  174. }