/
githubmirror
/
magento2
Обзор
Документация
Войти
/
githubmirror
/
magento2
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
2.4-develop
dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/OrderTest.php
317 строк
20 KB
Alexandra Zota
ACP2E-4019: CE copyright updates for 2.4.9-beta1
22 окт 2025, 10:44
22 окт 2025, 10:44
264bea2
Код
Авторство
О чём код?
<?php /** * Copyright 2015 Adobe * All Rights Reserved. */ declare(strict_types=1); namespace Magento\Sales\Model\ResourceModel; use Magento\Catalog\Api\ProductRepositoryInterface; use Magento\Catalog\Model\Product\Type; use Magento\Catalog\Test\Fixture\Product as ProductFixture; use Magento\Framework\Event\ManagerInterface; use Magento\Framework\Exception\AlreadyExistsException; use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Registry; use Magento\Sales\Api\OrderRepositoryInterface; use Magento\Sales\Model\Order as OrderModel; use Magento\Sales\Model\Order\Address; use Magento\Sales\Model\Order\Item; use Magento\Sales\Model\Order\Payment; use Magento\Sales\Model\ResourceModel\Order\CollectionFactory as OrderCollectionFactory; use Magento\Store\Api\StoreRepositoryInterface; use Magento\Store\Model\StoreManagerInterface; use Magento\TestFramework\Fixture\DataFixture; use Magento\TestFramework\Helper\Bootstrap; use PHPUnit\Framework\TestCase; /** * Test for \Magento\Sales\Model\ResourceModel\Order. * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class OrderTest extends TestCase { /** * @var Order */ private $resourceModel; /** * @var int */ private $orderIncrementId; /** * @var ObjectManagerInterface */ private $objectManager; /** * @var StoreManagerInterface */ private $storeManager; /** * @var StoreRepositoryInterface */ private $storeRepository; /** @var ProductRepositoryInterface */ private $productRepository; /** * @inheritdoc */ protected function setUp(): void { $this->objectManager = Bootstrap::getObjectManager(); $this->resourceModel = $this->objectManager->create(Order::class); $this->orderIncrementId = '100000001'; $this->storeManager = $this->objectManager->get(StoreManagerInterface::class); $this->storeRepository = $this->objectManager->get(StoreRepositoryInterface::class); $this->productRepository = $this->objectManager->get(ProductRepositoryInterface::class); $this->productRepository->cleanCache(); } /** * @inheritdoc */ protected function tearDown(): void { $registry = $this->objectManager->get(Registry::class); $registry->unregister('isSecureArea'); $registry->register('isSecureArea', true); $orderCollection = $this->objectManager->create(OrderCollectionFactory::class)->create(); foreach ($orderCollection as $order) { $order->delete(); } $registry->unregister('isSecureArea'); $registry->register('isSecureArea', false); $defaultStore = $this->storeRepository->get('default'); $this->storeManager->setCurrentStore($defaultStore->getId()); } /** * Test save order * * @magentoDataFixture Magento/Catalog/_files/product_simple.php * @return void * @throws AlreadyExistsException */ public function testSaveOrder(): void { $addressData = [ 'region' => 'CA', 'postcode' => '11111', 'lastname' => 'lastname', 'firstname' => 'firstname', 'street' => 'street', 'city' => 'Los Angeles', 'email' => 'admin@example.com', 'telephone' => '11111111', 'country_id' => 'US' ]; $billingAddress = $this->objectManager->create(Address::class, ['data' => $addressData]); $billingAddress->setAddressType('billing'); $shippingAddress = clone $billingAddress; $shippingAddress->setId(null)->setAddressType('shipping'); $payment = $this->objectManager->create(Payment::class); $payment->setMethod('checkmo'); /** @var Item $orderItem */ $orderItem = $this->objectManager->create(Item::class); $orderItem->setProductId(1) ->setQtyOrdered(2) ->setBasePrice(10) ->setPrice(10) ->setRowTotal(10); /** @var OrderModel $order */ $order = $this->objectManager->create(OrderModel::class); $order->setIncrementId($this->orderIncrementId) ->setState(OrderModel::STATE_PROCESSING) ->setStatus($order->getConfig()->getStateDefaultStatus(OrderModel::STATE_PROCESSING)) ->setSubtotal(100) ->setBaseSubtotal(100) ->setBaseGrandTotal(100) ->setCustomerIsGuest(true) ->setCustomerEmail('customer@null.com') ->setBillingAddress($billingAddress) ->setShippingAddress($shippingAddress) ->setStoreId( $this->objectManager ->get(StoreManagerInterface::class) ->getStore() ->getId() ) ->addItem($orderItem) ->setPayment($payment); $this->resourceModel->save($order); $this->assertNotNull($order->getCreatedAt()); $this->assertNotNull($order->getUpdatedAt()); } /** * Test save order with custom option text field * * @return void * @throws AlreadyExistsException|NoSuchEntityException */ #[ DataFixture( ProductFixture::class, [ 'sku' => 'simple1', 'options' => [ [ 'type' => 'field' ] ], 'price' => 10 ], 'p1' ), ] public function testSaveOrderWithCustomOptionTextField(): void { $addressData = [ 'region' => 'CA', 'postcode' => '11111', 'lastname' => 'lastname', 'firstname' => 'firstname', 'street' => 'street', 'city' => 'Los Angeles', 'email' => 'admin@example.com', 'telephone' => '11111111', 'country_id' => 'US' ]; $billingAddress = $this->objectManager->create(Address::class, ['data' => $addressData]); $billingAddress->setAddressType('billing'); $shippingAddress = clone $billingAddress; $shippingAddress->setId(null)->setAddressType('shipping'); $payment = $this->objectManager->create(Payment::class); $payment->setMethod('checkmo'); $buyRequest = [ 'qty' => 2, 'options' => [ $this->getLongTextOption() ] ]; $product = $this->productRepository->get('simple1'); $orderItemRepository = $this->objectManager->create(\Magento\Sales\Api\OrderItemRepositoryInterface::class); /** @var Item $orderItem */ $orderItem = $this->objectManager->create(Item::class); $orderItem->setProductId($product->getId()) ->setQtyOrdered(2) ->setBasePrice($product->getPrice()) ->setPrice($product->getPrice()) ->setRowTotal(20) ->setProductType(Type::TYPE_SIMPLE) ->setProductOptions(['info_buyRequest' => $buyRequest]); /** @var OrderModel $order */ $order = $this->objectManager->create(OrderModel::class); $order->setIncrementId($this->orderIncrementId) ->setState(OrderModel::STATE_PROCESSING) ->setStatus($order->getConfig()->getStateDefaultStatus(OrderModel::STATE_PROCESSING)) ->setSubtotal(100) ->setBaseSubtotal(100) ->setBaseGrandTotal(100) ->setCustomerIsGuest(true) ->setCustomerEmail('customer@null.com') ->setBillingAddress($billingAddress) ->setShippingAddress($shippingAddress) ->setStoreId( $this->objectManager ->get(StoreManagerInterface::class) ->getStore() ->getId() ) ->addItem($orderItem) ->setPayment($payment); $this->resourceModel->save($order); $this->assertNotNull($order->getCreatedAt()); $this->assertNotNull($order->getUpdatedAt()); $orderRepository = $this->objectManager->create(OrderRepositoryInterface::class); $order = $orderRepository->get($order->getId()); foreach ($order->getItems() as $item) { if ($item->getProductType() === Type::TYPE_SIMPLE) { $orderItem = $orderItemRepository->get($item->getItemId()); $productOptions = $orderItem->getProductOptions(); $infoBuyRequest = $productOptions['info_buyRequest']; $this->assertNotEmpty($infoBuyRequest); $options = current($infoBuyRequest['options']); $this->assertNotEmpty($options); $this->assertEquals(strlen($options), strlen($this->getLongTextOption())); } } } /** * Check that store name and x_forwarded_for with length within 255 chars can be saved in table sales_order * * @magentoDataFixture Magento/Store/_files/store_with_long_name.php * @magentoDbIsolation disabled * @return void * @throws AlreadyExistsException * @throws NoSuchEntityException */ public function testSaveLongNames(): void { $xForwardedFor = str_repeat('x', 255); $store = $this->storeRepository->get('test_2'); $this->storeManager->setCurrentStore($store->getId()); $eventManager = $this->objectManager->get(ManagerInterface::class); $eventManager->dispatch('store_add', ['store' => $store]); $order = $this->objectManager->create(OrderModel::class); $payment = $this->objectManager->create(Payment::class); $payment->setMethod('checkmo'); $order->setStoreId($store->getId()); $order->setXForwardedFor($xForwardedFor); $order->setPayment($payment); $this->resourceModel->save($order); $orderRepository = $this->objectManager->create(OrderRepositoryInterface::class); $order = $orderRepository->get($order->getId()); $this->assertEquals(255, strlen($order->getStoreName())); $this->assertEquals(255, strlen($order->getXForwardedFor())); $this->assertEquals($xForwardedFor, $order->getXForwardedFor()); $this->assertStringContainsString($store->getWebsite()->getName(), $order->getStoreName()); $this->assertStringContainsString($store->getGroup()->getName(), $order->getStoreName()); } /** * Get long text for option */ private function getLongTextOption(): string { // phpcs:disable return <<< HEREDOC Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus m … [Строка слишком длинная. Вы можете скачать файл] HEREDOC; // phpcs:enable } }