Skip to content

Commit f843686

Browse files
author
Stanislav Idolov
authored
🔃 [EngCom] Public Pull Requests - 2.1-develop
Accepted Public Pull Requests: - #16169: [Backport] #8035 join extension attributes not added to orders (by @Scarraban) Fixed GitHub Issues: - #8035: Join extension attributes are not added to Order results (REST api) (reported by @sterfpaul) has been fixed in #16169 by @Scarraban in 2.1-develop branch Related commits: 1. 032c82d 2. 27bdf61
2 parents cfd6e98 + 2e9ab50 commit f843686

File tree

3 files changed

+68
-2
lines changed

3 files changed

+68
-2
lines changed

app/code/Magento/Sales/Model/OrderRepository.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
namespace Magento\Sales\Model;
77

8+
use Magento\Framework\App\ObjectManager;
89
use Magento\Sales\Model\ResourceModel\Order as Resource;
910
use Magento\Sales\Model\ResourceModel\Metadata;
1011
use Magento\Sales\Model\Order\ShippingAssignmentBuilder;
@@ -16,6 +17,7 @@
1617
use Magento\Framework\Exception\NoSuchEntityException;
1718
use Magento\Framework\Exception\InputException;
1819
use Magento\Framework\Api\SortOrder;
20+
use Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface;
1921

2022
/**
2123
* Repository class for @see OrderInterface
@@ -43,6 +45,11 @@ class OrderRepository implements \Magento\Sales\Api\OrderRepositoryInterface
4345
*/
4446
private $shippingAssignmentBuilder;
4547

48+
/**
49+
* @var JoinProcessorInterface
50+
*/
51+
private $joinProcessor;
52+
4653
/**
4754
* OrderInterface[]
4855
*
@@ -55,13 +62,17 @@ class OrderRepository implements \Magento\Sales\Api\OrderRepositoryInterface
5562
*
5663
* @param Metadata $metadata
5764
* @param SearchResultFactory $searchResultFactory
65+
* @param JoinProcessorInterface|null $joinProcessor
5866
*/
5967
public function __construct(
6068
Metadata $metadata,
61-
SearchResultFactory $searchResultFactory
69+
SearchResultFactory $searchResultFactory,
70+
JoinProcessorInterface $joinProcessor = null
6271
) {
6372
$this->metadata = $metadata;
6473
$this->searchResultFactory = $searchResultFactory;
74+
$this->joinProcessor = $joinProcessor
75+
?: ObjectManager::getInstance()->get(JoinProcessorInterface::class);
6576
}
6677

6778
/**
@@ -116,6 +127,7 @@ public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria)
116127
);
117128
}
118129

130+
$this->joinProcessor->process($searchResult);
119131
$searchResult->setSearchCriteria($searchCriteria);
120132
$searchResult->setCurPage($searchCriteria->getCurrentPage());
121133
$searchResult->setPageSize($searchCriteria->getPageSize());
@@ -186,7 +198,7 @@ private function setShippingAssignments(OrderInterface $order)
186198

187199
/**
188200
* Get the new OrderExtensionFactory for application code
189-
*
201+
*
190202
* @return OrderExtensionFactory
191203
* @deprecated
192204
*/

dev/tests/api-functional/_files/Magento/TestModuleJoinDirectives/etc/extension_attributes.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,16 @@
3131
</join>
3232
</attribute>
3333
</extension_attributes>
34+
<extension_attributes for="Magento\Sales\Api\Data\OrderInterface">
35+
<attribute code="orderApiTestAttribute" type="Magento\User\Api\Data\UserInterface">
36+
<join reference_table="admin_user"
37+
join_on_field="store_id"
38+
reference_field="user_id"
39+
>
40+
<field>firstname</field>
41+
<field>lastname</field>
42+
<field>email</field>
43+
</join>
44+
</attribute>
45+
</extension_attributes>
3446
</config>

dev/tests/api-functional/testsuite/Magento/Webapi/JoinDirectivesTest.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,48 @@ public function testAutoGeneratedGetList()
122122
$this->assertEquals($expectedExtensionAttributes['email'], $testAttribute['email']);
123123
}
124124

125+
/**
126+
* Test get list of orders with extension attributes
127+
*
128+
* @magentoApiDataFixture Magento/Sales/_files/order.php
129+
*/
130+
public function testGetOrderList()
131+
{
132+
$filter = $this->filterBuilder
133+
->setField('increment_id')
134+
->setValue('100000001')
135+
->setConditionType('eq')
136+
->create();
137+
$this->searchBuilder->addFilters([$filter]);
138+
$searchData = $this->searchBuilder->create()->__toArray();
139+
140+
$requestData = ['searchCriteria' => $searchData];
141+
$restResourcePath = '/V1/orders/';
142+
$soapService = 'salesOrderRepositoryV1';
143+
$expectedExtensionAttributes = $this->getExpectedExtensionAttributes();
144+
145+
$serviceInfo = [
146+
'rest' => [
147+
'resourcePath' => $restResourcePath . '?' . http_build_query($requestData),
148+
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
149+
],
150+
'soap' => [
151+
'service' => $soapService,
152+
'operation' => $soapService . 'GetList',
153+
],
154+
];
155+
$searchResult = $this->_webApiCall($serviceInfo, $requestData);
156+
157+
$this->assertArrayHasKey('items', $searchResult);
158+
$itemData = array_pop($searchResult['items']);
159+
$this->assertArrayHasKey('extension_attributes', $itemData);
160+
$this->assertArrayHasKey('order_api_test_attribute', $itemData['extension_attributes']);
161+
$testAttribute = $itemData['extension_attributes']['order_api_test_attribute'];
162+
$this->assertEquals($expectedExtensionAttributes['firstname'], $testAttribute['first_name']);
163+
$this->assertEquals($expectedExtensionAttributes['lastname'], $testAttribute['last_name']);
164+
$this->assertEquals($expectedExtensionAttributes['email'], $testAttribute['email']);
165+
}
166+
125167
/**
126168
* Retrieve the admin user's information.
127169
*

0 commit comments

Comments
 (0)