140 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Magento\Multishipping\Api;
 | 
						|
 | 
						|
use Magento\Framework\Api\FilterBuilder;
 | 
						|
use Magento\Framework\Api\SearchCriteriaBuilder;
 | 
						|
use Magento\Framework\Api\SortOrderBuilder;
 | 
						|
use Magento\Quote\Api\CartRepositoryInterface;
 | 
						|
use Magento\Quote\Model\Quote;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
use Magento\TestFramework\ObjectManager;
 | 
						|
use Magento\TestFramework\TestCase\WebapiAbstract;
 | 
						|
 | 
						|
/**
 | 
						|
 * Tests web-api for multishipping quote.
 | 
						|
 */
 | 
						|
class CartRepositoryTest extends WebapiAbstract
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var ObjectManager
 | 
						|
     */
 | 
						|
    private $objectManager;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var SearchCriteriaBuilder
 | 
						|
     */
 | 
						|
    private $searchCriteriaBuilder;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var SortOrderBuilder
 | 
						|
     */
 | 
						|
    private $sortOrderBuilder;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var FilterBuilder
 | 
						|
     */
 | 
						|
    private $filterBuilder;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritdoc
 | 
						|
     */
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->objectManager = Bootstrap::getObjectManager();
 | 
						|
        $this->filterBuilder = $this->objectManager->create(FilterBuilder::class);
 | 
						|
        $this->sortOrderBuilder = $this->objectManager->create(SortOrderBuilder::class);
 | 
						|
        $this->searchCriteriaBuilder = $this->objectManager->create(SearchCriteriaBuilder::class);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritdoc
 | 
						|
     */
 | 
						|
    protected function tearDown(): void
 | 
						|
    {
 | 
						|
        try {
 | 
						|
            /** @var CartRepositoryInterface $quoteRepository */
 | 
						|
            $quoteRepository = $this->objectManager->get(CartRepositoryInterface::class);
 | 
						|
            $cart = $this->getCart('multishipping_quote_id');
 | 
						|
            $quoteRepository->delete($cart);
 | 
						|
        } catch (\InvalidArgumentException $e) {
 | 
						|
            // Do nothing if cart fixture was not used
 | 
						|
        }
 | 
						|
        parent::tearDown();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Tests that multishipping quote contains all addresses in shipping assignments.
 | 
						|
     *
 | 
						|
     * @magentoApiDataFixture Magento/Multishipping/Fixtures/quote_with_split_items.php
 | 
						|
     */
 | 
						|
    public function testGetMultishippingCart()
 | 
						|
    {
 | 
						|
        $cart = $this->getCart('multishipping_quote_id');
 | 
						|
        $cartId = $cart->getId();
 | 
						|
 | 
						|
        $serviceInfo = [
 | 
						|
            'rest' => [
 | 
						|
                'resourcePath' => '/V1/carts/' . $cartId,
 | 
						|
                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
 | 
						|
            ],
 | 
						|
            'soap' => [
 | 
						|
                'service' => 'quoteCartRepositoryV1',
 | 
						|
                'serviceVersion' => 'V1',
 | 
						|
                'operation' => 'quoteCartRepositoryV1Get',
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
 | 
						|
        $requestData = ['cartId' => $cartId];
 | 
						|
        $cartData = $this->_webApiCall($serviceInfo, $requestData);
 | 
						|
 | 
						|
        $shippingAssignments = $cart->getExtensionAttributes()->getShippingAssignments();
 | 
						|
        foreach ($shippingAssignments as $key => $shippingAssignment) {
 | 
						|
            $address = $shippingAssignment->getShipping()->getAddress();
 | 
						|
            $cartItem = $shippingAssignment->getItems()[0];
 | 
						|
            $this->assertEquals(
 | 
						|
                $address->getId(),
 | 
						|
                $cartData['extension_attributes']['shipping_assignments'][$key]['shipping']['address']['id']
 | 
						|
            );
 | 
						|
            $this->assertEquals(
 | 
						|
                $cartItem->getSku(),
 | 
						|
                $cartData['extension_attributes']['shipping_assignments'][$key]['items'][0]['sku']
 | 
						|
            );
 | 
						|
            $this->assertEquals(
 | 
						|
                $cartItem->getQty(),
 | 
						|
                $cartData['extension_attributes']['shipping_assignments'][$key]['items'][0]['qty']
 | 
						|
            );
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Retrieve quote by given reserved order ID
 | 
						|
     *
 | 
						|
     * @param string $reservedOrderId
 | 
						|
     * @return Quote
 | 
						|
     * @throws \InvalidArgumentException
 | 
						|
     */
 | 
						|
    private function getCart(string $reservedOrderId): Quote
 | 
						|
    {
 | 
						|
        /** @var SearchCriteriaBuilder $searchCriteriaBuilder */
 | 
						|
        $searchCriteriaBuilder = $this->objectManager->get(SearchCriteriaBuilder::class);
 | 
						|
        $searchCriteria = $searchCriteriaBuilder->addFilter('reserved_order_id', $reservedOrderId)
 | 
						|
            ->create();
 | 
						|
 | 
						|
        /** @var CartRepositoryInterface $quoteRepository */
 | 
						|
        $quoteRepository = $this->objectManager->get(CartRepositoryInterface::class);
 | 
						|
        $items = $quoteRepository->getList($searchCriteria)->getItems();
 | 
						|
 | 
						|
        if (empty($items)) {
 | 
						|
            throw new \InvalidArgumentException('There is no quote with provided reserved order ID.');
 | 
						|
        }
 | 
						|
 | 
						|
        return array_pop($items);
 | 
						|
    }
 | 
						|
}
 |