123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\GraphQl\Quote;
- use Magento\Integration\Api\CustomerTokenServiceInterface;
- use Magento\Quote\Model\Quote;
- use Magento\Quote\Model\QuoteIdToMaskedQuoteIdInterface;
- use Magento\Quote\Model\ResourceModel\Quote as QuoteResource;
- use Magento\TestFramework\Helper\Bootstrap;
- use Magento\TestFramework\TestCase\GraphQlAbstract;
- /**
- * Test for getting cart information
- */
- class GetCartTest extends GraphQlAbstract
- {
- /**
- * @var CustomerTokenServiceInterface
- */
- private $customerTokenService;
- /**
- * @var QuoteResource
- */
- private $quoteResource;
- /**
- * @var Quote
- */
- private $quote;
- /**
- * @var QuoteIdToMaskedQuoteIdInterface
- */
- private $quoteIdToMaskedId;
- /**
- * @inheritdoc
- */
- protected function setUp()
- {
- $this->markTestIncomplete('https://github.com/magento/graphql-ce/issues/434');
- $objectManager = Bootstrap::getObjectManager();
- $this->quoteResource = $objectManager->create(QuoteResource::class);
- $this->quote = $objectManager->create(Quote::class);
- $this->quoteIdToMaskedId = $objectManager->create(QuoteIdToMaskedQuoteIdInterface::class);
- $this->customerTokenService = $objectManager->get(CustomerTokenServiceInterface::class);
- }
- /**
- * @magentoApiDataFixture Magento/Checkout/_files/quote_with_items_saved.php
- */
- public function testGetOwnCartForRegisteredCustomer()
- {
- $reservedOrderId = 'test_order_item_with_items';
- $this->quoteResource->load(
- $this->quote,
- $reservedOrderId,
- 'reserved_order_id'
- );
- $maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$this->quote->getId());
- $query = $this->prepareGetCartQuery($maskedQuoteId);
- $response = $this->sendRequestWithToken($query);
- self::assertArrayHasKey('cart', $response);
- self::assertNotEmpty($response['cart']['items']);
- self::assertNotEmpty($response['cart']['shipping_addresses']);
- }
- /**
- * @magentoApiDataFixture Magento/Checkout/_files/quote_with_items_saved.php
- */
- public function testGetCartFromAnotherCustomer()
- {
- $reservedOrderId = 'test_order_item_with_items';
- $this->quoteResource->load(
- $this->quote,
- $reservedOrderId,
- 'reserved_order_id'
- );
- $maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$this->quote->getId());
- $query = $this->prepareGetCartQuery($maskedQuoteId);
- self::expectExceptionMessage("The current user cannot perform operations on cart \"$maskedQuoteId\"");
- $this->graphQlQuery($query);
- }
- /**
- * @magentoApiDataFixture Magento/Checkout/_files/active_quote.php
- */
- public function testGetCartForGuest()
- {
- $reservedOrderId = 'test_order_1';
- $this->quoteResource->load(
- $this->quote,
- $reservedOrderId,
- 'reserved_order_id'
- );
- $maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$this->quote->getId());
- $query = $this->prepareGetCartQuery($maskedQuoteId);
- $response = $this->graphQlQuery($query);
- self::assertArrayHasKey('cart', $response);
- }
- public function testGetNonExistentCart()
- {
- $maskedQuoteId = 'non_existent_masked_id';
- $query = $this->prepareGetCartQuery($maskedQuoteId);
- self::expectExceptionMessage("Could not find a cart with ID \"$maskedQuoteId\"");
- $this->graphQlQuery($query);
- }
- /**
- * Generates query for setting the specified shipping method on cart
- *
- * @param string $maskedQuoteId
- * @return string
- */
- private function prepareGetCartQuery(
- string $maskedQuoteId
- ) : string {
- return <<<QUERY
- {
- cart(cart_id: "$maskedQuoteId") {
- applied_coupon {
- code
- }
- items {
- id
- }
- shipping_addresses {
- firstname,
- lastname
- }
- }
- }
- QUERY;
- }
- /**
- * Sends a GraphQL request with using a bearer token
- *
- * @param string $query
- * @return array
- * @throws \Magento\Framework\Exception\AuthenticationException
- */
- private function sendRequestWithToken(string $query): array
- {
- $customerToken = $this->customerTokenService->createCustomerAccessToken('customer@example.com', 'password');
- $headerMap = ['Authorization' => 'Bearer ' . $customerToken];
- return $this->graphQlQuery($query, [], '', $headerMap);
- }
- }
|