PluginTest.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Newsletter\Model\Plugin;
  7. use Magento\TestFramework\Helper\Bootstrap;
  8. /**
  9. * @magentoAppIsolation enabled
  10. */
  11. class PluginTest extends \PHPUnit\Framework\TestCase
  12. {
  13. /**
  14. * Customer Account Service
  15. *
  16. * @var \Magento\Customer\Api\AccountManagementInterface
  17. */
  18. protected $accountManagement;
  19. /**
  20. * @var \Magento\Customer\Api\CustomerRepositoryInterface
  21. */
  22. protected $customerRepository;
  23. public function setUp()
  24. {
  25. $this->accountManagement = Bootstrap::getObjectManager()->get(
  26. \Magento\Customer\Api\AccountManagementInterface::class
  27. );
  28. $this->customerRepository = Bootstrap::getObjectManager()->get(
  29. \Magento\Customer\Api\CustomerRepositoryInterface::class
  30. );
  31. }
  32. public function tearDown()
  33. {
  34. /** @var \Magento\Customer\Model\CustomerRegistry $customerRegistry */
  35. $customerRegistry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
  36. ->get(\Magento\Customer\Model\CustomerRegistry::class);
  37. //Cleanup customer from registry
  38. $customerRegistry->remove(1);
  39. }
  40. /**
  41. * @magentoAppArea adminhtml
  42. * @magentoDataFixture Magento/Newsletter/_files/subscribers.php
  43. */
  44. public function testCustomerCreated()
  45. {
  46. $objectManager = Bootstrap::getObjectManager();
  47. /** @var \Magento\Newsletter\Model\Subscriber $subscriber */
  48. $subscriber = $objectManager->create(\Magento\Newsletter\Model\Subscriber::class);
  49. $subscriber->loadByEmail('customer_two@example.com');
  50. $this->assertTrue($subscriber->isSubscribed());
  51. $this->assertEquals(0, (int)$subscriber->getCustomerId());
  52. /** @var \Magento\Customer\Api\Data\CustomerInterfaceFactory $customerFactory */
  53. $customerFactory = $objectManager->get(\Magento\Customer\Api\Data\CustomerInterfaceFactory::class);
  54. $customerDataObject = $customerFactory->create()
  55. ->setFirstname('Firstname')
  56. ->setLastname('Lastname')
  57. ->setEmail('customer_two@example.com');
  58. $createdCustomer = $this->customerRepository->save(
  59. $customerDataObject,
  60. $this->accountManagement->getPasswordHash('password')
  61. );
  62. $subscriber->loadByEmail('customer_two@example.com');
  63. $this->assertTrue($subscriber->isSubscribed());
  64. $this->assertEquals((int)$createdCustomer->getId(), (int)$subscriber->getCustomerId());
  65. }
  66. /**
  67. * @magentoAppArea adminhtml
  68. * @magentoDbIsolation enabled
  69. */
  70. public function testCustomerCreatedNotSubscribed()
  71. {
  72. $this->verifySubscriptionNotExist('customer@example.com');
  73. $objectManager = Bootstrap::getObjectManager();
  74. /** @var \Magento\Customer\Api\Data\CustomerInterfaceFactory $customerFactory */
  75. $customerFactory = $objectManager->get(\Magento\Customer\Api\Data\CustomerInterfaceFactory::class);
  76. $customerDataObject = $customerFactory->create()
  77. ->setFirstname('Firstname')
  78. ->setLastname('Lastname')
  79. ->setEmail('customer@example.com');
  80. $this->accountManagement->createAccount($customerDataObject);
  81. $this->verifySubscriptionNotExist('customer@example.com');
  82. }
  83. /**
  84. * @magentoAppArea adminhtml
  85. * @magentoDataFixture Magento/Newsletter/_files/subscribers.php
  86. */
  87. public function testCustomerUpdatedEmail()
  88. {
  89. $objectManager = Bootstrap::getObjectManager();
  90. /** @var \Magento\Newsletter\Model\Subscriber $subscriber */
  91. $subscriber = $objectManager->create(\Magento\Newsletter\Model\Subscriber::class);
  92. $subscriber->loadByEmail('customer@example.com');
  93. $this->assertTrue($subscriber->isSubscribed());
  94. $this->assertEquals(1, (int)$subscriber->getCustomerId());
  95. $customer = $this->customerRepository->getById(1);
  96. $customer->setEmail('new@example.com');
  97. $this->customerRepository->save($customer);
  98. $subscriber->loadByEmail('new@example.com');
  99. $this->assertTrue($subscriber->isSubscribed());
  100. $this->assertEquals(1, (int)$subscriber->getCustomerId());
  101. }
  102. /**
  103. * @magentoAppArea adminhtml
  104. * @magentoDataFixture Magento/Newsletter/_files/subscribers.php
  105. */
  106. public function testCustomerDeletedByIdAdminArea()
  107. {
  108. $objectManager = Bootstrap::getObjectManager();
  109. /** @var \Magento\Newsletter\Model\Subscriber $subscriber */
  110. $subscriber = $objectManager->create(\Magento\Newsletter\Model\Subscriber::class);
  111. $subscriber->loadByEmail('customer@example.com');
  112. $this->assertTrue($subscriber->isSubscribed());
  113. $this->customerRepository->deleteById(1);
  114. $this->verifySubscriptionNotExist('customer@example.com');
  115. }
  116. /**
  117. * @magentoAppArea adminhtml
  118. * @magentoDataFixture Magento/Newsletter/_files/subscribers.php
  119. */
  120. public function testCustomerDeletedAdminArea()
  121. {
  122. $customer = $this->customerRepository->getById(1);
  123. $objectManager = Bootstrap::getObjectManager();
  124. /** @var \Magento\Newsletter\Model\Subscriber $subscriber */
  125. $subscriber = $objectManager->create(\Magento\Newsletter\Model\Subscriber::class);
  126. $subscriber->loadByEmail('customer@example.com');
  127. $this->assertTrue($subscriber->isSubscribed());
  128. $this->customerRepository->delete($customer);
  129. $this->verifySubscriptionNotExist('customer@example.com');
  130. }
  131. /**
  132. * Verify a subscription doesn't exist for a given email address
  133. *
  134. * @param string $email
  135. * @return \Magento\Newsletter\Model\Subscriber
  136. */
  137. private function verifySubscriptionNotExist($email)
  138. {
  139. $objectManager = Bootstrap::getObjectManager();
  140. /** @var \Magento\Newsletter\Model\Subscriber $subscriber */
  141. $subscriber = $objectManager->create(\Magento\Newsletter\Model\Subscriber::class);
  142. $subscriber->loadByEmail($email);
  143. $this->assertFalse($subscriber->isSubscribed());
  144. $this->assertEquals(0, (int)$subscriber->getId());
  145. return $subscriber;
  146. }
  147. /**
  148. * @magentoAppArea adminhtml
  149. * @magentoDbIsolation enabled
  150. */
  151. public function testCustomerWithZeroStoreIdIsSubscribed()
  152. {
  153. $objectManager = Bootstrap::getObjectManager();
  154. $currentStore = $objectManager->get(
  155. \Magento\Store\Model\StoreManagerInterface::class
  156. )->getStore()->getId();
  157. $subscriber = $objectManager->create(\Magento\Newsletter\Model\Subscriber::class);
  158. /** @var \Magento\Newsletter\Model\Subscriber $subscriber */
  159. $subscriber->setStoreId($currentStore)
  160. ->setCustomerId(0)
  161. ->setSubscriberEmail('customer@example.com')
  162. ->setSubscriberStatus(\Magento\Newsletter\Model\Subscriber::STATUS_SUBSCRIBED)
  163. ->save();
  164. /** @var \Magento\Customer\Api\Data\CustomerInterfaceFactory $customerFactory */
  165. $customerFactory = $objectManager->get(\Magento\Customer\Api\Data\CustomerInterfaceFactory::class);
  166. $customerDataObject = $customerFactory->create()
  167. ->setFirstname('Firstname')
  168. ->setLastname('Lastname')
  169. ->setStoreId(0)
  170. ->setEmail('customer@example.com');
  171. /** @var \Magento\Customer\Api\Data\CustomerInterface $customer */
  172. $customer = $this->accountManagement->createAccount($customerDataObject);
  173. $this->customerRepository->save($customer);
  174. $subscriber->loadByEmail('customer@example.com');
  175. $this->assertEquals($customer->getId(), (int)$subscriber->getCustomerId());
  176. $this->assertEquals($currentStore, (int)$subscriber->getStoreId());
  177. }
  178. }