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

Commit b263181

Browse files
committed
feat(InStore): allow only valid in-store endpoints
1 parent 9cc6a85 commit b263181

File tree

3 files changed

+119
-1
lines changed

3 files changed

+119
-1
lines changed

src/Core/Request/InStores/InStoreRequestDecorator.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
namespace Commercetools\Core\Request\InStores;
77

8+
use Commercetools\Core\Error\InvalidArgumentException;
89
use Commercetools\Core\Model\Common\Context;
910
use Commercetools\Core\Model\MapperInterface;
1011
use Commercetools\Core\Request\ClientRequestInterface;
@@ -25,7 +26,10 @@ class InStoreRequestDecorator implements ClientRequestInterface
2526
*/
2627
public function __construct($storeKey, ClientRequestInterface $request)
2728
{
28-
//
29+
if (!InStoreRequests::of()->can(get_class($request))) {
30+
throw new InvalidArgumentException('In-store request is not available in: ' . get_class($request));
31+
}
32+
2933
$this->request = $request;
3034
$this->endpoint = InStoreEndpoint::endpoint($storeKey);
3135
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?php
2+
/**
3+
*
4+
*/
5+
6+
namespace Commercetools\Core\Request\InStores;
7+
8+
9+
use Commercetools\Core\Request\Carts\CartByCustomerIdGetRequest;
10+
use Commercetools\Core\Request\Carts\CartByIdGetRequest;
11+
use Commercetools\Core\Request\Carts\CartCreateRequest;
12+
use Commercetools\Core\Request\Carts\CartDeleteRequest;
13+
use Commercetools\Core\Request\Carts\CartQueryRequest;
14+
use Commercetools\Core\Request\Carts\CartUpdateRequest;
15+
use Commercetools\Core\Request\Me\MeActiveCartRequest;
16+
use Commercetools\Core\Request\Me\MeCartByIdRequest;
17+
use Commercetools\Core\Request\Me\MeCartCreateRequest;
18+
use Commercetools\Core\Request\Me\MeCartDeleteRequest;
19+
use Commercetools\Core\Request\Me\MeCartQueryRequest;
20+
use Commercetools\Core\Request\Me\MeCartUpdateRequest;
21+
use Commercetools\Core\Request\Me\MeOrderByIdRequest;
22+
use Commercetools\Core\Request\Me\MeOrderCreateFromCartRequest;
23+
use Commercetools\Core\Request\Me\MeOrderQueryRequest;
24+
use Commercetools\Core\Request\Orders\OrderByIdGetRequest;
25+
use Commercetools\Core\Request\Orders\OrderByOrderNumberGetRequest;
26+
use Commercetools\Core\Request\Orders\OrderCreateFromCartRequest;
27+
use Commercetools\Core\Request\Orders\OrderDeleteByOrderNumberRequest;
28+
use Commercetools\Core\Request\Orders\OrderDeleteRequest;
29+
use Commercetools\Core\Request\Orders\OrderQueryRequest;
30+
use Commercetools\Core\Request\Orders\OrderUpdateByOrderNumberRequest;
31+
use Commercetools\Core\Request\Orders\OrderUpdateRequest;
32+
33+
class InStoreRequests
34+
{
35+
private $requests = [
36+
CartByIdGetRequest::class => 1,
37+
CartByCustomerIdGetRequest::class => 1,
38+
CartQueryRequest::class => 1,
39+
CartCreateRequest::class => 1,
40+
CartUpdateRequest::class => 1,
41+
CartDeleteRequest::class => 1,
42+
MeCartByIdRequest::class => 1,
43+
MeActiveCartRequest::class => 1,
44+
MeCartQueryRequest::class => 1,
45+
MeCartCreateRequest::class => 1,
46+
MeCartUpdateRequest::class => 1,
47+
MeCartDeleteRequest::class => 1,
48+
OrderByIdGetRequest::class => 1,
49+
OrderByOrderNumberGetRequest::class => 1,
50+
OrderQueryRequest::class => 1,
51+
OrderCreateFromCartRequest::class => 1,
52+
OrderUpdateRequest::class => 1,
53+
OrderUpdateByOrderNumberRequest::class => 1,
54+
OrderDeleteRequest::class => 1,
55+
OrderDeleteByOrderNumberRequest::class => 1,
56+
MeOrderByIdRequest::class => 1,
57+
MeOrderQueryRequest::class => 1,
58+
MeOrderCreateFromCartRequest::class => 1,
59+
];
60+
61+
public function can($request)
62+
{
63+
return isset($this->requests[$request]);
64+
}
65+
66+
public static function of()
67+
{
68+
return new static();
69+
}
70+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
/**
3+
*
4+
*/
5+
6+
namespace Commercetools\Core\Request\InStores;
7+
8+
use Commercetools\Core\Error\InvalidArgumentException;
9+
use Commercetools\Core\Request\Carts\CartByIdGetRequest;
10+
use Commercetools\Core\Request\Customers\CustomerByIdGetRequest;
11+
use Commercetools\Core\Request\Orders\OrderByIdGetRequest;
12+
use Commercetools\Core\RequestTestCase;
13+
14+
class InStoreRequestDecoratorTest extends RequestTestCase
15+
{
16+
const IN_STORE_REQUEST_DECORATOR = InStoreRequestDecorator::class;
17+
18+
public function testHttpRequestWithCart()
19+
{
20+
$request = CartByIdGetRequest::ofId('cart-id');
21+
$inStoreRequest = InStoreRequestDecorator::ofStoreAndRequest('store-key', $request);
22+
23+
$decoratedRequest = $inStoreRequest->httpRequest();
24+
$this->assertSame('in-store/key=store-key/carts/cart-id', (string)$decoratedRequest->getUri());
25+
}
26+
27+
public function testHttpRequestWithOrder()
28+
{
29+
$request = OrderByIdGetRequest::ofId('order-id');
30+
$inStoreRequest = InStoreRequestDecorator::ofStoreAndRequest('store-key', $request);
31+
32+
$decoratedRequest = $inStoreRequest->httpRequest();
33+
$this->assertSame('in-store/key=store-key/orders/order-id', (string)$decoratedRequest->getUri());
34+
}
35+
36+
/**
37+
* @expectedException InvalidArgumentException
38+
*/
39+
public function testInvalidRequest()
40+
{
41+
$request = CustomerByIdGetRequest::ofId('customer');
42+
InStoreRequestDecorator::ofStoreAndRequest('store-key', $request);
43+
}
44+
}

0 commit comments

Comments
 (0)