227 lines
8.6 KiB
PHP
227 lines
8.6 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Newsletter\Model\Plugin;
|
|
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
|
|
/**
|
|
* @magentoAppIsolation enabled
|
|
*/
|
|
class PluginTest extends \PHPUnit\Framework\TestCase
|
|
{
|
|
/**
|
|
* Customer Account Service
|
|
*
|
|
* @var \Magento\Customer\Api\AccountManagementInterface
|
|
*/
|
|
protected $accountManagement;
|
|
|
|
/**
|
|
* @var \Magento\Customer\Api\CustomerRepositoryInterface
|
|
*/
|
|
protected $customerRepository;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$this->accountManagement = Bootstrap::getObjectManager()->get(
|
|
\Magento\Customer\Api\AccountManagementInterface::class
|
|
);
|
|
$this->customerRepository = Bootstrap::getObjectManager()->get(
|
|
\Magento\Customer\Api\CustomerRepositoryInterface::class
|
|
);
|
|
}
|
|
|
|
protected function tearDown(): void
|
|
{
|
|
/** @var \Magento\Customer\Model\CustomerRegistry $customerRegistry */
|
|
$customerRegistry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
|
|
->get(\Magento\Customer\Model\CustomerRegistry::class);
|
|
//Cleanup customer from registry
|
|
$customerRegistry->remove(1);
|
|
}
|
|
|
|
/**
|
|
* @magentoAppArea adminhtml
|
|
* @magentoDataFixture Magento/Newsletter/_files/subscribers.php
|
|
*/
|
|
public function testCustomerCreated()
|
|
{
|
|
$objectManager = Bootstrap::getObjectManager();
|
|
|
|
/** @var \Magento\Newsletter\Model\Subscriber $subscriber */
|
|
$subscriber = $objectManager->create(\Magento\Newsletter\Model\Subscriber::class);
|
|
$subscriber->loadByEmail('customer_two@example.com');
|
|
$this->assertTrue($subscriber->isSubscribed());
|
|
$this->assertEquals(0, (int)$subscriber->getCustomerId());
|
|
|
|
/** @var \Magento\Customer\Api\Data\CustomerInterfaceFactory $customerFactory */
|
|
$customerFactory = $objectManager->get(\Magento\Customer\Api\Data\CustomerInterfaceFactory::class);
|
|
$customerDataObject = $customerFactory->create()
|
|
->setFirstname('Firstname')
|
|
->setLastname('Lastname')
|
|
->setEmail('customer_two@example.com');
|
|
$createdCustomer = $this->customerRepository->save(
|
|
$customerDataObject,
|
|
$this->accountManagement->getPasswordHash('password')
|
|
);
|
|
|
|
$subscriber->loadByEmail('customer_two@example.com');
|
|
$this->assertTrue($subscriber->isSubscribed());
|
|
$this->assertEquals((int)$createdCustomer->getId(), (int)$subscriber->getCustomerId());
|
|
}
|
|
|
|
/**
|
|
* @magentoAppArea adminhtml
|
|
* @magentoDbIsolation enabled
|
|
*/
|
|
public function testCustomerCreatedNotSubscribed()
|
|
{
|
|
$this->verifySubscriptionNotExist('customer@example.com');
|
|
|
|
$objectManager = Bootstrap::getObjectManager();
|
|
/** @var \Magento\Customer\Api\Data\CustomerInterfaceFactory $customerFactory */
|
|
$customerFactory = $objectManager->get(\Magento\Customer\Api\Data\CustomerInterfaceFactory::class);
|
|
$customerDataObject = $customerFactory->create()
|
|
->setFirstname('Firstname')
|
|
->setLastname('Lastname')
|
|
->setEmail('customer@example.com');
|
|
$this->accountManagement->createAccount($customerDataObject);
|
|
|
|
$this->verifySubscriptionNotExist('customer@example.com');
|
|
}
|
|
|
|
/**
|
|
* @magentoAppArea adminhtml
|
|
* @magentoDataFixture Magento/Newsletter/_files/subscribers.php
|
|
*/
|
|
public function testCustomerUpdatedEmail()
|
|
{
|
|
$objectManager = Bootstrap::getObjectManager();
|
|
|
|
/** @var \Magento\Newsletter\Model\Subscriber $subscriber */
|
|
$subscriber = $objectManager->create(\Magento\Newsletter\Model\Subscriber::class);
|
|
$subscriber->loadByEmail('customer@example.com');
|
|
$this->assertTrue($subscriber->isSubscribed());
|
|
$this->assertEquals(1, (int)$subscriber->getCustomerId());
|
|
|
|
$customer = $this->customerRepository->getById(1);
|
|
$customer->setEmail('new@example.com');
|
|
$this->customerRepository->save($customer);
|
|
|
|
$subscriber->loadByEmail('new@example.com');
|
|
$this->assertTrue($subscriber->isSubscribed());
|
|
$this->assertEquals(1, (int)$subscriber->getCustomerId());
|
|
}
|
|
|
|
/**
|
|
* @magentoAppArea adminhtml
|
|
* @magentoDataFixture Magento/Newsletter/_files/subscribers.php
|
|
*/
|
|
public function testCustomerDeletedByIdAdminArea()
|
|
{
|
|
$objectManager = Bootstrap::getObjectManager();
|
|
|
|
/** @var \Magento\Newsletter\Model\Subscriber $subscriber */
|
|
$subscriber = $objectManager->create(\Magento\Newsletter\Model\Subscriber::class);
|
|
$subscriber->loadByEmail('customer@example.com');
|
|
$this->assertTrue($subscriber->isSubscribed());
|
|
|
|
$this->customerRepository->deleteById(1);
|
|
|
|
$this->verifySubscriptionNotExist('customer@example.com');
|
|
}
|
|
|
|
/**
|
|
* @magentoAppArea adminhtml
|
|
* @magentoDataFixture Magento/Newsletter/_files/subscribers.php
|
|
*/
|
|
public function testCustomerDeletedAdminArea()
|
|
{
|
|
$customer = $this->customerRepository->getById(1);
|
|
$objectManager = Bootstrap::getObjectManager();
|
|
/** @var \Magento\Newsletter\Model\Subscriber $subscriber */
|
|
$subscriber = $objectManager->create(\Magento\Newsletter\Model\Subscriber::class);
|
|
$subscriber->loadByEmail('customer@example.com');
|
|
$this->assertTrue($subscriber->isSubscribed());
|
|
$this->customerRepository->delete($customer);
|
|
$this->verifySubscriptionNotExist('customer@example.com');
|
|
}
|
|
|
|
/**
|
|
* Verify a subscription doesn't exist for a given email address
|
|
*
|
|
* @param string $email
|
|
* @return \Magento\Newsletter\Model\Subscriber
|
|
*/
|
|
private function verifySubscriptionNotExist($email)
|
|
{
|
|
$objectManager = Bootstrap::getObjectManager();
|
|
|
|
/** @var \Magento\Newsletter\Model\Subscriber $subscriber */
|
|
$subscriber = $objectManager->create(\Magento\Newsletter\Model\Subscriber::class);
|
|
$subscriber->loadByEmail($email);
|
|
$this->assertFalse($subscriber->isSubscribed());
|
|
$this->assertEquals(0, (int)$subscriber->getId());
|
|
return $subscriber;
|
|
}
|
|
|
|
/**
|
|
* @magentoAppArea adminhtml
|
|
* @magentoDbIsolation enabled
|
|
*/
|
|
public function testCustomerWithZeroStoreIdIsSubscribed()
|
|
{
|
|
$objectManager = Bootstrap::getObjectManager();
|
|
|
|
$currentStore = $objectManager->get(
|
|
\Magento\Store\Model\StoreManagerInterface::class
|
|
)->getStore()->getId();
|
|
|
|
$subscriber = $objectManager->create(\Magento\Newsletter\Model\Subscriber::class);
|
|
/** @var \Magento\Newsletter\Model\Subscriber $subscriber */
|
|
$subscriber->setStoreId($currentStore)
|
|
->setCustomerId(0)
|
|
->setSubscriberEmail('customer@example.com')
|
|
->setSubscriberStatus(\Magento\Newsletter\Model\Subscriber::STATUS_SUBSCRIBED)
|
|
->save();
|
|
|
|
/** @var \Magento\Customer\Api\Data\CustomerInterfaceFactory $customerFactory */
|
|
$customerFactory = $objectManager->get(\Magento\Customer\Api\Data\CustomerInterfaceFactory::class);
|
|
$customerDataObject = $customerFactory->create()
|
|
->setFirstname('Firstname')
|
|
->setLastname('Lastname')
|
|
->setStoreId(0)
|
|
->setEmail('customer@example.com');
|
|
/** @var \Magento\Customer\Api\Data\CustomerInterface $customer */
|
|
$customer = $this->accountManagement->createAccount($customerDataObject);
|
|
|
|
$this->customerRepository->save($customer);
|
|
|
|
$subscriber->loadByEmail('customer@example.com');
|
|
|
|
$this->assertEquals($customer->getId(), (int)$subscriber->getCustomerId());
|
|
$this->assertEquals($currentStore, (int)$subscriber->getStoreId());
|
|
}
|
|
|
|
/**
|
|
* Test get list customer, which have more then 2 subscribes in newsletter_subscriber.
|
|
*
|
|
* @magentoAppArea frontend
|
|
* @magentoDataFixture Magento/Newsletter/_files/subscribers.php
|
|
*/
|
|
public function testCustomerWithTwoNewsLetterSubscriptions()
|
|
{
|
|
/** @var \Magento\Framework\Api\SearchCriteriaBuilder $searchBuilder */
|
|
$searchBuilder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\SearchCriteriaBuilder::class);
|
|
$searchCriteria = $searchBuilder->addFilter('entity_id', 1)->create();
|
|
$items = $this->customerRepository->getList($searchCriteria)->getItems();
|
|
/** @var \Magento\Customer\Api\Data\CustomerInterface $customer */
|
|
$customer = $items[0];
|
|
$extensionAttributes = $customer->getExtensionAttributes();
|
|
$this->assertTrue($extensionAttributes->getIsSubscribed());
|
|
}
|
|
}
|