![]() 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\FilterBuilder; use Magento\Framework\Api\SearchCriteria; use Magento\Framework\Api\SearchCriteriaBuilder; use Magento\Framework\ObjectManagerInterface; use Magento\Quote\Api\CartRepositoryInterface; use Magento\Quote\Api\Data\AddressInterfaceFactory; use Magento\Quote\Api\Data\CartExtension; use Magento\Quote\Api\Data\CartInterface; use Magento\Quote\Api\Data\CartInterfaceFactory; use Magento\Quote\Api\Data\CartItemInterfaceFactory; use Magento\Quote\Api\Data\CartSearchResultsInterface; use Magento\Quote\Api\Data\ShippingAssignmentInterface; use Magento\Quote\Api\Data\ShippingInterface; use Magento\Quote\Model\Quote\Address as QuoteAddress; use Magento\Store\Api\StoreRepositoryInterface; use Magento\TestFramework\Helper\Bootstrap as BootstrapHelper; use Magento\TestFramework\Quote\Model\GetQuoteByReservedOrderId; use PHPUnit\Framework\TestCase; /** * Test for quote repository * * @see \Magento\Quote\Model\QuoteRepository * @magentoDbIsolation enabled * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class QuoteRepositoryTest extends TestCase { /** * @var ObjectManagerInterface */ private $objectManager; /** * @var CartRepositoryInterface */ private $quoteRepository; /** * @var SearchCriteriaBuilder */ private $searchCriteriaBuilder; /** * @var FilterBuilder */ private $filterBuilder; /** * @var GetQuoteByReservedOrderId */ private $getQuoteByReservedOrderId; /** * @var StoreRepositoryInterface */ private $storeRepository; /** * @var AddressInterfaceFactory */ private $addressFactory; /** * @var CartInterfaceFactory */ private $quoteFactory; /** * @var CartItemInterfaceFactory */ private $itemFactory; /** * @var CartInterface|null */ private $quote; /** * @inheritdoc */ protected function setUp(): void { parent::setUp(); $this->objectManager = BootstrapHelper::getObjectManager(); $this->quoteRepository = $this->objectManager->create(CartRepositoryInterface::class); $this->searchCriteriaBuilder = $this->objectManager->get(SearchCriteriaBuilder::class); $this->filterBuilder = $this->objectManager->get(FilterBuilder::class); $this->getQuoteByReservedOrderId = $this->objectManager->get(GetQuoteByReservedOrderId::class); $this->storeRepository = $this->objectManager->get(StoreRepositoryInterface::class); $this->addressFactory = $this->objectManager->get(AddressInterfaceFactory::class); $this->quoteFactory = $this->objectManager->get(CartInterfaceFactory::class); $this->itemFactory = $this->objectManager->get(CartItemInterfaceFactory::class); } /** * @inheritdoc */ protected function tearDown(): void { if ($this->quote instanceof CartInterface) { $this->quoteRepository->delete($this->quote); } parent::tearDown(); } /** * Tests that quote saved with custom store id has same store id after getting via repository. * * @magentoDataFixture Magento/Sales/_files/quote.php * @magentoDataFixture Magento/Store/_files/second_store.php * * @return void */ public function testGetQuoteWithCustomStoreId(): void { $secondStoreCode = 'fixture_second_store'; $reservedOrderId = 'test01'; $secondStore = $this->storeRepository->get($secondStoreCode); $quote = $this->getQuoteByReservedOrderId->execute($reservedOrderId); $quote->setStoreId($secondStore->getId()); $this->quoteRepository->save($quote); $savedQuote = $this->quoteRepository->get($quote->getId()); $this->assertEquals( $secondStore->getId(), $savedQuote->getStoreId(), 'Quote store id should be equal with store id value in DB' ); } /** * @magentoDataFixture Magento/Sales/_files/quote.php * * @return void */ public function testGetList(): void { $searchCriteria = $this->getSearchCriteria('test01'); $searchResult = $this->quoteRepository->getList($searchCriteria); $this->performAssertions($searchResult); } /** * @magentoDataFixture Magento/Sales/_files/quote.php * * @return void */ public function testGetListDoubleCall(): void { $searchCriteria1 = $this->getSearchCriteria('test01'); $searchCriteria2 = $this->getSearchCriteria('test02'); $searchResult = $this->quoteRepository->getList($searchCriteria1); $this->performAssertions($searchResult); $searchResult = $this->quoteRepository->getList($searchCriteria2); $this->assertEmpty($searchResult->getItems()); } /** * @magentoAppIsolation enabled * * @return void */ public function testSaveWithNotExistingCustomerAddress(): void { $addressData = include __DIR__ . '/../../Sales/_files/address_data.php'; $billingAddress = $this->addressFactory->create(['data' => $addressData]); $billingAddress->setAddressType(QuoteAddress::ADDRESS_TYPE_BILLING)->setCustomerAddressId('not_existing'); $shippingAddress = $this->addressFactory->create(['data' => $addressData]); $shippingAddress->setAddressType(QuoteAddress::ADDRESS_TYPE_SHIPPING)->setCustomerAddressId('not_existing'); $shipping = $this->objectManager->get(ShippingInterface::class); $shipping->setAddress($shippingAddress); $shippingAssignment = $this->objectManager->get(ShippingAssignmentInterface::class); $shippingAssignment->setItems([]); $shippingAssignment->setShipping($shipping); $extensionAttributes = $this->objectManager->get(CartExtension::class); $extensionAttributes->setShippingAssignments([$shippingAssignment]); $this->quote = $this->quoteFactory->create(); $this->quote->setStoreId(1) ->setIsActive(true) ->setIsMultiShipping(0) ->setBillingAddress($billingAddress) ->setShippingAddress($shippingAddress) ->setExtensionAttributes($extensionAttributes) ->save(); $this->quoteRepository->save($this->quote); $this->assertNull($this->quote->getBillingAddress()->getCustomerAddressId()); $this->assertNull( $this->quote->getExtensionAttributes() ->getShippingAssignments()[0] ->getShipping() ->getAddress() ->getCustomerAddressId() ); } /** * @magentoDataFixture Magento/Catalog/_files/multiple_products.php * * @return void */ public function testSaveQuoteWithItems(): void { $items = $this->prepareQuoteItems(['simple1', 'simple2']); $this->quote = $this->quoteFactory->create(); $this->quote->setItems($items); $this->quoteRepository->save($this->quote); $this->assertCount(2, $this->quote->getItemsCollection()); $this->assertEquals(2, $this->quote->getItemsCount()); $this->assertEquals(2, $this->quote->getItemsQty()); } /** * Prepare quote items by products sku. * * @param array $productsSku * @return array */ private function prepareQuoteItems(array $productsSku): array { $items = []; foreach ($productsSku as $sku) { $item = $this->itemFactory->create(); $item->setSku($sku)->setQty(1); $items[] = $item; } return $items; } /** * Get search criteria * * @param string $filterValue * @return SearchCriteria */ private function getSearchCriteria(string $filterValue): SearchCriteria { $filters = []; $filters[] = $this->filterBuilder->setField('reserved_order_id') ->setConditionType('=') ->setValue($filterValue) ->create(); $this->searchCriteriaBuilder->addFilters($filters); return $this->searchCriteriaBuilder->create(); } /** * Perform assertions * * @param CartSearchResultsInterface $searchResult * @return void */ private function performAssertions(CartSearchResultsInterface $searchResult): void { $expectedExtensionAttributes = [ 'firstname' => 'firstname', 'lastname' => 'lastname', 'email' => '[email protected]', ]; $items = $searchResult->getItems(); $actualQuote = array_pop($items); $testAttribute = $actualQuote->getExtensionAttributes()->getQuoteTestAttribute(); $this->assertInstanceOf(CartInterface::class, $actualQuote); $this->assertEquals('test01', $actualQuote->getReservedOrderId()); $this->assertEquals($expectedExtensionAttributes['firstname'], $testAttribute->getFirstName()); $this->assertEquals($expectedExtensionAttributes['lastname'], $testAttribute->getLastName()); $this->assertEquals($expectedExtensionAttributes['email'], $testAttribute->getEmail()); } }