NewsletterTest.php 4.62 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
<?php

namespace Dotdigitalgroup\Email\Controller\Customer;

use Dotdigitalgroup\Email\Helper\Data;
use Dotdigitalgroup\Email\Model\Apiconnector\Client;
use Magento\Customer\Model\Customer;
use Magento\Customer\Model\Session as CustomerSession;
use Magento\Framework\Data\Form\FormKey\Validator as FromKeyValidator;
use Magento\Store\Model\Store;
use Magento\TestFramework\ObjectManager;

class NewsletterTest extends \Magento\TestFramework\TestCase\AbstractController
{
    /**
     * @return void
     */
    public function testConnectorContactIdNotSetCausesRedirect()
    {
        /** @var ObjectManager $objectManager */
        $objectManager = ObjectManager::getInstance();

        $mockFormKeyValidator = $this->getMockBuilder(FromKeyValidator::class)
            ->disableOriginalConstructor()
            ->getMock();
        $mockFormKeyValidator->method('validate')->willReturn(true);
        $objectManager->addSharedInstance($mockFormKeyValidator, FromKeyValidator::class);

        $sessionMethods = array_merge(get_class_methods(CustomerSession::class), ['getConnectorContactId']);
        $mockCustomerSession = $this->getMockBuilder(CustomerSession::class)
            ->disableOriginalConstructor()
            ->setMethods($sessionMethods)
            ->getMock();

        $mockCustomerSession->method('getConnectorContactId')->willReturn(false);
        $objectManager->addSharedInstance($mockCustomerSession, CustomerSession::class);

        $mockCustomerSession->expects($this->once())->method('getConnectorContactId');

        $this->dispatch('connector/customer/newsletter');

        $this->assertRedirect($this->stringContains('/customer/account/'));
    }

    /**
     *
     */
    public function testContactDataFieldsAreUpdatedByEmail()
    {
        ///updatecontactdatafieldsbyemail called
        /** @var ObjectManager  $objectManager */
        $objectManager = ObjectManager::getInstance();

        $mockFormKeyValidator = $this->getMockBuilder(FromKeyValidator::class)
            ->disableOriginalConstructor()
            ->getMock();
        $mockFormKeyValidator->method('validate')->willReturn(true);
        $objectManager->addSharedInstance($mockFormKeyValidator, FromKeyValidator::class);

        $sessionMethods = array_merge(get_class_methods(CustomerSession::class), [
            'getConnectorContactId',
        ]);
        /**
         * Customer Session mock.
         */
        $mockCustomerSession = $this->getMockBuilder(CustomerSession::class)
            ->disableOriginalConstructor()
            ->setMethods($sessionMethods)
            ->getMock();
        $mockCustomerSession->method('getConnectorContactId')->willReturn('dummy123');
        $mockCustomerSession->method('getCustomerId')->willReturn(1);
        $objectManager->addSharedInstance($mockCustomerSession, CustomerSession::class);

        /**
         * Customer mock.
         */
        $mockCustomer = $this->getMockBuilder(Customer::class)
            ->disableOriginalConstructor()
            ->getMock();

        /**
         * Store mock.
         */
        $mockStore = $this->getMockBuilder(Store::class)
            ->disableOriginalConstructor()
            ->getMock();

        /**
         * Helper mock.
         */
        $mockHelper = $this->getMockBuilder(Data::class)
            ->disableOriginalConstructor()
            ->getMock();

        /**
         * Client mock.
         */
        $mockClient = $this->getMockBuilder(Client::class)
            ->disableOriginalConstructor()
            ->getMock();

        //\Dotdigitalgroup\Email\Helper\Data
        $objectManager->addSharedInstance($mockHelper, Data::class);

        $mockCustomerSession->method('getCustomer')->willReturn($mockCustomer);
        $mockCustomer->method('getStore')->willReturn($mockStore);
        $mockStore->method('getWebsite')->willReturn('0');
        $mockHelper->method('isEnabled')->willReturn('1');
        $mockHelper->method('getWebsiteApiClient')->willReturn($mockClient);
        $mockHelper->method('getCanShowDataFields')->willReturn(true);
        $mockClient->method('getContactById')->willReturn((object) ['id' => '111']);
        $mockClient->method('setApiUsername')->willReturn($mockClient);
        $mockClient->method('getDataFields')->willReturn([]);
        $mockClient->method('setApipassword')->willReturn($mockClient);
        $mockClient->method('getContactById')->willReturn((object) ['id' => '111']);
        $mockClient->expects($this->atLeastOnce())->method('updateContactDatafieldsByEmail')->willReturn([]);

        $this->getRequest()->setParam('data_fields', ['key' => 'dummy']);

        $this->dispatch('connector/customer/newsletter');
    }
}