Skip to content

Commit ec29a67

Browse files
author
Stanislav Idolov
authored
Merge branch '1.1-develop' into MC-34751
2 parents 171382c + 36a853b commit ec29a67

File tree

2 files changed

+209
-1
lines changed

2 files changed

+209
-1
lines changed

InventorySales/Model/ReturnProcessor/GetInvoicedItemsPerSourceByPriority.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
use Magento\InventorySalesApi\Model\ReturnProcessor\Result\SourceDeductedOrderItemsResultFactory;
2222
use Magento\InventorySalesApi\Model\ReturnProcessor\Result\SourceDeductedOrderItemsResult;
2323

24+
/**
25+
* Class returns invoice items per source with highest priority
26+
*/
2427
class GetInvoicedItemsPerSourceByPriority implements GetSourceDeductedOrderItemsInterface
2528
{
2629
/**
@@ -86,6 +89,8 @@ public function __construct(
8689
}
8790

8891
/**
92+
* Returns invoice items per source with highest priority
93+
*
8994
* @param OrderInterface $order
9095
* @param array $returnToStockItems
9196
* @return SourceDeductedOrderItemsResult[]
@@ -109,6 +114,8 @@ public function execute(OrderInterface $order, array $returnToStockItems): array
109114
}
110115

111116
/**
117+
* Returns source deducted invoice items
118+
*
112119
* @param array $invoicedItems
113120
* @param int $websiteId
114121
* @return SourceDeductedOrderItemsResult[]
@@ -118,7 +125,7 @@ private function getSourceDeductedInvoiceItemsResult(array $invoicedItems, int $
118125
$invoicedItemsToReturn = $result = [];
119126
$stockId = (int)$this->stockByWebsiteIdResolver->execute($websiteId)->getStockId();
120127
foreach ($invoicedItems as $sku => $qty) {
121-
$sourceCode = $this->getSourceCodeWithHighestPriorityBySku($sku, $stockId);
128+
$sourceCode = $this->getSourceCodeWithHighestPriorityBySku((string)$sku, $stockId);
122129
$invoicedItemsToReturn[$sourceCode][] = $this->sourceDeductedOrderItemFactory->create([
123130
'sku' => $sku,
124131
'quantity' => $qty
@@ -136,6 +143,8 @@ private function getSourceDeductedInvoiceItemsResult(array $invoicedItems, int $
136143
}
137144

138145
/**
146+
* Returns source code with highest priority by sku
147+
*
139148
* @param string $sku
140149
* @param int $stockId
141150
* @return string
@@ -156,12 +165,15 @@ private function getSourceCodeWithHighestPriorityBySku(string $sku, int $stockId
156165
}
157166
} catch (LocalizedException $e) {
158167
//Use Default Source if the source can't be resolved
168+
return $sourceCode;
159169
}
160170

161171
return $sourceCode;
162172
}
163173

164174
/**
175+
* Checks valid item
176+
*
165177
* @param OrderItemModel $orderItem
166178
* @param array $returnToStockItems
167179
* @return bool
Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
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+
namespace Magento\InventorySales\Test\Unit\Model\ReturnProcessor;
9+
10+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
11+
use Magento\Sales\Model\Order;
12+
use Magento\Sales\Model\Order\Invoice as InvoiceModel;
13+
use Magento\Sales\Model\Order\Invoice\Item as InvoiceItemModel;
14+
use Magento\Sales\Model\Order\Item as OrderItemModel;
15+
use Magento\InventorySalesApi\Model\GetSkuFromOrderItemInterface;
16+
use Magento\InventoryCatalogApi\Api\DefaultSourceProviderInterface;
17+
use Magento\InventoryApi\Api\GetSourceItemsBySkuInterface;
18+
use Magento\InventoryApi\Api\GetSourcesAssignedToStockOrderedByPriorityInterface;
19+
use Magento\InventorySalesApi\Model\StockByWebsiteIdResolverInterface;
20+
use Magento\InventorySales\Model\ReturnProcessor\GetInvoicedItemsPerSourceByPriority;
21+
use Magento\InventoryApi\Api\Data\StockInterface;
22+
use Magento\InventorySalesApi\Model\ReturnProcessor\Result\SourceDeductedOrderItemFactory;
23+
use Magento\InventorySalesApi\Model\ReturnProcessor\Result\SourceDeductedOrderItem;
24+
use Magento\InventorySalesApi\Model\ReturnProcessor\Result\SourceDeductedOrderItemsResultFactory;
25+
use Magento\InventorySalesApi\Model\ReturnProcessor\Result\SourceDeductedOrderItemsResult;
26+
use Magento\Store\Model\Store;
27+
use PHPUnit\Framework\MockObject\MockObject;
28+
use PHPUnit\Framework\TestCase;
29+
30+
/**
31+
* Test returning invoiced items per source by priority
32+
*
33+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
34+
*/
35+
class GetInvoicedItemsPerSourceByPriorityTest extends TestCase
36+
{
37+
/**
38+
* @var GetInvoicedItemsPerSourceByPriority|MockObject
39+
*/
40+
private $model;
41+
42+
/**
43+
* @var GetSkuFromOrderItemInterface|MockObject
44+
*/
45+
private $getSkuFromOrderItem;
46+
47+
/**
48+
* @var StockByWebsiteIdResolverInterface|MockObject
49+
*/
50+
private $stockByWebsiteIdResolver;
51+
52+
/**
53+
* @var GetSourcesAssignedToStockOrderedByPriorityInterface|MockObject
54+
*/
55+
private $getSourcesAssignedToStockOrderedByPriority;
56+
57+
/**
58+
* @var GetSourceItemsBySkuInterface|MockObject
59+
*/
60+
private $getSourceItemsBySku;
61+
62+
/**
63+
* @var DefaultSourceProviderInterface|MockObject
64+
*/
65+
private $defaultSourceProvider;
66+
67+
/**
68+
* @var SourceDeductedOrderItemFactory|MockObject
69+
*/
70+
private $sourceDeductedOrderItemFactory;
71+
72+
/**
73+
* @var SourceDeductedOrderItemsResultFactory|MockObject
74+
*/
75+
private $sourceDeductedOrderItemsResultFactory;
76+
77+
/**
78+
* @inheritDoc
79+
*/
80+
protected function setUp()
81+
{
82+
parent::setUp();
83+
$objectManager = new ObjectManager($this);
84+
$this->getSkuFromOrderItem = $this->getMockForAbstractClass(GetSkuFromOrderItemInterface::class);
85+
$this->stockByWebsiteIdResolver = $this->getMockForAbstractClass(StockByWebsiteIdResolverInterface::class);
86+
$this->getSourcesAssignedToStockOrderedByPriority = $this->getMockForAbstractClass(
87+
GetSourcesAssignedToStockOrderedByPriorityInterface::class
88+
);
89+
$this->getSourceItemsBySku = $this->getMockForAbstractClass(GetSourceItemsBySkuInterface::class);
90+
$this->defaultSourceProvider = $this->getMockForAbstractClass(DefaultSourceProviderInterface::class);
91+
$this->sourceDeductedOrderItemFactory = $this->createMock(SourceDeductedOrderItemFactory::class);
92+
$this->sourceDeductedOrderItemsResultFactory = $this->createMock(SourceDeductedOrderItemsResultFactory::class);
93+
$this->model = $objectManager->getObject(
94+
GetInvoicedItemsPerSourceByPriority::class,
95+
[
96+
'getSkuFromOrderItem' => $this->getSkuFromOrderItem,
97+
'stockByWebsiteIdResolver' => $this->stockByWebsiteIdResolver,
98+
'getSourcesAssignedToStockOrderedByPriority' => $this->getSourcesAssignedToStockOrderedByPriority,
99+
'getSourceItemsBySku' => $this->getSourceItemsBySku,
100+
'defaultSourceProvider' => $this->defaultSourceProvider,
101+
'sourceDeductedOrderItemFactory' => $this->sourceDeductedOrderItemFactory,
102+
'sourceDeductedOrderItemsResultFactory' => $this->sourceDeductedOrderItemsResultFactory,
103+
]
104+
);
105+
}
106+
107+
/**
108+
* @dataProvider executeDataProvider
109+
* @param array $returnToStockItems
110+
* @param string $itemSku
111+
* @param int $invoiceItemQty
112+
* @param int $websiteId
113+
* @param int $stockId
114+
* @param string $defaultSourceCode
115+
*/
116+
public function testExecute(
117+
array $returnToStockItems,
118+
string $itemSku,
119+
int $invoiceItemQty,
120+
int $websiteId,
121+
int $stockId,
122+
string $defaultSourceCode
123+
): void {
124+
$orderItem = $this->createMock(OrderItemModel::class);
125+
$orderItem->method('getId')->willReturn(1);
126+
$orderItem->method('getIsVirtual')->willReturn(true);
127+
$orderItem->method('isDummy')->willReturn(false);
128+
$invoiceItem = $this->createMock(InvoiceItemModel::class);
129+
$invoiceItem->method('getOrderItem')
130+
->willReturn($orderItem);
131+
$invoiceItem->method('getQty')
132+
->willReturn($invoiceItemQty);
133+
$invoice = $this->createMock(InvoiceModel::class);
134+
$invoice->method('getItems')
135+
->willReturn([$invoiceItem]);
136+
$store = $this->createMock(Store::class);
137+
$store->method('getWebsiteId')
138+
->willReturn($websiteId);
139+
/** @var \Magento\Sales\Model\Order|MockObject $order */
140+
$order = $this->createMock(Order::class);
141+
$order->method('getInvoiceCollection')
142+
->willReturn([$invoice]);
143+
$order->method('getStore')
144+
->willReturn($store);
145+
$this->getSkuFromOrderItem->method('execute')->with($orderItem)
146+
->willReturn($itemSku);
147+
$stock = $this->getMockForAbstractClass(StockInterface::class);
148+
$stock->method('getStockId')
149+
->willReturn($stockId);
150+
$this->stockByWebsiteIdResolver->method('execute')
151+
->willReturn($stock);
152+
$this->defaultSourceProvider->method('getCode')
153+
->willReturn($defaultSourceCode);
154+
$this->getSourceItemsBySku->method('execute')->with($itemSku)
155+
->willReturn([]);
156+
$this->getSourcesAssignedToStockOrderedByPriority->method('execute')->with($stockId)
157+
->willReturn([]);
158+
$sourceDeductedOrderItem = $this->createMock(SourceDeductedOrderItem::class);
159+
$this->sourceDeductedOrderItemFactory->method('create')->with([
160+
'sku' => $itemSku,
161+
'quantity' => $invoiceItemQty
162+
])->willReturn($sourceDeductedOrderItem);
163+
$sourceDeductedOrderItemsResult = $this->createMock(SourceDeductedOrderItemsResult::class);
164+
$this->sourceDeductedOrderItemsResultFactory->method('create')->with([
165+
'sourceCode' => $defaultSourceCode,
166+
'items' => [$sourceDeductedOrderItem]
167+
])->willReturn($sourceDeductedOrderItemsResult);
168+
$actualInvoiceItemsResult = $this->model->execute($order, $returnToStockItems);
169+
$this->assertEquals([$sourceDeductedOrderItemsResult], $actualInvoiceItemsResult);
170+
}
171+
172+
/**
173+
* @return array
174+
*/
175+
public function executeDataProvider(): array
176+
{
177+
return [
178+
[
179+
'returnToStockItems' => [1],
180+
'itemSku' => '321458566',
181+
'invoiceItemQty' => 1,
182+
'websiteId' => 1,
183+
'stockId' => 1,
184+
'defaultSourceCode' => 'default'
185+
],
186+
[
187+
'returnToStockItems' => [1],
188+
'itemSku' => 'SKU-1',
189+
'invoiceItemQty' => 1,
190+
'websiteId' => 1,
191+
'stockId' => 1,
192+
'defaultSourceCode' => 'default'
193+
],
194+
];
195+
}
196+
}

0 commit comments

Comments
 (0)