Skip to content

Commit 8ae9033

Browse files
committed
MAGETWO-56938: CLONE - [Github] API salesOrderRepositoryV1 can't create shipping address #5544
1 parent 32e5b0b commit 8ae9033

File tree

3 files changed

+100
-1
lines changed

3 files changed

+100
-1
lines changed

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,16 @@ public function deleteById($id)
146146
*/
147147
public function save(\Magento\Sales\Api\Data\OrderInterface $entity)
148148
{
149+
/** @var \Magento\Sales\Api\Data\OrderExtensionInterface $extensionAttributes */
150+
$extensionAttributes = $entity->getExtensionAttributes();
151+
if ($entity->getIsNotVirtual() && $extensionAttributes && $extensionAttributes->getShippingAssignments()) {
152+
$shippingAssignments = $extensionAttributes->getShippingAssignments();
153+
if (count($shippingAssignments) === 1) {
154+
$shipping = $shippingAssignments[0]->getShipping();
155+
$entity->setShippingAddress($shipping->getAddress());
156+
$entity->setShippingMethod($shipping->getMethod());
157+
}
158+
}
149159
$this->metadata->getMapper()->save($entity);
150160
$this->registry[$entity->getEntityId()] = $entity;
151161
return $this->registry[$entity->getEntityId()];

app/code/Magento/Sales/Test/Unit/Model/OrderRepositoryTest.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,36 @@ public function testGetList()
110110

111111
$this->assertEquals($collectionMock, $this->model->getList($searchCriteriaMock));
112112
}
113+
114+
public function testSave()
115+
{
116+
$mapperMock = $this->getMockBuilder(\Magento\Sales\Model\ResourceModel\Order::class)
117+
->disableOriginalConstructor()
118+
->getMock();
119+
$orderEntity = $this->getMock(\Magento\Sales\Model\Order::class, [], [], '', false);
120+
$extensionAttributes = $this->getMock(
121+
\Magento\Sales\Api\Data\OrderExtension::class, ['getShippingAssignments'], [], '', false
122+
);
123+
$shippingAssignment = $this->getMockBuilder(\Magento\Sales\Model\Order\ShippingAssignment::class)
124+
->disableOriginalConstructor()
125+
->setMethods(['getShipping'])
126+
->getMock();
127+
$shippingMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Shipping::class)
128+
->disableOriginalConstructor()
129+
->setMethods(['getAddress', 'getMethod'])
130+
->getMock();
131+
$orderEntity->expects($this->once())->method('getExtensionAttributes')->willReturn($extensionAttributes);
132+
$orderEntity->expects($this->once())->method('getIsNotVirtual')->willReturn(true);
133+
$extensionAttributes
134+
->expects($this->any())
135+
->method('getShippingAssignments')
136+
->willReturn([$shippingAssignment]);
137+
$shippingAssignment->expects($this->once())->method('getShipping')->willReturn($shippingMock);
138+
$shippingMock->expects($this->once())->method('getAddress');
139+
$shippingMock->expects($this->once())->method('getMethod');
140+
$this->metadata->expects($this->once())->method('getMapper')->willReturn($mapperMock);
141+
$mapperMock->expects($this->once())->method('save');
142+
$orderEntity->expects($this->any())->method('getEntityId')->willReturn(1);
143+
$this->model->save($orderEntity);
144+
}
113145
}

dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderCreateTest.php

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ protected function prepareOrder()
4141
$orderPaymentFactory = $this->objectManager->get(\Magento\Sales\Model\Order\PaymentFactory::class);
4242
/** @var \Magento\Sales\Model\Order\AddressRepository $orderAddressRepository */
4343
$orderAddressRepository = $this->objectManager->get(\Magento\Sales\Model\Order\AddressRepository::class);
44+
/** @var \Magento\Store\Model\StoreManagerInterface $storeManager */
45+
$storeManager = $this->objectManager->get(\Magento\Store\Model\StoreManagerInterface::class);
4446

