218 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			218 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Magento\GraphQl\Quote\Customer;
 | 
						|
 | 
						|
use Magento\Integration\Api\CustomerTokenServiceInterface;
 | 
						|
use Magento\Quote\Model\QuoteIdMaskFactory;
 | 
						|
use Magento\Quote\Model\ResourceModel\Quote\CollectionFactory as QuoteCollectionFactory;
 | 
						|
use Magento\Quote\Model\ResourceModel\Quote as QuoteResource;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
use Magento\TestFramework\TestCase\GraphQlAbstract;
 | 
						|
use Magento\Quote\Api\GuestCartRepositoryInterface;
 | 
						|
 | 
						|
/**
 | 
						|
 * Test for empty cart creation mutation for customer
 | 
						|
 */
 | 
						|
class CreateEmptyCartTest extends GraphQlAbstract
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var GuestCartRepositoryInterface
 | 
						|
     */
 | 
						|
    private $guestCartRepository;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var CustomerTokenServiceInterface
 | 
						|
     */
 | 
						|
    private $customerTokenService;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var QuoteCollectionFactory
 | 
						|
     */
 | 
						|
    private $quoteCollectionFactory;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var QuoteResource
 | 
						|
     */
 | 
						|
    private $quoteResource;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var QuoteIdMaskFactory
 | 
						|
     */
 | 
						|
    private $quoteIdMaskFactory;
 | 
						|
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $objectManager = Bootstrap::getObjectManager();
 | 
						|
        $this->quoteCollectionFactory = $objectManager->get(QuoteCollectionFactory::class);
 | 
						|
        $this->guestCartRepository = $objectManager->get(GuestCartRepositoryInterface::class);
 | 
						|
        $this->customerTokenService = $objectManager->get(CustomerTokenServiceInterface::class);
 | 
						|
        $this->quoteResource = $objectManager->get(QuoteResource::class);
 | 
						|
        $this->quoteIdMaskFactory = $objectManager->get(QuoteIdMaskFactory::class);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoApiDataFixture Magento/Customer/_files/customer.php
 | 
						|
     */
 | 
						|
    public function testCreateEmptyCart()
 | 
						|
    {
 | 
						|
        $query = $this->getQuery();
 | 
						|
        $response = $this->graphQlMutation($query, [], '', $this->getHeaderMapWithCustomerToken());
 | 
						|
 | 
						|
        self::assertArrayHasKey('createEmptyCart', $response);
 | 
						|
        self::assertNotEmpty($response['createEmptyCart']);
 | 
						|
 | 
						|
        $guestCart = $this->guestCartRepository->get($response['createEmptyCart']);
 | 
						|
 | 
						|
        self::assertNotNull($guestCart->getId());
 | 
						|
        self::assertEquals(1, $guestCart->getCustomer()->getId());
 | 
						|
        self::assertEquals('default', $guestCart->getStore()->getCode());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoApiDataFixture Magento/Customer/_files/customer.php
 | 
						|
     */
 | 
						|
    public function testCreateEmptyMultipleRequestsCart()
 | 
						|
    {
 | 
						|
        $query = $this->getQuery();
 | 
						|
        $response = $this->graphQlMutation($query, [], '', $this->getHeaderMapWithCustomerToken());
 | 
						|
 | 
						|
        self::assertArrayHasKey('createEmptyCart', $response);
 | 
						|
        self::assertNotEmpty($response['createEmptyCart']);
 | 
						|
        $maskedCartId = $response['createEmptyCart'];
 | 
						|
 | 
						|
        $response = $this->graphQlMutation($query, [], '', $this->getHeaderMapWithCustomerToken());
 | 
						|
        self::assertArrayHasKey('createEmptyCart', $response);
 | 
						|
        self::assertNotEmpty($response['createEmptyCart']);
 | 
						|
 | 
						|
        self::assertEquals($maskedCartId, $response['createEmptyCart']);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoApiDataFixture Magento/Store/_files/second_store.php
 | 
						|
     * @magentoApiDataFixture Magento/Customer/_files/customer.php
 | 
						|
     */
 | 
						|
    public function testCreateEmptyCartWithNotDefaultStore()
 | 
						|
    {
 | 
						|
        $query = $this->getQuery();
 | 
						|
 | 
						|
        $headerMap = $this->getHeaderMapWithCustomerToken();
 | 
						|
        $headerMap['Store'] = 'fixture_second_store';
 | 
						|
        $response = $this->graphQlMutation($query, [], '', $headerMap);
 | 
						|
 | 
						|
        self::assertArrayHasKey('createEmptyCart', $response);
 | 
						|
        self::assertNotEmpty($response['createEmptyCart']);
 | 
						|
 | 
						|
        /* guestCartRepository is used for registered customer to get the cart hash */
 | 
						|
        $guestCart = $this->guestCartRepository->get($response['createEmptyCart']);
 | 
						|
 | 
						|
        self::assertNotNull($guestCart->getId());
 | 
						|
        self::assertEquals(1, $guestCart->getCustomer()->getId());
 | 
						|
        self::assertEquals('fixture_second_store', $guestCart->getStore()->getCode());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoApiDataFixture Magento/Customer/_files/customer.php
 | 
						|
     */
 | 
						|
    public function testCreateEmptyCartWithPredefinedCartId()
 | 
						|
    {
 | 
						|
        $predefinedCartId = '572cda51902b5b517c0e1a2b2fd004b4';
 | 
						|
 | 
						|
        $query = <<<QUERY
 | 
						|
mutation {
 | 
						|
  createEmptyCart (input: {cart_id: "{$predefinedCartId}"})
 | 
						|
}
 | 
						|
QUERY;
 | 
						|
        $response = $this->graphQlMutation($query, [], '', $this->getHeaderMapWithCustomerToken());
 | 
						|
 | 
						|
        self::assertArrayHasKey('createEmptyCart', $response);
 | 
						|
        self::assertEquals($predefinedCartId, $response['createEmptyCart']);
 | 
						|
 | 
						|
        $guestCart = $this->guestCartRepository->get($response['createEmptyCart']);
 | 
						|
        self::assertNotNull($guestCart->getId());
 | 
						|
        self::assertEquals(1, $guestCart->getCustomer()->getId());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoApiDataFixture Magento/Customer/_files/customer.php
 | 
						|
     *
 | 
						|
     */
 | 
						|
    public function testCreateEmptyCartIfPredefinedCartIdAlreadyExists()
 | 
						|
    {
 | 
						|
        $this->expectException(\Exception::class);
 | 
						|
        $this->expectExceptionMessage('Cart with ID "572cda51902b5b517c0e1a2b2fd004b4" already exists.');
 | 
						|
 | 
						|
        $predefinedCartId = '572cda51902b5b517c0e1a2b2fd004b4';
 | 
						|
 | 
						|
        $query = <<<QUERY
 | 
						|
mutation {
 | 
						|
  createEmptyCart (input: {cart_id: "{$predefinedCartId}"})
 | 
						|
}
 | 
						|
QUERY;
 | 
						|
        $this->graphQlMutation($query, [], '', $this->getHeaderMapWithCustomerToken());
 | 
						|
        $this->graphQlMutation($query, [], '', $this->getHeaderMapWithCustomerToken());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoApiDataFixture Magento/Customer/_files/customer.php
 | 
						|
     *
 | 
						|
     */
 | 
						|
    public function testCreateEmptyCartWithWrongPredefinedCartId()
 | 
						|
    {
 | 
						|
        $this->expectException(\Exception::class);
 | 
						|
        $this->expectExceptionMessage('Cart ID length should to be 32 symbols.');
 | 
						|
 | 
						|
        $predefinedCartId = '572';
 | 
						|
 | 
						|
        $query = <<<QUERY
 | 
						|
mutation {
 | 
						|
  createEmptyCart (input: {cart_id: "{$predefinedCartId}"})
 | 
						|
}
 | 
						|
QUERY;
 | 
						|
        $this->graphQlMutation($query, [], '', $this->getHeaderMapWithCustomerToken());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    private function getQuery(): string
 | 
						|
    {
 | 
						|
        return <<<QUERY
 | 
						|
mutation {
 | 
						|
  createEmptyCart
 | 
						|
}
 | 
						|
QUERY;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param string $username
 | 
						|
     * @param string $password
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    private function getHeaderMapWithCustomerToken(
 | 
						|
        string $username = 'customer@example.com',
 | 
						|
        string $password = 'password'
 | 
						|
    ): array {
 | 
						|
        $customerToken = $this->customerTokenService->createCustomerAccessToken($username, $password);
 | 
						|
        $headerMap = ['Authorization' => 'Bearer ' . $customerToken];
 | 
						|
        return $headerMap;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function tearDown(): void
 | 
						|
    {
 | 
						|
        $quoteCollection = $this->quoteCollectionFactory->create();
 | 
						|
        foreach ($quoteCollection as $quote) {
 | 
						|
            $this->quoteResource->delete($quote);
 | 
						|
 | 
						|
            $quoteIdMask = $this->quoteIdMaskFactory->create();
 | 
						|
            $quoteIdMask->setQuoteId($quote->getId())
 | 
						|
                ->delete();
 | 
						|
        }
 | 
						|
        parent::tearDown();
 | 
						|
    }
 | 
						|
}
 |