CartsRestApiCest   A
last analyzed

Complexity

Total Complexity 33

Size/Duplication

Total Lines 1194
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 33
eloc 515
dl 0
loc 1194
rs 9.76
c 0
b 0
f 0

33 Methods

Rating   Name   Duplication   Size   Complexity  
A requestAddItemsToCartWithoutItemSku() 0 33 1
A requestDeleteCartWithoutAuthorizationToken() 0 15 1
A requestDeleteItemsFromCartWithoutAuthorizationToken() 0 25 1
A requestUpdatePriceModeOfNonEmptyCart() 0 42 1
A requestCreateCartWithoutPriceMode() 0 23 1
A requestCarts() 0 31 1
A requestUpdateItemsInCartWithoutCartUuid() 0 28 1
A requestCustomerCartsAuthorizationError() 0 20 1
A requestAddItemsToCartWithoutItemQuantity() 0 33 1
A requestAddItemsToCart() 0 59 1
A requestDeleteItemsFromCartWithoutCartUuid() 0 20 1
A requestAddItemsToCartWithoutAuthorizationToken() 0 33 1
A requestUpdateCartWithoutAuthorizationToken() 0 35 1
A requestDeleteItemsFromCartWithoutItemSku() 0 25 1
A requestCreateCartWithoutPriceCurrency() 0 23 1
A requestUpdateItemsInCartWithoutItemSku() 0 33 1
A requestCustomerCarts() 0 20 1
A requestCartByUuidWithCartItemsRelationship() 0 41 1
A requestCreateCartWithoutAuthorizationToken() 0 21 1
A requestDeleteCartWithoutCartUuid() 0 18 1
A requestCartByUuid() 0 32 1
A requestCreateCart() 0 38 1
A requestCartByUuidWithProductConcreteRelationship() 0 51 1
A loadFixtures() 0 6 1
A requestDeleteCart() 0 15 1
A requestUpdateItemsInCartWithoutQuantity() 0 33 1
A requestUpdateItemsInCartWithoutAuthorizationToken() 0 33 1
A requestUpdateCart() 0 57 1
A requestUpdateCartWithoutCartUuid() 0 30 1
A requestUpdateItemsInCart() 0 46 1
A authorizeCustomer() 0 5 1
A requestDeleteItemsFromCart() 0 25 1
A requestCartByNotExistingCartUuid() 0 13 1
1
<?php
2
3
/**
4
 * This file is part of the Spryker Commerce OS.
5
 * For full license information, please view the LICENSE file that was distributed with this source code.
6
 */
7
8
declare(strict_types = 1);
9
10
namespace PyzTest\Glue\Carts\RestApi;
11
12
use Codeception\Util\HttpCode;
13
use PyzTest\Glue\Carts\CartsApiTester;
14
use PyzTest\Glue\Carts\RestApi\Fixtures\CartsRestApiFixtures;
15
use Spryker\Glue\CartsRestApi\CartsRestApiConfig;
16
use Spryker\Glue\GlueApplication\Rest\RequestConstantsInterface;
17
use Spryker\Glue\ProductsRestApi\ProductsRestApiConfig;
18
use Spryker\Shared\Calculation\CalculationPriceMode;
19
20
/**
21
 * Auto-generated group annotations
22
 *
23
 * @group PyzTest
24
 * @group Glue
25
 * @group Carts
26
 * @group RestApi
27
 * @group CartsRestApiCest
28
 * Add your own group annotations below this line
29
 * @group EndToEnd
30
 */
