227 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			227 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?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());
 | 
						|
    }
 | 
						|
}
 |