4547
$order = $orderFactory->create(
4648
['data' => $this->getDataStructure(\Magento\Sales\Api\Data\OrderInterface::class)]
@@ -68,9 +70,36 @@ protected function prepareOrder()
6870
$order->setCustomerEmail($email);
6971
$order->setBaseGrandTotal(100);
7072
$order->setGrandTotal(100);
73+
$order->setShippingDescription('Flat Rate - Fixed');
74+
$order->setIsVirtual(0);
75+
$order->setStoreId($storeManager->getDefaultStoreView()->getId());
76+
$order->setBaseDiscountAmount(0);
77+
$order->setBaseShippingAmount(5);
78+
$order->setBaseShippingTaxAmount(0);
79+
$order->setBaseSubtotal(100);
80+
$order->setBaseTaxAmount(0);
81+
$order->setBaseToGlobalRate(1);
82+
$order->setBaseToOrderRate(1);
83+
$order->setDiscountAmount(0);
84+
$order->setShippingAmount(0);
85+
$order->setShippingTaxAmount(0);
86+
$order->setStoreToOrderRate(0);
87+
$order->setBaseToOrderRate(0);
88+
$order->setSubtotal(100);
89+
$order->setTaxAmount(0);
90+
$order->setTotalQtyOrdered(1);
91+
$order->setCustomerIsGuest(1);
92+
$order->setCustomerNoteNotify(0);
93+
$order->setCustomerGroupId(0);
94+
$order->setBaseSubtotalInclTax(100);
95+
$order->setWeight(1);
96+
$order->setBaseCurrencyCode('USD');
97+
$order->setShippingInclTax(5);
98+
$order->setBaseShippingInclTax(5);
7199

72100
$this->addProductOption($orderItem);
73101

102+
74103
$order->setItems([$orderItem->getData()]);
75104
$order->setData('payment', $orderPayment->getData());
76105

@@ -82,12 +111,37 @@ protected function prepareOrder()
82111
$orderAddressBilling->setFirstname('First Name');
83112
$orderAddressBilling->setTelephone('+00(000)-123-45-57');
84113
$orderAddressBilling->setStreet(['Street']);
85-
$orderAddressBilling->setCountryId(1);
114+
$orderAddressBilling->setCountryId('US');
115+
$orderAddressBilling->setRegion('California');
86116
$orderAddressBilling->setAddressType('billing');
117+
$orderAddressBilling->setRegionId(12);
118+
119+
$orderAddressShipping = $orderAddressRepository->create();
120+
$orderAddressShipping->setCity('City2');
121+
$orderAddressShipping->setPostcode('12345');
122+
$orderAddressShipping->setLastname('Last Name2');
123+
$orderAddressShipping->setFirstname('First Name2');
124+
$orderAddressShipping->setTelephone('+00(000)-123-45-57');
125+
$orderAddressShipping->setStreet(['Street']);
126+
$orderAddressShipping->setCountryId('US');
127+
$orderAddressShipping->setRegion('California');
128+
$orderAddressShipping->setAddressType('shipping');
129+
$orderAddressShipping->setRegionId(12);
87130

88131
$orderData = $order->getData();
89132
$orderData['billing_address'] = $orderAddressBilling->getData();
90133
$orderData['billing_address']['street'] = ['Street'];
134+
$address = $orderAddressShipping->getData();
135+
$address['street'] = ['Street'];
136+
$orderData['extension_attributes']['shipping_assignments'] =
137+
[
138+
[
139+
'shipping' => [
140+
'address' => $address,
141+
'method' => 'Flat Rate - Fixed'
142+
]
143+
]
144+
];
91145
return $orderData;
92146
}
93147

@@ -172,5 +226,8 @@ public function testOrderCreate()
172226
$this->assertTrue((bool)$model->getId());
173227
$this->assertEquals($order['base_grand_total'], $model->getBaseGrandTotal());
174228
$this->assertEquals($order['grand_total'], $model->getGrandTotal());
229+
$this->assertNotNull($model->getShippingAddress());
230+
$this->assertTrue((bool)$model->getShippingAddress()->getId());
231+
$this->assertEquals('Flat Rate - Fixed', $model->getShippingMethod());
175232
}
176233
}

0 commit comments

Comments
 (0)