![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/dev/tests/integration/testsuite/Magento/Quote/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Quote\Model; use Magento\Framework\Api\SearchCriteriaBuilder; use Magento\Quote\Api\CartRepositoryInterface; use Magento\Quote\Api\Data\AddressInterface; use Magento\Quote\Model\Quote\Address\Rate; use Magento\TestFramework\Helper\Bootstrap; /** * Class QuoteValidatorTest. * * @magentoDbIsolation enabled */ class QuoteValidatorTest extends \PHPUnit\Framework\TestCase { /** * @var QuoteValidator */ private $quoteValidator; /** * @inheritdoc */ protected function setUp(): void { $this->quoteValidator = Bootstrap::getObjectManager()->create(QuoteValidator::class); } /** */ public function testValidateBeforeSubmitShippingAddressInvalid() { $this->expectException(\Magento\Framework\Exception\LocalizedException::class); $this->expectExceptionMessage('Please check the shipping address information.'); $quote = $this->getQuote(); $quote->getShippingAddress()->setPostcode(''); $this->quoteValidator->validateBeforeSubmit($quote); } /** */ public function testValidateBeforeSubmitCountryIsNotAllowed() { $this->expectException(\Magento\Framework\Exception\LocalizedException::class); $this->expectExceptionMessage('Some addresses can\'t be used due to the configurations for specific countries.'); /** @magentoConfigFixture does not allow to change the value for the website scope */ Bootstrap::getObjectManager()->get( \Magento\Framework\App\Config\MutableScopeConfigInterface::class )->setValue( 'general/country/allow', 'US', \Magento\Store\Model\ScopeInterface::SCOPE_STORE ); $quote = $this->getQuote(); $quote->getShippingAddress()->setCountryId('AF'); $this->quoteValidator->validateBeforeSubmit($quote); } /** */ public function testValidateBeforeSubmitShippingMethodInvalid() { $this->expectException(\Magento\Framework\Exception\LocalizedException::class); $this->expectExceptionMessage('The shipping method is missing. Select the shipping method and try again.'); $quote = $this->getQuote(); $quote->getShippingAddress()->setShippingMethod('NONE'); $this->quoteValidator->validateBeforeSubmit($quote); } /** */ public function testValidateBeforeSubmitBillingAddressInvalid() { $this->expectException(\Magento\Framework\Exception\LocalizedException::class); $this->expectExceptionMessage('Please check the billing address information.'); $quote = $this->getQuote(); $quote->getBillingAddress()->setTelephone(''); $this->quoteValidator->validateBeforeSubmit($quote); } /** */ public function testValidateBeforeSubmitPaymentMethodInvalid() { $this->expectException(\Magento\Framework\Exception\LocalizedException::class); $this->expectExceptionMessage('Enter a valid payment method and try again.'); $quote = $this->getQuote(); $quote->getPayment()->setMethod(''); $this->quoteValidator->validateBeforeSubmit($quote); } /** * @magentoConfigFixture current_store sales/minimum_order/active 1 * @magentoConfigFixture current_store sales/minimum_order/amount 100 */ public function testValidateBeforeSubmitMinimumAmountInvalid() { $this->expectException(\Magento\Framework\Exception\LocalizedException::class); $quote = $this->getQuote(); $quote->getShippingAddress() ->setBaseSubtotal(0); $this->quoteValidator->validateBeforeSubmit($quote); } /** * @return void */ public function testValidateBeforeSubmitWithoutMinimumOrderAmount() { $this->quoteValidator->validateBeforeSubmit($this->getQuote()); } /** * @magentoConfigFixture current_store sales/minimum_order/active 1 * @magentoConfigFixture current_store sales/minimum_order/amount 100 */ public function testValidateBeforeSubmitWithMinimumOrderAmount() { $quote = $this->getQuote(); $quote->getShippingAddress() ->setBaseSubtotal(200); $this->quoteValidator->validateBeforeSubmit($quote); } /** * Checks a case when the default website has country restrictions and the quote created * for the another website with different country restrictions. * * @magentoDataFixture Magento/Quote/Fixtures/quote_sec_website.php * @magentoDbIsolation disabled */ public function testValidateBeforeSubmit() { $quote = $this->getQuoteById('0000032134'); $this->quoteValidator->validateBeforeSubmit($quote); } /** * @return Quote */ private function getQuote(): Quote { /** @var Quote $quote */ $quote = Bootstrap::getObjectManager()->create(Quote::class); /** @var AddressInterface $billingAddress */ $billingAddress = Bootstrap::getObjectManager()->create(AddressInterface::class); $billingAddress->setFirstname('Joe') ->setLastname('Doe') ->setCountryId('US') ->setRegion('TX') ->setCity('Austin') ->setStreet('1000 West Parmer Line') ->setPostcode('11501') ->setTelephone('123456789'); $quote->setBillingAddress($billingAddress); /** @var AddressInterface $shippingAddress */ $shippingAddress = Bootstrap::getObjectManager()->create(AddressInterface::class); $shippingAddress->setFirstname('Joe') ->setLastname('Doe') ->setCountryId('US') ->setRegion('TX') ->setCity('Austin') ->setStreet('1000 West Parmer Line') ->setPostcode('11501') ->setTelephone('123456789'); $quote->setShippingAddress($shippingAddress); $quote->getShippingAddress() ->setShippingMethod('flatrate_flatrate') ->setCollectShippingRates(true); /** @var Rate $shippingRate */ $shippingRate = Bootstrap::getObjectManager()->create(Rate::class); $shippingRate->setMethod('flatrate') ->setCarrier('flatrate') ->setPrice('5') ->setCarrierTitle('Flat Rate') ->setCode('flatrate_flatrate'); $quote->getShippingAddress() ->addShippingRate($shippingRate); $quote->getPayment()->setMethod('CC'); /** @var QuoteRepository $quoteRepository */ $quoteRepository = Bootstrap::getObjectManager()->create(QuoteRepository::class); $quoteRepository->save($quote); return $quote; } /** * Gets quote entity by reserved order id. * * @param string $reservedOrderId * @return Quote */ private function getQuoteById(string $reservedOrderId): Quote { /** @var SearchCriteriaBuilder $searchCriteriaBuilder */ $searchCriteriaBuilder = Bootstrap::getObjectManager()->get(SearchCriteriaBuilder::class); $searchCriteria = $searchCriteriaBuilder->addFilter('reserved_order_id', $reservedOrderId) ->create(); /** @var CartRepositoryInterface $repository */ $repository = Bootstrap::getObjectManager()->get(CartRepositoryInterface::class); $items = $repository->getList($searchCriteria) ->getItems(); return array_pop($items); } }