31
class CartsRestApiCest
32
{
33
    protected CartsRestApiFixtures $fixtures;
34
35
    public function loadFixtures(CartsApiTester $I): void
36
    {
37
        /** @var \PyzTest\Glue\Carts\RestApi\Fixtures\CartsRestApiFixtures $fixtures */
38
        $fixtures = $I->loadFixtures(CartsRestApiFixtures::class);
39
40
        $this->fixtures = $fixtures;
41
    }
42
43
    /**
44
     * @depends loadFixtures
45
     *
46
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
47
     */
48
    public function requestCarts(CartsApiTester $I): void
49
    {
50
        // Arrange
51
        $quoteTransfer = $I->createPersistentQuote(
52
            $I,
53
            $this->fixtures->getCustomerTransfer(),
54
            [],
55
        );
56
        $quoteUuid = $quoteTransfer->getUuid();
57
        $oauthResponseTransfer = $I->haveAuthorizationToGlue($quoteTransfer->getCustomer());
58
        $I->amBearerAuthenticated($oauthResponseTransfer->getAccessToken());
59
60
        // Act
61
        $I->sendGET($I->buildCartsUrl());
62
63
        // Assert
64
        $I->seeResponseCodeIs(HttpCode::OK);
65
        $I->seeResponseIsJson();
66
        $I->seeResponseMatchesOpenApiSchema();
67
68
        $I->amSure('Response data contains resource collection')
69
            ->whenI()
70
            ->seeResponseDataContainsResourceCollectionOfType(CartsRestApiConfig::RESOURCE_CARTS);
0 ignored issues
show
Bug introduced by
It seems like seeResponseDataContainsResourceCollectionOfType() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

70
            ->/** @scrutinizer ignore-call */ seeResponseDataContainsResourceCollectionOfType(CartsRestApiConfig::RESOURCE_CARTS);
Loading history...
71
72
        $I->amSure('Resource collection has resource')
73
            ->whenI()
74
            ->seeResourceCollectionHasResourceWithId($quoteUuid);
0 ignored issues
show
Bug introduced by
It seems like seeResourceCollectionHasResourceWithId() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

74
            ->/** @scrutinizer ignore-call */ seeResourceCollectionHasResourceWithId($quoteUuid);
Loading history...
75
76
        $I->amSure('Resource has correct self-link')
77
            ->whenI()
78
            ->seeResourceByIdHasSelfLink($quoteUuid, $I->buildCartUrl($quoteUuid));
0 ignored issues
show
Bug introduced by
It seems like seeResourceByIdHasSelfLink() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

78
            ->/** @scrutinizer ignore-call */ seeResourceByIdHasSelfLink($quoteUuid, $I->buildCartUrl($quoteUuid));
Loading history...
79
    }
80
81
    /**
82
     * @depends loadFixtures
83
     *
84
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
85
     */
86
    public function requestCartByUuid(CartsApiTester $I): void
87
    {
88
        // Arrange
89
        $quoteTransfer = $I->createPersistentQuote(
90
            $I,
91
            $this->fixtures->getCustomerTransfer(),
92
            [],
93
        );
94
        $quoteUuid = $quoteTransfer->getUuid();
95
        $url = $I->buildCartUrl($quoteUuid);
96
        $oauthResponseTransfer = $I->haveAuthorizationToGlue($quoteTransfer->getCustomer());
97
        $I->amBearerAuthenticated($oauthResponseTransfer->getAccessToken());
98
99
        // Act
100
        $I->sendGET($url);
101
102
        // Assert
103
        $I->seeResponseCodeIs(HttpCode::OK);
104
        $I->seeResponseIsJson();
105
        $I->seeResponseMatchesOpenApiSchema();
106
107
        $I->amSure('The returned resource is of correct type')
108
            ->whenI()
109
            ->seeResponseDataContainsSingleResourceOfType(CartsRestApiConfig::RESOURCE_CARTS);
0 ignored issues
show
Bug introduced by
It seems like seeResponseDataContainsSingleResourceOfType() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

109
            ->/** @scrutinizer ignore-call */ seeResponseDataContainsSingleResourceOfType(CartsRestApiConfig::RESOURCE_CARTS);
Loading history...
110
111
        $I->amSure('The returned resource has correct id')
112
            ->whenI()
113
            ->seeSingleResourceIdEqualTo($quoteUuid);
0 ignored issues
show
Bug introduced by
It seems like seeSingleResourceIdEqualTo() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

113
            ->/** @scrutinizer ignore-call */ seeSingleResourceIdEqualTo($quoteUuid);
Loading history...
114
115
        $I->amSure('The returned resource has correct self-link')
116
            ->whenI()
117
            ->seeSingleResourceHasSelfLink($url);
0 ignored issues
show
Bug introduced by
It seems like seeSingleResourceHasSelfLink() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

117
            ->/** @scrutinizer ignore-call */ seeSingleResourceHasSelfLink($url);
Loading history...
118
    }
119
120
    /**
121
     * @depends loadFixtures
122
     *
123
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
124
     */
125
    public function requestCartByUuidWithCartItemsRelationship(CartsApiTester $I): void
126
    {
127
        // Arrange
128
        $quoteTransfer = $I->createPersistentQuote(
129
            $I,
130
            $this->fixtures->getCustomerTransfer(),
131
            [$this->fixtures->getProductConcreteTransfer()],
132
        );
133
        $cartItemGroupKey = $quoteTransfer->getItems()->offsetGet(0)->getGroupKey();
134
135
        $oauthResponseTransfer = $I->haveAuthorizationToGlue($quoteTransfer->getCustomer());
136
        $I->amBearerAuthenticated($oauthResponseTransfer->getAccessToken());
137
138
        // Act
139
        $I->sendGET($I->buildCartUrl($quoteTransfer->getUuid(), [CartsRestApiConfig::RESOURCE_CART_ITEMS]));
140
141
        // Assert
142
        $I->seeResponseCodeIs(HttpCode::OK);
143
        $I->seeResponseIsJson();
144
        $I->seeResponseMatchesOpenApiSchema();
145
146
        $I->amSure('The returned resource has relationship')
147
            ->whenI()
148
            ->seeSingleResourceHasRelationshipByTypeAndId(
0 ignored issues
show
Bug introduced by
It seems like seeSingleResourceHasRelationshipByTypeAndId() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

148
            ->/** @scrutinizer ignore-call */ seeSingleResourceHasRelationshipByTypeAndId(
Loading history...
149
                CartsRestApiConfig::RESOURCE_CART_ITEMS,
150
                $cartItemGroupKey,
151
            );
152
153
        $I->amSure('The returned resource has include')
154
            ->whenI()
155
            ->seeIncludesContainsResourceByTypeAndId(
0 ignored issues
show
Bug introduced by
It seems like seeIncludesContainsResourceByTypeAndId() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

155
            ->/** @scrutinizer ignore-call */ seeIncludesContainsResourceByTypeAndId(
Loading history...
156
                CartsRestApiConfig::RESOURCE_CART_ITEMS,
157
                $cartItemGroupKey,
158
            );
159
160
        $I->amSure('The include has correct self-link')
161
            ->whenI()
162
            ->seeIncludedResourceByTypeAndIdHasSelfLink(
0 ignored issues
show
Bug introduced by
It seems like seeIncludedResourceByTypeAndIdHasSelfLink() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

162
            ->/** @scrutinizer ignore-call */ seeIncludedResourceByTypeAndIdHasSelfLink(
Loading history...
163
                CartsRestApiConfig::RESOURCE_CART_ITEMS,
164
                $cartItemGroupKey,
165
                $I->buildCartItemUrl($quoteTransfer->getUuid(), $cartItemGroupKey),
166
            );
167
    }
168
169
    /**
170
     * @depends loadFixtures
171
     *
172
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
173
     */
174
    public function requestCartByUuidWithProductConcreteRelationship(CartsApiTester $I): void
175
    {
176
        // Arrange
177
        $quoteTransfer = $I->createPersistentQuote(
178
            $I,
179
            $this->fixtures->getCustomerTransfer(),
180
            [$this->fixtures->getProductConcreteTransfer()],
181
        );
182
        $cartItemGroupKey = $quoteTransfer->getItems()->offsetGet(0)->getGroupKey();
183
        $productConcreteSku = $this->fixtures->getProductConcreteTransfer()->getSku();
184
        $url = $I->buildCartUrl(
185
            $quoteTransfer->getUuid(),
186
            [
187
                CartsRestApiConfig::RESOURCE_CART_ITEMS,
188
                ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS,
189
            ],
190
        );
191
192
        $oauthResponseTransfer = $I->haveAuthorizationToGlue($quoteTransfer->getCustomer());
193
        $I->amBearerAuthenticated($oauthResponseTransfer->getAccessToken());
194
195
        // Act
196
        $I->sendGET($url);
197
198
        // Assert
199
        $I->seeResponseCodeIs(HttpCode::OK);
200
        $I->seeResponseIsJson();
201
        $I->seeResponseMatchesOpenApiSchema();
202
203
        $I->amSure('The included resource has a relationship')
204
            ->whenI()
205
            ->seeIncludedResourceByTypeAndIdHasRelationshipByTypeAndId(
0 ignored issues
show
Bug introduced by
It seems like seeIncludedResourceByTyp...lationshipByTypeAndId() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

205
            ->/** @scrutinizer ignore-call */ seeIncludedResourceByTypeAndIdHasRelationshipByTypeAndId(
Loading history...
206
                CartsRestApiConfig::RESOURCE_CART_ITEMS,
207
                $cartItemGroupKey,
208
                ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS,
209
                $productConcreteSku,
210
            );
211
212
        $I->amSure('The returned resource has include')
213
            ->whenI()
214
            ->seeIncludesContainsResourceByTypeAndId(
215
                ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS,
216
                $productConcreteSku,
217
            );
218
219
        $I->amSure('The include has correct self-link')
220
            ->whenI()
221
            ->seeIncludedResourceByTypeAndIdHasSelfLink(
222
                ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS,
223
                $productConcreteSku,
224
                $I->buildProductConcreteUrl($productConcreteSku),
225
            );
226
    }
227
228
    /**
229
     * @depends loadFixtures
230
     *
231
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
232
     */
233
    public function requestCartByNotExistingCartUuid(CartsApiTester $I): void
234
    {
235
        // Arrange
236
        $oauthResponseTransfer = $I->haveAuthorizationToGlue($this->fixtures->getCustomerTransfer());
237
        $I->amBearerAuthenticated($oauthResponseTransfer->getAccessToken());
238
239
        // Act
240
        $I->sendGET($I->buildCartUrl('NotExistingUuid'));
241
242
        // Assert
243
        $I->seeResponseCodeIs(HttpCode::NOT_FOUND);
244
        $I->seeResponseIsJson();
245
        $I->seeResponseMatchesOpenApiSchema();
246
    }
247
248
    /**
249
     * @depends loadFixtures
250
     *
251
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
252
     */
253
    public function requestCreateCart(CartsApiTester $I): void
254
    {
255
        // Arrange
256
        $this->authorizeCustomer($I);
257
258
        // Act
259
        $I->sendPOST(
260
            CartsRestApiConfig::RESOURCE_CARTS,
261
            [
262
                'data' => [
263
                    'type' => CartsRestApiConfig::RESOURCE_CARTS,
264
                    'attributes' => [
265
                        'priceMode' => CalculationPriceMode::PRICE_MODE_GROSS,
266
                        'currency' => $this->fixtures::CURRENCY_EUR,
267
                        'store' => $this->fixtures::STORE_DE,
268
                        'name' => $this->fixtures::TEST_CART_NAME,
269
                    ],
270
                ],
271
            ],
272
        );
273
274
        // Assert
275
        $I->seeResponseCodeIs(HttpCode::CREATED);
276
        $I->seeResponseMatchesOpenApiSchema();
277
278
        $I->seeSingleResourceHasSelfLink(
279
            $I->formatFullUrl(
280
                '{resourceCarts}/{cartUuid}',
281
                [
282
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
283
                    'cartUuid' => $I->getDataFromResponseByJsonPath('$.data')['id'],
284
                ],
285
            ),
286
        );
287
288
        $I->amSure(sprintf('Returned resource is of type %s', CartsRestApiConfig::RESOURCE_CARTS))
289
            ->whenI()
290
            ->seeResponseDataContainsSingleResourceOfType(CartsRestApiConfig::RESOURCE_CARTS);
291
    }
292
293
    /**
294
     * @depends loadFixtures
295
     *
296
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
297
     */
298
    public function requestCreateCartWithoutAuthorizationToken(CartsApiTester $I): void
299
    {
300
        // Act
301
        $I->sendPOST(
302
            CartsRestApiConfig::RESOURCE_CARTS,
303
            [
304
                'data' => [
305
                    'type' => CartsRestApiConfig::RESOURCE_CARTS,
306
                    'attributes' => [
307
                        'priceMode' => CalculationPriceMode::PRICE_MODE_GROSS,
308
                        'currency' => $this->fixtures::CURRENCY_EUR,
309
                        'store' => $this->fixtures::STORE_DE,
310
                        'name' => $this->fixtures::TEST_CART_NAME,
311
                    ],
312
                ],
313
            ],
314
        );
315
316
        // Assert
317
        $I->seeResponseCodeIs(HttpCode::FORBIDDEN);
318
        $I->seeResponseMatchesOpenApiSchema();
319
    }
320
321
    /**
322
     * @depends loadFixtures
323
     *
324
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
325
     */
326
    public function requestCreateCartWithoutPriceMode(CartsApiTester $I): void
327
    {
328
        // Arrange
329
        $this->authorizeCustomer($I);
330
331
        // Act
332
        $I->sendPOST(
333
            CartsRestApiConfig::RESOURCE_CARTS,
334
            [
335
                'data' => [
336
                    'type' => CartsRestApiConfig::RESOURCE_CARTS,
337
                    'attributes' => [
338
                        'currency' => $this->fixtures::CURRENCY_EUR,
339
                        'store' => $this->fixtures::STORE_DE,
340
                        'name' => $this->fixtures::TEST_CART_NAME,
341
                    ],
342
                ],
343
            ],
344
        );
345
346
        // Assert
347
        $I->seeResponseCodeIs(HttpCode::UNPROCESSABLE_ENTITY);
348
        $I->seeResponseMatchesOpenApiSchema();
349
    }
350
351
    /**
352
     * @depends loadFixtures
353
     *
354
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
355
     */
356
    public function requestCreateCartWithoutPriceCurrency(CartsApiTester $I): void
357
    {
358
        // Arrange
359
        $this->authorizeCustomer($I);
360
361
        // Act
362
        $I->sendPOST(
363
            CartsRestApiConfig::RESOURCE_CARTS,
364
            [
365
                'data' => [
366
                    'type' => CartsRestApiConfig::RESOURCE_CARTS,
367
                    'attributes' => [
368
                        'priceMode' => CalculationPriceMode::PRICE_MODE_GROSS,
369
                        'store' => $this->fixtures::STORE_DE,
370
                        'name' => $this->fixtures::TEST_CART_NAME,
371
                    ],
372
                ],
373
            ],
374
        );
375
376
        // Assert
377
        $I->seeResponseCodeIs(HttpCode::UNPROCESSABLE_ENTITY);
378
        $I->seeResponseMatchesOpenApiSchema();
379
    }
380
381
    /**
382
     * @depends loadFixtures
383
     *
384
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
385
     */
386
    public function requestUpdateCart(CartsApiTester $I): void
387
    {
388
        // Arrange
389
        $this->authorizeCustomer($I);
390
391
        $emptyQuoteTransfer = $I->createPersistentQuote(
392
            $I,
393
            $this->fixtures->getCustomerTransfer(),
394
            [],
395
        );
396
        $entityTag = $I->createCartResourceEntityTag(
397
            $I,
398
            $emptyQuoteTransfer->getUuid(),
399
            $emptyQuoteTransfer->toArray(),
400
        );
401
        $I->haveHttpHeader(RequestConstantsInterface::HEADER_IF_MATCH, $entityTag);
402
        $emptyQuoteUuid = $emptyQuoteTransfer->getUuid();
403
404
        // Act
405
        $I->sendPATCH(
406
            $I->formatUrl(
407
                '{resourceCarts}/{cartUuid}',
408
                [
409
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
410
                    'cartUuid' => $emptyQuoteUuid,
411
                ],
412
            ),
413
            [
414
                'data' => [
415
                    'type' => CartsRestApiConfig::RESOURCE_CARTS,
416
                    'attributes' => [
417
                        'name' => $this->fixtures::TEST_CART_NAME,
418
                        'currency' => $this->fixtures::CURRENCY_EUR,
419
                        'priceMode' => CalculationPriceMode::PRICE_MODE_GROSS,
420
                    ],
421
                ],
422
            ],
423
        );
424
425
        // Assert
426
        $I->seeResponseCodeIs(HttpCode::OK);
427
        $I->seeResponseMatchesOpenApiSchema();
428
429
        $I->amSure('Returned resource has correct id')
430
            ->whenI()
431
            ->seeSingleResourceIdEqualTo($emptyQuoteUuid);
432
433
        $I->amSure(sprintf('Returned resource is of type %s', CartsRestApiConfig::RESOURCE_CARTS))
434
            ->whenI()
435
            ->seeResponseDataContainsSingleResourceOfType(CartsRestApiConfig::RESOURCE_CARTS);
436
437
        $I->seeSingleResourceHasSelfLink(
438
            $I->formatFullUrl(
439
                '{resourceCarts}/{cartUuid}',
440
                [
441
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
442
                    'cartUuid' => $emptyQuoteUuid,
443
                ],
444
            ),
445
        );
446
    }
447
448
    /**
449
     * @depends loadFixtures
450
     *
451
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
452
     */
453
    public function requestUpdatePriceModeOfNonEmptyCart(CartsApiTester $I): void
454
    {
455
        // Arrange
456
        $this->authorizeCustomer($I);
457
        $quoteTransfer = $I->createPersistentQuote(
458
            $I,
459
            $this->fixtures->getCustomerTransfer(),
460
            [$this->fixtures->getProductConcreteTransfer()],
461
        );
462
        $cartUuid = $quoteTransfer->getUuid();
463
        $entityTag = $I->createCartResourceEntityTag(
464
            $I,
465
            $cartUuid,
466
            $quoteTransfer->toArray(),
467
        );
468
469
        $I->haveHttpHeader(RequestConstantsInterface::HEADER_IF_MATCH, $entityTag);
470
471
        // Act
472
        $I->sendPATCH(
473
            $I->formatUrl(
474
                '{resourceCarts}/{cartUuid}',
475
                [
476
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
477
                    'cartUuid' => $cartUuid,
478
                ],
479
            ),
480
            [
481
                'data' => [
482
                    'type' => CartsRestApiConfig::RESOURCE_CARTS,
483
                    'attributes' => [
484
                        'name' => $this->fixtures::TEST_CART_NAME,
485
                        'currency' => $this->fixtures::CURRENCY_EUR,
486
                        'priceMode' => CalculationPriceMode::PRICE_MODE_NET,
487
                    ],
488
                ],
489
            ],
490
        );
491
492
        // Assert
493
        $I->seeResponseCodeIs(HttpCode::UNPROCESSABLE_ENTITY);
494
        $I->seeResponseMatchesOpenApiSchema();
495
    }
496
497
    /**
498
     * @depends loadFixtures
499
     *
500
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
501
     */
502
    public function requestUpdateCartWithoutCartUuid(CartsApiTester $I): void
503
    {
504
        // Arrange
505
        $this->authorizeCustomer($I);
506
        $quoteTransfer = $I->createPersistentQuote(
507
            $I,
508
            $this->fixtures->getCustomerTransfer(),
509
            [],
510
        );
511
        $entityTag = $I->createCartResourceEntityTag($I, $quoteTransfer->getUuid(), $quoteTransfer->toArray());
512
        $I->haveHttpHeader(RequestConstantsInterface::HEADER_IF_MATCH, $entityTag);
513
514
        // Act
515
        $I->sendPATCH(
516
            CartsRestApiConfig::RESOURCE_CARTS,
517
            [
518
                'data' => [
519
                    'type' => CartsRestApiConfig::RESOURCE_CARTS,
520
                    'attributes' => [
521
                        'name' => $this->fixtures::TEST_CART_NAME,
522
                        'currency' => $this->fixtures::CURRENCY_EUR,
523
                        'priceMode' => CalculationPriceMode::PRICE_MODE_GROSS,
524
                    ],
525
                ],
526
            ],
527
        );
528
529
        // Assert
530
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
531
        $I->seeResponseIsJson();
532
    }
533
534
    /**
535
     * @depends loadFixtures
536
     *
537
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
538
     */
539
    public function requestUpdateCartWithoutAuthorizationToken(CartsApiTester $I): void
540
    {
541
        // Arrange
542
        $quoteTransfer = $I->createPersistentQuote(
543
            $I,
544
            $this->fixtures->getCustomerTransfer(),
545
            [],
546
        );
547
        $entityTag = $I->createCartResourceEntityTag($I, $quoteTransfer->getUuid(), $quoteTransfer->toArray());
548
        $I->haveHttpHeader(RequestConstantsInterface::HEADER_IF_MATCH, $entityTag);
549
550
        // Act
551
        $I->sendPATCH(
552
            $I->formatUrl(
553
                '{resourceCarts}/{cartUuid}',
554
                [
555
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
556
                    'cartUuid' => $quoteTransfer->getUuid(),
557
                ],
558
            ),
559
            [
560
                'data' => [
561
                    'type' => CartsRestApiConfig::RESOURCE_CARTS,
562
                    'attributes' => [
563
                        'name' => $this->fixtures::TEST_CART_NAME,
564
                        'currency' => $this->fixtures::CURRENCY_EUR,
565
                        'priceMode' => CalculationPriceMode::PRICE_MODE_GROSS,
566
                    ],
567
                ],
568
            ],
569
        );
570
571
        // Assert
572
        $I->seeResponseCodeIs(HttpCode::FORBIDDEN);
573
        $I->seeResponseMatchesOpenApiSchema();
574
    }
575
576
    /**
577
     * @depends loadFixtures
578
     *
579
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
580
     */
581
    public function requestAddItemsToCart(CartsApiTester $I): void
582
    {
583
        // Arrange
584
        $this->authorizeCustomer($I);
585
        $quoteTransfer = $I->createPersistentQuote(
586
            $I,
587
            $this->fixtures->getCustomerTransfer(),
588
            [],
589
        );
590
        $quoteUuid = $quoteTransfer->getUuid();
591
592
        // Act
593
        $I->sendPOST(
594
            $I->formatUrl(
595
                '{resourceCarts}/{cartUuid}/{resourceCartItems}?include={resourceCartItems}',
596
                [
597
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
598
                    'cartUuid' => $quoteUuid,
599
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
600
                ],
601
            ),
602
            [
603
                'data' => [
604
                    'type' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
605
                    'attributes' => [
606
                        'sku' => $this->fixtures->getProductConcreteTransfer()->getSku(),
607
                        'quantity' => 1,
608
                    ],
609
                ],
610
            ],
611
        );
612
613
        $quoteTransfer = $I->getLocator()->quote()->facade()->findQuoteByUuid($quoteTransfer)->getQuoteTransfer();
614
615
        // Assert
616
        $I->seeResponseCodeIs(HttpCode::CREATED);
617
        $I->seeResponseMatchesOpenApiSchema();
618
619
        $I->amSure('Returned resource has correct id')
620
            ->whenI()
621
            ->seeSingleResourceIdEqualTo($quoteUuid);
622
623
        $I->amSure(sprintf('Returned resource is of type %s', CartsRestApiConfig::RESOURCE_CARTS))
624
            ->whenI()
625
            ->seeResponseDataContainsSingleResourceOfType(CartsRestApiConfig::RESOURCE_CARTS);
626
627
        $I->amSure('Returned resource has include of type items')
628
            ->whenI()
629
            ->seeIncludesContainsResourceByTypeAndId(
630
                CartsRestApiConfig::RESOURCE_CART_ITEMS,
631
                $I->getGroupKeyFromQuote($quoteTransfer, $this->fixtures->getProductConcreteTransfer()->getSku()),
632
            );
633
634
        $I->seeSingleResourceHasSelfLink(
635
            $I->formatFullUrl(
636
                '{resourceCarts}/{cartUuid}',
637
                [
638
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
639
                    'cartUuid' => $I->getDataFromResponseByJsonPath('$.data')['id'],
640
                ],
641
            ),
642
        );
643
    }
644
645
    /**
646
     * @depends loadFixtures
647
     *
648
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
649
     */
650
    public function requestAddItemsToCartWithoutAuthorizationToken(CartsApiTester $I): void
651
    {
652
        // Arrange
653
        $quoteTransfer = $I->createPersistentQuote(
654
            $I,
655
            $this->fixtures->getCustomerTransfer(),
656
            [],
657
        );
658
659
        // Act
660
        $I->sendPOST(
661
            $I->formatUrl(
662
                '{resourceCarts}/{cartUuid}/{resourceCartItems}',
663
                [
664
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
665
                    'cartUuid' => $quoteTransfer->getUuid(),
666
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
667
                ],
668
            ),
669
            [
670
                'data' => [
671
                    'type' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
672
                    'attributes' => [
673
                        'sku' => $this->fixtures->getProductConcreteTransfer()->getSku(),
674
                        'quantity' => 1,
675
                    ],
676
                ],
677
            ],
678
        );
679
680
        // Assert
681
        $I->seeResponseCodeIs(HttpCode::FORBIDDEN);
682
        $I->seeResponseMatchesOpenApiSchema();
683
    }
684
685
    /**
686
     * @depends loadFixtures
687
     *
688
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
689
     */
690
    public function requestAddItemsToCartWithoutItemSku(CartsApiTester $I): void
691
    {
692
        // Arrange
693
        $this->authorizeCustomer($I);
694
        $quoteTransfer = $I->createPersistentQuote(
695
            $I,
696
            $this->fixtures->getCustomerTransfer(),
697
            [],
698
        );
699
700
        // Act
701
        $I->sendPOST(
702
            $I->formatUrl(
703
                '{resourceCarts}/{cartUuid}/{resourceCartItems}',
704
                [
705
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
706
                    'cartUuid' => $quoteTransfer->getUuid(),
707
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
708
                ],
709
            ),
710
            [
711
                'data' => [
712
                    'type' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
713
                    'attributes' => [
714
                        'quantity' => 1,
715
                    ],
716
                ],
717
            ],
718
        );
719
720
        // Assert
721
        $I->seeResponseCodeIs(HttpCode::UNPROCESSABLE_ENTITY);
722
        $I->seeResponseMatchesOpenApiSchema();
723
    }
724
725
    /**
726
     * @depends loadFixtures
727
     *
728
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
729
     */
730
    public function requestAddItemsToCartWithoutItemQuantity(CartsApiTester $I): void
731
    {
732
        // Arrange
733
        $this->authorizeCustomer($I);
734
        $quoteTransfer = $I->createPersistentQuote(
735
            $I,
736
            $this->fixtures->getCustomerTransfer(),
737
            [],
738
        );
739
740
        // Act
741
        $I->sendPOST(
742
            $I->formatUrl(
743
                '{resourceCarts}/{cartUuid}/{resourceCartItems}',
744
                [
745
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
746
                    'cartUuid' => $quoteTransfer->getUuid(),
747
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
748
                ],
749
            ),
750
            [
751
                'data' => [
752
                    'type' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
753
                    'attributes' => [
754
                        'sku' => $this->fixtures->getProductConcreteTransfer()->getSku(),
755
                    ],
756
                ],
757
            ],
758
        );
759
760
        // Assert
761
        $I->seeResponseCodeIs(HttpCode::UNPROCESSABLE_ENTITY);
762
        $I->seeResponseMatchesOpenApiSchema();
763
    }
764
765
    /**
766
     * @depends loadFixtures
767
     *
768
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
769
     */
770
    public function requestUpdateItemsInCart(CartsApiTester $I): void
771
    {
772
        // Arrange
773
        $this->authorizeCustomer($I);
774
775
        $quoteTransfer = $I->createPersistentQuote(
776
            $I,
777
            $this->fixtures->getCustomerTransfer(),
778
            [$this->fixtures->getProductConcreteTransfer()],
779
        );
780
781
        $itemGroupKey = $I->getGroupKeyFromQuote($quoteTransfer, $this->fixtures->getProductConcreteTransfer()->getSku());
782
783
        // Act
784
        $I->sendPATCH(
785
            $I->formatUrl(
786
                '{resourceCarts}/{cartUuid}/{resourceCartItems}/{itemId}?include={resourceCartItems}',
787
                [
788
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
789
                    'cartUuid' => $quoteTransfer->getUuid(),
790
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
791
                    'itemId' => $itemGroupKey,
792
                ],
793
            ),
794
            [
795
                'data' => [
796
                    'type' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
797
                    'attributes' => [
798
                        'quantity' => $this->fixtures::QUANTITY_FOR_ITEM_UPDATE,
799
                    ],
800
                ],
801
            ],
802
        );
803
804
        // Assert
805
        $I->seeResponseCodeIs(HttpCode::OK);
806
        $I->seeResponseMatchesOpenApiSchema();
807
808
        $I->amSure(sprintf('Returned resource is of type %s', CartsRestApiConfig::RESOURCE_CARTS))
809
            ->whenI()
810
            ->seeResponseDataContainsSingleResourceOfType(CartsRestApiConfig::RESOURCE_CARTS);
811
812
        $I->seeCartItemQuantityEqualsToQuantityInRequest(
813
            $this->fixtures::QUANTITY_FOR_ITEM_UPDATE,
814
            CartsRestApiConfig::RESOURCE_CART_ITEMS,
815
            $itemGroupKey,
0 ignored issues
show
Bug introduced by
It seems like $itemGroupKey can also be of type null; however, parameter $itemSku of PyzTest\Glue\Carts\Carts...lsToQuantityInRequest() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

815
            /** @scrutinizer ignore-type */ $itemGroupKey,
Loading history...
816
        );
817
    }
818
819
    /**
820
     * @depends loadFixtures
821
     *
822
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
823
     */
824
    public function requestUpdateItemsInCartWithoutCartUuid(CartsApiTester $I): void
825
    {
826
        // Arrange
827
        $this->authorizeCustomer($I);
828
829
        // Act
830
        $I->sendPATCH(
831
            $I->formatUrl(
832
                '{resourceCarts}//{resourceCartItems}/{cartItemSku}',
833
                [
834
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
835
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
836
                    'cartItemSku' => $this->fixtures->getProductConcreteTransfer()->getSku(),
837
                ],
838
            ),
839
            [
840
                'data' => [
841
                    'type' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
842
                    'attributes' => [
843
                        'quantity' => $this->fixtures::QUANTITY_FOR_ITEM_UPDATE,
844
                    ],
845
                ],
846
            ],
847
        );
848
849
        // Assert
850
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
851
        $I->seeResponseMatchesOpenApiSchema();
852
    }
853
854
    /**
855
     * @depends loadFixtures
856
     *
857
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
858
     */
859
    public function requestUpdateItemsInCartWithoutAuthorizationToken(CartsApiTester $I): void
860
    {
861
        // Arrange
862
        $quoteTransfer = $I->createPersistentQuote(
863
            $I,
864
            $this->fixtures->getCustomerTransfer(),
865
            [$this->fixtures->getProductConcreteTransfer()],
866
        );
867
868
        // Act
869
        $I->sendPATCH(
870
            $I->formatUrl(
871
                '{resourceCarts}/{cartUuid}/{resourceCartItems}/{itemSku}',
872
                [
873
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
874
                    'cartUuid' => $quoteTransfer->getUuid(),
875
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
876
                    'itemSku' => $this->fixtures->getProductConcreteTransfer()->getSku(),
877
                ],
878
            ),
879
            [
880
                'data' => [
881
                    'type' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
882
                    'attributes' => [
883
                        'quantity' => $this->fixtures::QUANTITY_FOR_ITEM_UPDATE,
884
                    ],
885
                ],
886
            ],
887
        );
888
889
        // Assert
890
        $I->seeResponseCodeIs(HttpCode::FORBIDDEN);
891
        $I->seeResponseMatchesOpenApiSchema();
892
    }
893
894
    /**
895
     * @depends loadFixtures
896
     *
897
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
898
     */
899
    public function requestUpdateItemsInCartWithoutQuantity(CartsApiTester $I): void
900
    {
901
        // Arrange
902
        $this->authorizeCustomer($I);
903
        $quoteTransfer = $I->createPersistentQuote(
904
            $I,
905
            $this->fixtures->getCustomerTransfer(),
906
            [$this->fixtures->getProductConcreteTransfer()],
907
        );
908
909
        // Act
910
        $I->sendPATCH(
911
            $I->formatUrl(
912
                '{resourceCarts}/{cartUuid}/{resourceCartItems}/{itemSku}',
913
                [
914
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
915
                    'cartUuid' => $quoteTransfer->getUuid(),
916
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
917
                    'itemSku' => $this->fixtures->getProductConcreteTransfer()->getSku(),
918
                ],
919
            ),
920
            [
921
                'data' => [
922
                    'type' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
923
                    'attributes' => [
924
                    ],
925
                ],
926
            ],
927
        );
928
929
        // Assert
930
        $I->seeResponseCodeIs(HttpCode::UNPROCESSABLE_ENTITY);
931
        $I->seeResponseMatchesOpenApiSchema();
932
    }
933
934
    /**
935
     * @depends loadFixtures
936
     *
937
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
938
     */
939
    public function requestUpdateItemsInCartWithoutItemSku(CartsApiTester $I): void
940
    {
941
        // Arrange
942
        $this->authorizeCustomer($I);
943
        $quoteTransfer = $I->createPersistentQuote(
944
            $I,
945
            $this->fixtures->getCustomerTransfer(),
946
            [$this->fixtures->getProductConcreteTransfer()],
947
        );
948
949
        // Act
950
        $I->sendPATCH(
951
            $I->formatUrl(
952
                '{resourceCarts}/{cartUuid}/{resourceCartItems}',
953
                [
954
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
955
                    'cartUuid' => $quoteTransfer->getUuid(),
956
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
957
                ],
958
            ),
959
            [
960
                'data' => [
961
                    'type' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
962
                    'attributes' => [
963
                        'quantity' => $this->fixtures::QUANTITY_FOR_ITEM_UPDATE,
964
                    ],
965
                ],
966
            ],
967
        );
968
969
        // Assert
970
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
971
        $I->seeResponseIsJson();
972
    }
973
974
    /**
975
     * @depends loadFixtures
976
     *
977
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
978
     */
979
    public function requestDeleteItemsFromCart(CartsApiTester $I): void
980
    {
981
        // Arrange
982
        $this->authorizeCustomer($I);
983
        $quoteTransfer = $I->createPersistentQuote(
984
            $I,
985
            $this->fixtures->getCustomerTransfer(),
986
            [$this->fixtures->getProductConcreteTransfer()],
987
        );
988
989
        // Act
990
        $I->sendDelete(
991
            $I->formatUrl(
992
                '{resourceCarts}/{cartUuid}/{resourceCartItems}/{itemSku}',
993
                [
994
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
995
                    'cartUuid' => $quoteTransfer->getUuid(),
996
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
997
                    'itemSku' => $this->fixtures->getProductConcreteTransfer()->getSku(),
998
                ],
999
            ),
1000
        );
1001
1002
        // Assert
1003
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
1004
    }
1005
1006
    /**
1007
     * @depends loadFixtures
1008
     *
1009
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1010
     */
1011
    public function requestDeleteItemsFromCartWithoutCartUuid(CartsApiTester $I): void
1012
    {
1013
        // Arrange
1014
        $this->authorizeCustomer($I);
1015
1016
        // Act
1017
        $I->sendDelete(
1018
            $I->formatUrl(
1019
                '{resourceCarts}//{resourceCartItems}/{itemSku}',
1020
                [
1021
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
1022
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
1023
                    'itemSku' => $this->fixtures->getProductConcreteTransfer()->getSku(),
1024
                ],
1025
            ),
1026
        );
1027
1028
        // Assert
1029
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
1030
        $I->seeResponseMatchesOpenApiSchema();
1031
    }
1032
1033
    /**
1034
     * @depends loadFixtures
1035
     *
1036
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1037
     */
1038
    public function requestDeleteItemsFromCartWithoutAuthorizationToken(CartsApiTester $I): void
1039
    {
1040
        // Arrange
1041
        $quoteTransfer = $I->createPersistentQuote(
1042
            $I,
1043
            $this->fixtures->getCustomerTransfer(),
1044
            [$this->fixtures->getProductConcreteTransfer()],
1045
        );
1046
1047
        // Act
1048
        $I->sendDelete(
1049
            $I->formatUrl(
1050
                '{resourceCarts}/{cartUuid}/{resourceCartItems}/{itemSku}',
1051
                [
1052
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
1053
                    'cartUuid' => $quoteTransfer->getUuid(),
1054
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
1055
                    'itemSku' => $this->fixtures->getProductConcreteTransfer()->getSku(),
1056
                ],
1057
            ),
1058
        );
1059
1060
        // Assert
1061
        $I->seeResponseCodeIs(HttpCode::FORBIDDEN);
1062
        $I->seeResponseMatchesOpenApiSchema();
1063
    }
1064
1065
    /**
1066
     * @depends loadFixtures
1067
     *
1068
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1069
     */
1070
    public function requestDeleteItemsFromCartWithoutItemSku(CartsApiTester $I): void
1071
    {
1072
        // Arrange
1073
        $this->authorizeCustomer($I);
1074
        $quoteTransfer = $I->createPersistentQuote(
1075
            $I,
1076
            $this->fixtures->getCustomerTransfer(),
1077
            [$this->fixtures->getProductConcreteTransfer()],
1078
        );
1079
1080
        // Act
1081
        $I->sendDelete(
1082
            $I->formatUrl(
1083
                '{resourceCarts}/{cartUuid}/{resourceCartItems}',
1084
                [
1085
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
1086
                    'cartUuid' => $quoteTransfer->getUuid(),
1087
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
1088
                ],
1089
            ),
1090
        );
1091
1092
        // Assert
1093
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
1094
        $I->seeResponseIsJson();
1095
    }
1096
1097
    /**
1098
     * @depends loadFixtures
1099
     *
1100
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1101
     */
1102
    public function requestDeleteCart(CartsApiTester $I): void
1103
    {
1104
        // Arrange
1105
        $this->authorizeCustomer($I);
1106
        $quoteTransfer = $I->createPersistentQuote(
1107
            $I,
1108
            $this->fixtures->getCustomerTransfer(),
1109
            [],
1110
        );
1111
1112
        // Act
1113
        $I->sendDelete($I->buildCartUrl($quoteTransfer->getUuid()));
1114
1115
        // Assert
1116
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
1117
    }
1118
1119
    /**
1120
     * @depends loadFixtures
1121
     *
1122
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1123
     */
1124
    public function requestDeleteCartWithoutCartUuid(CartsApiTester $I): void
1125
    {
1126
        // Arrange
1127
        $this->authorizeCustomer($I);
1128
1129
        // Act
1130
        $I->sendDelete(
1131
            $I->formatUrl(
1132
                '{resourceCarts}',
1133
                [
1134
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
1135
                ],
1136
            ),
1137
        );
1138
1139
        // Assert
1140
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
1141
        $I->seeResponseIsJson();
1142
    }
1143
1144
    /**
1145
     * @depends loadFixtures
1146
     *
1147
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1148
     */
1149
    public function requestDeleteCartWithoutAuthorizationToken(CartsApiTester $I): void
1150
    {
1151
        // Arrange
1152
        $quoteTransfer = $I->createPersistentQuote(
1153
            $I,
1154
            $this->fixtures->getCustomerTransfer(),
1155
            [],
1156
        );
1157
1158
        // Act
1159
        $I->sendDelete($I->buildCartUrl($quoteTransfer->getUuid()));
1160
1161
        // Assert
1162
        $I->seeResponseCodeIs(HttpCode::FORBIDDEN);
1163
        $I->seeResponseMatchesOpenApiSchema();
1164
    }
1165
1166
    /**
1167
     * @depends loadFixtures
1168
     *
1169
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1170
     */
1171
    public function requestCustomerCarts(CartsApiTester $I): void
1172
    {
1173
        // Arrange
1174
        $quoteTransfer = $I->createPersistentQuote(
1175
            $I,
1176
            $this->fixtures->getCustomerTransfer(),
1177
            [],
1178
        );
1179
1180
        $url = $I->buildCustomerCartUrl($quoteTransfer->getCustomer()->getCustomerReference());
1181
1182
        $oauthResponseTransfer = $I->haveAuthorizationToGlue($quoteTransfer->getCustomer());
1183
        $I->amBearerAuthenticated($oauthResponseTransfer->getAccessToken());
1184
1185
        // Act
1186
        $I->sendGET($url);
1187
1188
        // Assert
1189
        $I->seeResponseCodeIs(HttpCode::OK);
1190
        $I->seeResponseMatchesOpenApiSchema();
1191
    }
1192
1193
    /**
1194
     * @depends loadFixtures
1195
     *
1196
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1197
     */
1198
    public function requestCustomerCartsAuthorizationError(CartsApiTester $I): void
1199
    {
1200
        // Arrange
1201
        $quoteTransfer = $I->createPersistentQuote(
1202
            $I,
1203
            $this->fixtures->getCustomerTransfer(),
1204
            [],
1205
        );
1206
1207
        $url = $I->buildCustomerCartUrl('wrongCustomerReference');
1208
1209
        $oauthResponseTransfer = $I->haveAuthorizationToGlue($quoteTransfer->getCustomer());
1210
        $I->amBearerAuthenticated($oauthResponseTransfer->getAccessToken());
1211
1212
        // Act
1213
        $I->sendGET($url);
1214
1215
        // Assert
1216
        $I->seeResponseCodeIs(HttpCode::FORBIDDEN);
1217
        $I->seeResponseMatchesOpenApiSchema();
1218
    }
1219
1220
    protected function authorizeCustomer(CartsApiTester $I): void
1221
    {
1222
        $token = $I->haveAuthorizationToGlue($this->fixtures->getCustomerTransfer())->getAccessToken();
1223
1224
        $I->amBearerAuthenticated($token);
1225
    }
1226
}
1227