Skip to content
This repository was archived by the owner on Oct 24, 2023. It is now read-only.

Commit dc1a101

Browse files
author
Jens Schulze
committed
feat(Order): support get/update/delete order by orderNumber
Closes #356
1 parent 64f18b8 commit dc1a101

File tree

4 files changed

+268
-1
lines changed

4 files changed

+268
-1
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<?php
2+
/**
3+
* @author @jayS-de <jens.schulze@commercetools.de>
4+
*/
5+
6+
namespace Commercetools\Core\Request\Orders;
7+
8+
use Commercetools\Core\Model\Common\Context;
9+
use Commercetools\Core\Request\AbstractByIdGetRequest;
10+
use Commercetools\Core\Response\ApiResponseInterface;
11+
use Commercetools\Core\Model\Order\Order;
12+
use Commercetools\Core\Model\MapperInterface;
13+
14+
/**
15+
* @package Commercetools\Core\Request\Orders
16+
* @link https://dev.commercetools.com/http-api-projects-orders.html#get-order-by-ordernumber
17+
* @method Order mapResponse(ApiResponseInterface $response)
18+
* @method Order mapFromResponse(ApiResponseInterface $response, MapperInterface $mapper = null)
19+
*/
20+
class OrderByOrderNumberGetRequest extends AbstractByIdGetRequest
21+
{
22+
protected $resultClass = Order::class;
23+
24+
/**
25+
* @param string $orderNumber
26+
* @param Context $context
27+
*/
28+
public function __construct($orderNumber, Context $context = null)
29+
{
30+
parent::__construct(OrdersEndpoint::endpoint(), $orderNumber, $context);
31+
}
32+
33+
/**
34+
* @param string $orderNumber
35+
* @param Context $context
36+
* @return static
37+
*/
38+
public static function ofOrderNumber($orderNumber, Context $context = null)
39+
{
40+
return new static($orderNumber, $context);
41+
}
42+
43+
/**
44+
* @return string
45+
*/
46+
public function getOrderNumber()
47+
{
48+
return $this->getId();
49+
}
50+
51+
/**
52+
* @param string $orderNumber
53+
* @return $this
54+
*/
55+
public function setOrderNumber($orderNumber)
56+
{
57+
return $this->setId($orderNumber);
58+
}
59+
60+
/**
61+
* @return string
62+
* @internal
63+
*/
64+
protected function getPath()
65+
{
66+
return (string)$this->getEndpoint() . '/order-number=' . urlencode($this->getId()) . $this->getParamString();
67+
}
68+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?php
2+
/**
3+
* @author @jayS-de <jens.schulze@commercetools.de>
4+
*/
5+
6+
namespace Commercetools\Core\Request\Orders;
7+
8+
use Commercetools\Core\Model\Common\Context;
9+
use Commercetools\Core\Request\AbstractDeleteRequest;
10+
use Commercetools\Core\Response\ApiResponseInterface;
11+
use Commercetools\Core\Model\Order\Order;
12+
use Commercetools\Core\Model\MapperInterface;
13+
14+
/**
15+
* @package Commercetools\Core\Request\Orders
16+
* @link https://dev.commercetools.com/http-api-projects-orders.html#delete-order-by-ordernumber
17+
* @method Order mapResponse(ApiResponseInterface $response)
18+
* @method Order mapFromResponse(ApiResponseInterface $response, MapperInterface $mapper = null)
19+
*/
20+
class OrderDeleteByOrderNumberRequest extends AbstractDeleteRequest
21+
{
22+
protected $resultClass = Order::class;
23+
24+
/**
25+
* @param string $id
26+
* @param int $version
27+
* @param Context $context
28+
*/
29+
public function __construct($id, $version, Context $context = null)
30+
{
31+
parent::__construct(OrdersEndpoint::endpoint(), $id, $version, $context);
32+
}
33+
34+
/**
35+
* @param string $orderNumber
36+
* @param int $version
37+
* @param Context $context
38+
* @return static
39+
*/
40+
public static function ofOrderNumberAndVersion($orderNumber, $version, Context $context = null)
41+
{
42+
return new static($orderNumber, $version, $context);
43+
}
44+
45+
/**
46+
* @return string
47+
*/
48+
public function getOrderNumber()
49+
{
50+
return $this->getId();
51+
}
52+
53+
/**
54+
* @param string $orderNumber
55+
* @return $this
56+
*/
57+
public function setOrderNumber($orderNumber)
58+
{
59+
return $this->setId($orderNumber);
60+
}
61+
62+
/**
63+
* @return string
64+
* @internal
65+
*/
66+
protected function getPath()
67+
{
68+
return (string)$this->getEndpoint() . '/order-number=' . urlencode($this->getId()) . $this->getParamString();
69+
}
70+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
/**
3+
* @author @jayS-de <jens.schulze@commercetools.de>
4+
*/
5+
6+
namespace Commercetools\Core\Request\Orders;
7+
8+
use Commercetools\Core\Model\Common\Context;
9+
use Commercetools\Core\Request\AbstractUpdateRequest;
10+
use Commercetools\Core\Model\Order\Order;
11+
use Commercetools\Core\Response\ApiResponseInterface;
12+
use Commercetools\Core\Model\MapperInterface;
13+
14+
/**
15+
* @package Commercetools\Core\Request\Orders
16+
* @link https://dev.commercetools.com/http-api-projects-orders.html#update-order-by-ordernumber
17+
* @method Order mapResponse(ApiResponseInterface $response)
18+
* @method Order mapFromResponse(ApiResponseInterface $response, MapperInterface $mapper = null)
19+
*/
20+
class OrderUpdateByOrderNumberRequest extends AbstractUpdateRequest
21+
{
22+
protected $resultClass = Order::class;
23+
24+
/**
25+
* @param string $orderNumber
26+
* @param string $version
27+
* @param array $actions
28+
* @param Context $context
29+
*/
30+
public function __construct($orderNumber, $version, array $actions = [], Context $context = null)
31+
{
32+
parent::__construct(OrdersEndpoint::endpoint(), $orderNumber, $version, $actions, $context);
33+
}
34+
35+
/**
36+
* @param string $orderNumber
37+
* @param int $version
38+
* @param Context $context
39+
* @return static
40+
*/
41+
public static function ofOrderNumberAndVersion($orderNumber, $version, Context $context = null)
42+
{
43+
return new static($orderNumber, $version, [], $context);
44+
}
45+
46+
/**
47+
* @return string
48+
*/
49+
public function getOrderNumber()
50+
{
51+
return $this->getId();
52+
}
53+
54+
/**
55+
* @param string $orderNumber
56+
* @return $this
57+
*/
58+
public function setOrderNumber($orderNumber)
59+
{
60+
return $this->setId($orderNumber);
61+
}
62+
63+
/**
64+
* @return string
65+
* @internal
66+
*/
67+
protected function getPath()
68+
{
69+
return (string)$this->getEndpoint() . '/order-number=' . urlencode($this->getId()) . $this->getParamString();
70+
}
71+
}

tests/integration/Order/OrderUpdateRequestTest.php

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,11 @@
5252
use Commercetools\Core\Request\Orders\Command\OrderSetReturnShipmentStateAction;
5353
use Commercetools\Core\Request\Orders\Command\OrderSetShippingAddress;
5454
use Commercetools\Core\Request\Orders\Command\OrderUpdateSyncInfoAction;
55+
use Commercetools\Core\Request\Orders\OrderByOrderNumberGetRequest;
5556
use Commercetools\Core\Request\Orders\OrderCreateFromCartRequest;
57+
use Commercetools\Core\Request\Orders\OrderDeleteByOrderNumberRequest;
5658
use Commercetools\Core\Request\Orders\OrderDeleteRequest;
59+
use Commercetools\Core\Request\Orders\OrderUpdateByOrderNumberRequest;
5760
use Commercetools\Core\Request\Orders\OrderUpdateRequest;
5861
use Commercetools\Core\Request\Products\Command\ProductPublishAction;
5962
use Commercetools\Core\Request\Products\Command\ProductUnpublishAction;
@@ -95,7 +98,7 @@ protected function getCartDraft()
9598
return $draft;
9699
}
97100

98-
protected function createOrder(CartDraft $draft)
101+
protected function createOrder(CartDraft $draft, $orderNumber = null)
99102
{
100103
$request = CartCreateRequest::ofDraft($draft);
101104
$response = $request->executeWithClient($this->getClient());
@@ -106,6 +109,9 @@ protected function createOrder(CartDraft $draft)
106109
);
107110

108111
$orderRequest = OrderCreateFromCartRequest::ofCartIdAndVersion($cart->getId(), $cart->getVersion());
112+
if (!is_null($orderNumber)) {
113+
$orderRequest->setOrderNumber($orderNumber);
114+
}
109115
$response = $orderRequest->executeWithClient($this->getClient());
110116
$order = $orderRequest->mapResponse($response);
111117
$this->cleanupRequests[] = $this->deleteRequest = OrderDeleteRequest::ofIdAndVersion(
@@ -121,6 +127,58 @@ protected function createOrder(CartDraft $draft)
121127
return $order;
122128
}
123129

130+
public function testOrderByOrderNumber()
131+
{
132+
$cartDraft = $this->getCartDraft();
133+
$orderNumber = (new \DateTime())->format('Y/m/d') . ' ' . $this->getTestRun();
134+
$this->createOrder($cartDraft, $orderNumber);
135+
136+
$request = OrderByOrderNumberGetRequest::ofOrderNumber($orderNumber);
137+
$response = $request->executeWithClient($this->getClient());
138+
$result = $request->mapResponse($response);
139+
140+
$this->assertInstanceOf(Order::class, $result);
141+
}
142+
143+
public function testUpdateOrderByOrderNumber()
144+
{
145+
$cartDraft = $this->getCartDraft();
146+
$orderNumber = (new \DateTime())->format('Y/m/d') . ' ' . $this->getTestRun();
147+
$order = $this->createOrder($cartDraft, $orderNumber);
148+
149+
$this->assertSame(
150+
$this->getProduct()->getProductType()->getId(),
151+
$order->getLineItems()->current()->getProductType()->getId()
152+
);
153+
154+
$request = OrderUpdateByOrderNumberRequest::ofOrderNumberAndVersion($orderNumber, $order->getVersion())
155+
->addAction(OrderChangeOrderStateAction::ofOrderState(OrderState::COMPLETE))
156+
;
157+
$response = $request->executeWithClient($this->getClient());
158+
$result = $request->mapResponse($response);
159+
$this->deleteRequest->setVersion($result->getVersion());
160+
161+
$this->assertNotSame($order->getVersion(), $result->getVersion());
162+
$this->assertInstanceOf(Order::class, $result);
163+
$this->assertSame(OrderState::COMPLETE, $result->getOrderState());
164+
}
165+
166+
public function testDeleteOrderByOrderNumber()
167+
{
168+
$cartDraft = $this->getCartDraft();
169+
$orderNumber = (new \DateTime())->format('Y/m/d') . ' ' . $this->getTestRun();
170+
$order = $this->createOrder($cartDraft, $orderNumber);
171+
172+
$request = OrderDeleteByOrderNumberRequest::ofOrderNumberAndVersion($orderNumber, $order->getVersion());
173+
$response = $request->executeWithClient($this->getClient());
174+
175+
$result = $request->mapResponse($response);
176+
177+
$this->assertFalse($response->isError());
178+
$this->assertInstanceOf(Order::class, $result);
179+
}
180+
181+
124182
public function testChangeState()
125183
{
126184
$cartDraft = $this->getCartDraft();

0 commit comments

Comments
 (0)