Skip to content
This repository has been archived by the owner on Dec 19, 2019. It is now read-only.

Fix message when maxSaleQty is set and qty is more than maxSaleQty #367

Merged
merged 12 commits into from
Mar 6, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\GraphQl\CatalogInventory;

use Magento\TestFramework\Helper\Bootstrap;
use Magento\TestFramework\TestCase\GraphQlAbstract;
use Magento\Quote\Model\QuoteFactory;
use Magento\Quote\Model\QuoteIdToMaskedQuoteIdInterface;
use Magento\Quote\Model\ResourceModel\Quote as QuoteResource;

class AddProductToCartTest extends GraphQlAbstract
{
/**
* @var QuoteResource
*/
private $quoteResource;

/**
* @var QuoteFactory
*/
private $quoteFactory;

/**
* @var QuoteIdToMaskedQuoteIdInterface
*/
private $quoteIdToMaskedId;

/**
* @inheritdoc
*/
protected function setUp()
{
$objectManager = Bootstrap::getObjectManager();
$this->quoteResource = $objectManager->get(QuoteResource::class);
$this->quoteFactory = $objectManager->get(QuoteFactory::class);
$this->quoteIdToMaskedId = $objectManager->get(QuoteIdToMaskedQuoteIdInterface::class);
}

/**
* @magentoApiDataFixture Magento/Catalog/_files/products.php
* @magentoApiDataFixture Magento/Checkout/_files/active_quote.php
* @expectedException \Exception
* @expectedExceptionMessage The requested qty is not available
*/
public function testAddProductIfQuantityIsNotAvailable()
{
$sku = 'simple';
$qty = 200;

$maskedQuoteId = $this->getMaskedQuoteId();
$query = $this->getAddSimpleProductQuery($maskedQuoteId, $sku, $qty);
$this->graphQlQuery($query);
self::fail('Should be "The requested qty is not available" error message.');
}

/**
* @magentoApiDataFixture Magento/Catalog/_files/products.php
* @magentoApiDataFixture Magento/Checkout/_files/active_quote.php
* @magentoConfigFixture default cataloginventory/item_options/max_sale_qty 5
* @expectedException \Exception
* @expectedExceptionMessage The most you may purchase is 5.
*/
public function testAddMoreProductsThatAllowed()
{
$this->markTestIncomplete('https://github.com/magento/graphql-ce/issues/167');

$sku = 'custom-design-simple-product';
$qty = 7;

$maskedQuoteId = $this->getMaskedQuoteId();
$query = $this->getAddSimpleProductQuery($maskedQuoteId, $sku, $qty);
$this->graphQlQuery($query);
self::fail('Should be "The most you may purchase is 5." error message.');
}

/**
* @return string
*/
public function getMaskedQuoteId() : string
{
$quote = $this->quoteFactory->create();
$this->quoteResource->load($quote, 'test_order_1', 'reserved_order_id');

return $this->quoteIdToMaskedId->execute((int)$quote->getId());
}

/**
* @param string $maskedQuoteId
* @param string $sku
* @param int $qty
* @return string
*/
public function getAddSimpleProductQuery(string $maskedQuoteId, string $sku, int $qty) : string
{
return <<<QUERY
mutation {
addSimpleProductsToCart(
input: {
cart_id: "{$maskedQuoteId}",
cartItems: [
{
data: {
qty: $qty
sku: "$sku"
}
}
]
}
) {
cart {
items {
qty
}
}
}
}
QUERY;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

use Magento\TestFramework\Helper\Bootstrap;
use Magento\TestFramework\TestCase\GraphQlAbstract;
use Magento\Quote\Model\Quote;
use Magento\Quote\Model\QuoteFactory;
use Magento\Quote\Model\QuoteIdToMaskedQuoteIdInterface;
use Magento\Quote\Model\ResourceModel\Quote as QuoteResource;

Expand All @@ -21,9 +21,9 @@ class AddSimpleProductToCartTest extends GraphQlAbstract
private $quoteResource;

/**
* @var Quote
* @var QuoteFactory
*/
private $quote;
private $quoteFactory;

/**
* @var QuoteIdToMaskedQuoteIdInterface
Expand All @@ -37,29 +37,48 @@ protected function setUp()
{
$objectManager = Bootstrap::getObjectManager();
$this->quoteResource = $objectManager->get(QuoteResource::class);
$this->quote = $objectManager->create(Quote::class);
$this->quoteFactory = $objectManager->get(QuoteFactory::class);
$this->quoteIdToMaskedId = $objectManager->get(QuoteIdToMaskedQuoteIdInterface::class);
}

/**
* @magentoApiDataFixture Magento/Catalog/_files/products.php
* @magentoApiDataFixture Magento/Checkout/_files/active_quote.php
* @expectedException \Exception
* @expectedExceptionMessage The requested qty is not available
*/
public function testAddProductIfQuantityIsNotAvailable()
public function testAddSimpleProductToCart()
{
$sku = 'simple';
$qty = 200;
$qty = 2;
$maskedQuoteId = $this->getMaskedQuoteId();

$this->quoteResource->load(
$this->quote,
'test_order_1',
'reserved_order_id'
);
$maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$this->quote->getId());
$query = $this->getAddSimpleProductQuery($maskedQuoteId, $sku, $qty);
$response = $this->graphQlQuery($query);
self::assertArrayHasKey('cart', $response['addSimpleProductsToCart']);

$query = <<<QUERY
self::assertEquals($qty, $response['addSimpleProductsToCart']['cart']['items'][0]['qty']);
self::assertEquals($sku, $response['addSimpleProductsToCart']['cart']['items'][0]['product']['sku']);
}

/**
* @return string
*/
public function getMaskedQuoteId() : string
{
$quote = $this->quoteFactory->create();
$this->quoteResource->load($quote, 'test_order_1', 'reserved_order_id');

return $this->quoteIdToMaskedId->execute((int)$quote->getId());
}

/**
* @param string $maskedQuoteId
* @param string $sku
* @param int $qty
* @return string
*/
public function getAddSimpleProductQuery(string $maskedQuoteId, string $sku, int $qty): string
{
return <<<QUERY
mutation {
addSimpleProductsToCart(
input: {
Expand All @@ -77,12 +96,13 @@ public function testAddProductIfQuantityIsNotAvailable()
cart {
items {
qty
product {
sku
}
}
}
}
}
QUERY;

$this->graphQlQuery($query);
}
}