239 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			239 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Magento\Sales\Api;
 | 
						|
 | 
						|
use Magento\Customer\Api\AccountManagementInterface;
 | 
						|
use Magento\Customer\Api\Data\AddressInterface;
 | 
						|
use Magento\Customer\Api\Data\CustomerInterface;
 | 
						|
use Magento\Customer\Api\Data\CustomerInterfaceFactory;
 | 
						|
use Magento\Framework\Api\AttributeInterface;
 | 
						|
use Magento\Sales\Api\Data\OrderAddressInterface;
 | 
						|
use Magento\Sales\Model\Order;
 | 
						|
use Magento\Sales\Model\OrderFactory;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
use PHPUnit\Framework\TestCase;
 | 
						|
 | 
						|
/**
 | 
						|
 * Test for Magento\Sales\Api\OrderCustomerDelegateInterface class.
 | 
						|
 *
 | 
						|
 * @magentoAppIsolation enabled
 | 
						|
 */
 | 
						|
class OrderCustomerDelegateInterfaceTest extends TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var OrderCustomerDelegateInterface
 | 
						|
     */
 | 
						|
    private $delegate;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var OrderRepositoryInterface
 | 
						|
     */
 | 
						|
    private $orderRepository;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var CustomerInterfaceFactory
 | 
						|
     */
 | 
						|
    private $customerFactory;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var AccountManagementInterface
 | 
						|
     */
 | 
						|
    private $accountManagement;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var OrderFactory
 | 
						|
     */
 | 
						|
    private $orderFactory;
 | 
						|
 | 
						|
    /**
 | 
						|
     * {@inheritdoc}
 | 
						|
     */
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->delegate = Bootstrap::getObjectManager()->get(
 | 
						|
            OrderCustomerDelegateInterface::class
 | 
						|
        );
 | 
						|
        $this->orderRepository = Bootstrap::getObjectManager()->get(
 | 
						|
            OrderRepositoryInterface::class
 | 
						|
        );
 | 
						|
        $this->customerFactory = Bootstrap::getObjectManager()->get(
 | 
						|
            CustomerInterfaceFactory::class
 | 
						|
        );
 | 
						|
        $this->accountManagement = Bootstrap::getObjectManager()->get(
 | 
						|
            AccountManagementInterface::class
 | 
						|
        );
 | 
						|
        $this->orderFactory = Bootstrap::getObjectManager()->get(
 | 
						|
            OrderFactory::class
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param OrderAddressInterface $orderAddress
 | 
						|
     * @param AddressInterface $address
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    private function compareAddresses(
 | 
						|
        OrderAddressInterface $orderAddress,
 | 
						|
        AddressInterface $address
 | 
						|
    ): void {
 | 
						|
        $this->assertEquals(
 | 
						|
            $orderAddress->getFirstname(),
 | 
						|
            $address->getFirstname()
 | 
						|
        );
 | 
						|
        $this->assertEquals(
 | 
						|
            $orderAddress->getLastname(),
 | 
						|
            $address->getLastname()
 | 
						|
        );
 | 
						|
        $this->assertEquals(
 | 
						|
            $orderAddress->getCompany(),
 | 
						|
            $address->getCompany()
 | 
						|
        );
 | 
						|
        $this->assertEquals(
 | 
						|
            $orderAddress->getStreet(),
 | 
						|
            $address->getStreet()
 | 
						|
        );
 | 
						|
        $this->assertEquals(
 | 
						|
            $orderAddress->getCity(),
 | 
						|
            $address->getCity()
 | 
						|
        );
 | 
						|
        if (!$address->getRegionId()) {
 | 
						|
            $this->assertEmpty($address->getRegionId());
 | 
						|
        } else {
 | 
						|
            $this->assertEquals(
 | 
						|
                $orderAddress->getRegionId(),
 | 
						|
                $address->getRegionId()
 | 
						|
            );
 | 
						|
        }
 | 
						|
        $this->assertEquals(
 | 
						|
            $orderAddress->getPostcode(),
 | 
						|
            $address->getPostcode()
 | 
						|
        );
 | 
						|
        $this->assertEquals(
 | 
						|
            $orderAddress->getCountryId(),
 | 
						|
            $address->getCountryId()
 | 
						|
        );
 | 
						|
        $this->assertEquals(
 | 
						|
            $orderAddress->getTelephone(),
 | 
						|
            $address->getTelephone()
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDbIsolation enabled
 | 
						|
     * @magentoAppIsolation enabled
 | 
						|
     * @magentoDataFixture Magento/Customer/_files/attribute_user_defined_address.php
 | 
						|
     * @magentoDataFixture Magento/Sales/_files/order.php
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function testDelegateNew(): void
 | 
						|
    {
 | 
						|
        $orderAutoincrementId = '100000001';
 | 
						|
        /** @var Order $orderModel */
 | 
						|
        $orderModel = $this->orderFactory->create();
 | 
						|
        $orderModel->loadByIncrementId($orderAutoincrementId);
 | 
						|
        $orderId = (int)$orderModel->getId();
 | 
						|
        unset($orderModel);
 | 
						|
 | 
						|
        $this->delegate->delegateNew($orderId);
 | 
						|
 | 
						|
        //Saving new customer with prepared data from order.
 | 
						|
        /** @var CustomerInterface $customer */
 | 
						|
        $customer = $this->customerFactory->create();
 | 
						|
        $customer->setWebsiteId(1)
 | 
						|
            ->setEmail('customer_order_delegate@example.com')
 | 
						|
            ->setGroupId(1)
 | 
						|
            ->setStoreId(1)
 | 
						|
            ->setPrefix('Mr.')
 | 
						|
            ->setFirstname('John')
 | 
						|
            ->setMiddlename('A')
 | 
						|
            ->setLastname('Smith')
 | 
						|
            ->setSuffix('Esq.')
 | 
						|
            ->setTaxvat('12')
 | 
						|
            ->setGender(0);
 | 
						|
        $createdCustomer = $this->accountManagement->createAccount(
 | 
						|
            $customer,
 | 
						|
            '12345abcD'
 | 
						|
        );
 | 
						|
 | 
						|
        //Testing that addresses from order and the order itself are assigned
 | 
						|
        //to customer.
 | 
						|
        $order = $this->orderRepository->get($orderId);
 | 
						|
        $this->assertCount(1, $createdCustomer->getAddresses());
 | 
						|
        $this->assertNotNull($createdCustomer->getDefaultBilling());
 | 
						|
        $this->assertNotNull($createdCustomer->getDefaultShipping());
 | 
						|
        foreach ($createdCustomer->getAddresses() as $address) {
 | 
						|
            $this->assertTrue(
 | 
						|
                $address->isDefaultBilling() || $address->isDefaultShipping()
 | 
						|
            );
 | 
						|
            if ($address->isDefaultBilling()) {
 | 
						|
                $this->compareAddresses($order->getBillingAddress(), $address);
 | 
						|
            } elseif ($address->isDefaultShipping()) {
 | 
						|
                $this->compareAddresses($order->getShippingAddress(), $address);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        $this->assertEquals($order->getCustomerId(), $createdCustomer->getId());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDbIsolation enabled
 | 
						|
     * @magentoAppIsolation enabled
 | 
						|
     * @magentoDataFixture Magento/Sales/_files/order_different_addresses.php
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function testDelegateNewDifferentAddresses(): void
 | 
						|
    {
 | 
						|
        $orderAutoincrementId = '100000001';
 | 
						|
        /** @var Order $orderModel */
 | 
						|
        $orderModel = $this->orderFactory->create();
 | 
						|
        $orderModel->loadByIncrementId($orderAutoincrementId);
 | 
						|
        $orderId = (int)$orderModel->getId();
 | 
						|
        unset($orderModel);
 | 
						|
 | 
						|
        $this->delegate->delegateNew($orderId);
 | 
						|
 | 
						|
        //Saving new customer with prepared data from order.
 | 
						|
        /** @var CustomerInterface $customer */
 | 
						|
        $customer = $this->customerFactory->create();
 | 
						|
        $customer->setWebsiteId(1)
 | 
						|
            ->setEmail('customer_order_delegate@example.com')
 | 
						|
            ->setGroupId(1)
 | 
						|
            ->setStoreId(1)
 | 
						|
            ->setPrefix('Mr.')
 | 
						|
            ->setFirstname('John')
 | 
						|
            ->setMiddlename('A')
 | 
						|
            ->setLastname('Smith')
 | 
						|
            ->setSuffix('Esq.')
 | 
						|
            ->setTaxvat('12')
 | 
						|
            ->setGender(0);
 | 
						|
        $createdCustomer = $this->accountManagement->createAccount(
 | 
						|
            $customer,
 | 
						|
            '12345abcD'
 | 
						|
        );
 | 
						|
 | 
						|
        //Testing that addresses from order and the order itself are assigned
 | 
						|
        //to customer.
 | 
						|
        $order = $this->orderRepository->get($orderId);
 | 
						|
        $this->assertCount(2, $createdCustomer->getAddresses());
 | 
						|
        $this->assertNotNull($createdCustomer->getDefaultBilling());
 | 
						|
        $this->assertNotNull($createdCustomer->getDefaultShipping());
 | 
						|
        foreach ($createdCustomer->getAddresses() as $address) {
 | 
						|
            $this->assertTrue(
 | 
						|
                $address->isDefaultBilling() || $address->isDefaultShipping()
 | 
						|
            );
 | 
						|
            if ($address->isDefaultBilling()) {
 | 
						|
                $this->compareAddresses($order->getBillingAddress(), $address);
 | 
						|
            } elseif ($address->isDefaultShipping()) {
 | 
						|
                $this->compareAddresses($order->getShippingAddress(), $address);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        $this->assertEquals($order->getCustomerId(), $createdCustomer->getId());
 | 
						|
    }
 | 
						|
}
 |