Skip to content

Commit 1542608

Browse files
committed
Test has been added
1 parent c9d0dc5 commit 1542608

File tree

3 files changed

+134
-0
lines changed

3 files changed

+134
-0
lines changed

dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/Invoice/SaveTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,40 @@ private function getOrderItemsQtyInvoiced(int $orderId): array
233233
return $connection->fetchCol($select);
234234
}
235235

236+
/**
237+
* Get order items qty ordered
238+
*
239+
* @param int $orderId
240+
* @return array
241+
*/
242+
private function getOrderItemsQtyOrdered(int $orderId): array
243+
{
244+
$connection = $this->orderItemResource->getConnection();
245+
$select = $connection->select()
246+
->from($this->orderItemResource->getMainTable(), OrderItemInterface::QTY_ORDERED)
247+
->where(OrderItemInterface::ORDER_ID . ' = ?', $orderId);
248+
249+
return $connection->fetchCol($select);
250+
}
251+
252+
/**
253+
* @magentoDataFixture Magento/Sales/_files/order_with_bundle_dynamic_price_no.php
254+
*
255+
* @return void
256+
*/
257+
public function testOrderItemsQtyInvoicedForBundleDynamicPriceFalse(): void
258+
{
259+
$order = $this->getOrder('100000001');
260+
$entityId = $order->getEntityId();
261+
262+
$this->prepareRequest([], ['order_id' => $entityId]);
263+
$this->dispatch('backend/sales/order_invoice/save');
264+
265+
$ordered = $this->getOrderItemsQtyOrdered((int)$entityId);
266+
$invoiced = $this->getOrderItemsQtyInvoiced((int)$entityId);
267+
$this->assertEquals($ordered, $invoiced);
268+
}
269+
236270
/**
237271
* @inheritdoc
238272
*/
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Sales\Api\Data\OrderInterfaceFactory;
9+
use Magento\Sales\Api\Data\OrderItemInterface;
10+
use Magento\Sales\Api\OrderRepositoryInterface;
11+
use Magento\Sales\Model\Order;
12+
use Magento\Sales\Model\Order\Item;
13+
use Magento\TestFramework\ObjectManager;
14+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
15+
16+
Resolver::getInstance()->requireDataFixture('Magento/Sales/_files/order.php');
17+
18+
$objectManager = ObjectManager::getInstance();
19+
/** @var Order $order */
20+
$order = $objectManager->get(OrderInterfaceFactory::class)->create()->loadByIncrementId('100000001');
21+
22+
$orderItems = [
23+
[
24+
OrderItemInterface::SKU => 'bundle_1',
25+
OrderItemInterface::NAME => 'bundle_1',
26+
OrderItemInterface::PRODUCT_ID => 2,
27+
OrderItemInterface::BASE_PRICE => 100,
28+
OrderItemInterface::ORDER_ID => $order->getId(),
29+
OrderItemInterface::QTY_ORDERED => 2,
30+
OrderItemInterface::PRICE => 100,
31+
OrderItemInterface::ROW_TOTAL => 102,
32+
OrderItemInterface::PRODUCT_TYPE => 'bundle',
33+
'product_options' => [
34+
'product_calculations' => 1,
35+
'info_buyRequest' => [
36+
'bundle_option' => [1 => 1],
37+
'bundle_option_qty' => 1,
38+
]
39+
],
40+
'children' => [
41+
[
42+
OrderItemInterface::SKU => 'bundle_simple_1',
43+
OrderItemInterface::NAME => 'bundle_simple_1',
44+
OrderItemInterface::PRODUCT_ID => 13,
45+
OrderItemInterface::ORDER_ID => $order->getId(),
46+
OrderItemInterface::QTY_ORDERED => 10,
47+
OrderItemInterface::BASE_PRICE => 90,
48+
OrderItemInterface::PRICE => 90,
49+
OrderItemInterface::ROW_TOTAL => 92,
50+
OrderItemInterface::PRODUCT_TYPE => 'simple',
51+
'product_options' => [
52+
'bundle_selection_attributes' => '{"qty":5}',
53+
],
54+
],
55+
],
56+
],
57+
];
58+
59+
if (!function_exists('saveOrderItems')) {
60+
/**
61+
* Save Order Items.
62+
*
63+
* @param array $orderItems
64+
* @param Item|null $parentOrderItem [optional]
65+
* @return void
66+
*/
67+
function saveOrderItems(array $orderItems, Order $order, $parentOrderItem = null)
68+
{
69+
$objectManager = ObjectManager::getInstance();
70+
71+
foreach ($orderItems as $orderItemData) {
72+
/** @var Item $orderItem */
73+
$orderItem = $objectManager->create(Item::class);
74+
if (null !== $parentOrderItem) {
75+
$orderItemData['parent_item'] = $parentOrderItem;
76+
}
77+
$orderItem->setData($orderItemData);
78+
$order->addItem($orderItem);
79+
80+
if (isset($orderItemData['children'])) {
81+
saveOrderItems($orderItemData['children'], $order, $orderItem);
82+
}
83+
}
84+
}
85+
}
86+
87+
saveOrderItems($orderItems, $order);
88+
/** @var OrderRepositoryInterface $orderRepository */
89+
$orderRepository = $objectManager->get(OrderRepositoryInterface::class);
90+
$order = $orderRepository->save($order);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
9+
10+
Resolver::getInstance()->requireDataFixture('Magento/Sales/_files/order_rollback.php');

0 commit comments

Comments
 (0)