From 2d0eecc3e3cab0bd1bf0f2c70d3ff097711d6304 Mon Sep 17 00:00:00 2001 From: Vitaliy Boyko Date: Wed, 3 Apr 2019 15:16:03 +0300 Subject: [PATCH] graphQl-512: added street lines validation --- .../Model/Cart/QuoteAddress/Validator.php | 45 +++++++++++++ .../Model/Cart/QuoteAddressFactory.php | 14 +++- .../Customer/CreateCustomerAddressTest.php | 66 +++++++++++++++++++ .../Customer/SetBillingAddressOnCartTest.php | 43 ++++++++++++ .../Customer/SetShippingAddressOnCartTest.php | 46 +++++++++++++ .../Guest/SetBillingAddressOnCartTest.php | 43 ++++++++++++ .../Guest/SetShippingAddressOnCartTest.php | 44 +++++++++++++ 7 files changed, 300 insertions(+), 1 deletion(-) create mode 100644 app/code/Magento/QuoteGraphQl/Model/Cart/QuoteAddress/Validator.php diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/QuoteAddress/Validator.php b/app/code/Magento/QuoteGraphQl/Model/Cart/QuoteAddress/Validator.php new file mode 100644 index 0000000000000..8cf2478d8f8b6 --- /dev/null +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/QuoteAddress/Validator.php @@ -0,0 +1,45 @@ +addressHelper = $addressHelper; + } + + /** + * Additional Quote Address validation for the GraphQl endpoint + * + * @param QuoteAddress $quoteAddress + * @throws GraphQlInputException + */ + public function validate(QuoteAddress $quoteAddress) + { + $maxAllowedLineCount = $this->addressHelper->getStreetLines(); + if (is_array($quoteAddress->getStreet()) && count($quoteAddress->getStreet()) > $maxAllowedLineCount) { + throw new GraphQlInputException(__('"Street Address" cannot contain more than %1 lines.', $maxAllowedLineCount)); + } + } +} diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/QuoteAddressFactory.php b/app/code/Magento/QuoteGraphQl/Model/Cart/QuoteAddressFactory.php index 76bdc74611131..734843e1be09b 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Cart/QuoteAddressFactory.php +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/QuoteAddressFactory.php @@ -12,6 +12,7 @@ use Magento\Framework\GraphQl\Exception\GraphQlInputException; use Magento\Quote\Model\Quote\Address as QuoteAddress; use Magento\Quote\Model\Quote\AddressFactory as BaseQuoteAddressFactory; +use Magento\QuoteGraphQl\Model\Cart\QuoteAddress\Validator; /** * Create QuoteAddress @@ -22,14 +23,21 @@ class QuoteAddressFactory * @var BaseQuoteAddressFactory */ private $quoteAddressFactory; + /** + * @var Validator + */ + private $quoteAddressValidator; /** * @param BaseQuoteAddressFactory $quoteAddressFactory + * @param Validator $quoteAddressValidator */ public function __construct( - BaseQuoteAddressFactory $quoteAddressFactory + BaseQuoteAddressFactory $quoteAddressFactory, + Validator $quoteAddressValidator ) { $this->quoteAddressFactory = $quoteAddressFactory; + $this->quoteAddressValidator = $quoteAddressValidator; } /** @@ -44,6 +52,8 @@ public function createBasedOnInputData(array $addressInput): QuoteAddress $quoteAddress = $this->quoteAddressFactory->create(); $quoteAddress->addData($addressInput); + $this->quoteAddressValidator->validate($quoteAddress); + return $quoteAddress; } @@ -62,6 +72,8 @@ public function createBasedOnCustomerAddress(CustomerAddress $customerAddress): } catch (LocalizedException $e) { throw new GraphQlInputException(__($e->getMessage()), $e); } + $this->quoteAddressValidator->validate($quoteAddress); + return $quoteAddress; } } diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/CreateCustomerAddressTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/CreateCustomerAddressTest.php index 602d969924fbd..4ea19f08e3c1c 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/CreateCustomerAddressTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/CreateCustomerAddressTest.php @@ -198,6 +198,72 @@ public function testCreateCustomerAddressWithMissingAttribute() $this->graphQlQuery($mutation, [], '', $this->getCustomerAuthHeaders($userName, $password)); } + /** + * @magentoApiDataFixture Magento/Customer/_files/customer_without_addresses.php + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + */ + public function testCreateCustomerAddressWithRedundantStreetLine() + { + $newAddress = [ + 'region' => [ + 'region' => 'Arizona', + 'region_id' => 4, + 'region_code' => 'AZ' + ], + 'country_id' => 'US', + 'street' => ['Line 1 Street', 'Line 2', 'Line 3'], + 'company' => 'Company name', + 'telephone' => '123456789', + 'fax' => '123123123', + 'postcode' => '7777', + 'city' => 'City Name', + 'firstname' => 'Adam', + 'lastname' => 'Phillis', + 'middlename' => 'A', + 'prefix' => 'Mr.', + 'suffix' => 'Jr.', + 'vat_id' => '1', + 'default_shipping' => true, + 'default_billing' => false + ]; + + $mutation + = <<graphQlQuery($mutation, [], '', $this->getCustomerAuthHeaders($userName, $password)); + } + /** * Verify the fields for Customer address * diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/SetBillingAddressOnCartTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/SetBillingAddressOnCartTest.php index 88e7b93dd1d08..2ee5bb6708f4c 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/SetBillingAddressOnCartTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/SetBillingAddressOnCartTest.php @@ -493,6 +493,49 @@ public function testSetBillingAddressWithoutRequiredParameters(string $input, st $this->graphQlQuery($query); } + /** + * @magentoApiDataFixture Magento/Customer/_files/customer.php + * @magentoApiDataFixture Magento/Catalog/_files/product_simple.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php + */ + public function testSetNewBillingAddressWithRedundantStreetLine() + { + $maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote'); + + $query = <<graphQlQuery($query, [], '', $this->getHeaderMap()); + } + /** * @return array */ diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/SetShippingAddressOnCartTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/SetShippingAddressOnCartTest.php index 5ff29d20b34d7..f765851f2372e 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/SetShippingAddressOnCartTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/SetShippingAddressOnCartTest.php @@ -486,6 +486,52 @@ public function testSetMultipleNewShippingAddresses() $this->graphQlQuery($query, [], '', $this->getHeaderMap()); } + /** + * @magentoApiDataFixture Magento/Customer/_files/customer.php + * @magentoApiDataFixture Magento/Catalog/_files/product_simple.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php + */ + public function testSetNewShippingAddressOnCartWithRedundantStreetLine() + { + $maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote'); + + $query = <<graphQlQuery($query, [], '', $this->getHeaderMap()); + } + /** * Verify the all the whitelisted fields for a New Address Object * diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/SetBillingAddressOnCartTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/SetBillingAddressOnCartTest.php index ae0a1a0e822ac..5fe0ae05903c5 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/SetBillingAddressOnCartTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/SetBillingAddressOnCartTest.php @@ -313,6 +313,49 @@ public function testSetBillingAddressWithoutRequiredParameters(string $input, st $this->graphQlQuery($query); } + /** + * @magentoApiDataFixture Magento/Catalog/_files/product_simple.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php + */ + public function testSetNewBillingAddressRedundantStreetLine() + { + $maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote'); + + $query = <<graphQlQuery($query); + } + /** * @return array */ diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/SetShippingAddressOnCartTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/SetShippingAddressOnCartTest.php index e21d9ed64d491..f86b621497200 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/SetShippingAddressOnCartTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/SetShippingAddressOnCartTest.php @@ -246,6 +246,50 @@ public function testSetNewShippingAddressWithMissedRequiredParameters(string $in $this->graphQlQuery($query); } + /** + * @magentoApiDataFixture Magento/Catalog/_files/product_simple.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php + */ + public function testSetNewShippingAddressOnCartWithRedundantStreetLine() + { + $maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote'); + + $query = <<graphQlQuery($query); + } + /** * @return array */