requestUpdateItemsInCartWithoutCartUuid()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 28
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 13
dl 0
loc 28
rs 9.8333
c 0
b 0
f 0
cc 1
nc 1
nop 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 Generated\Shared\Transfer\CustomerTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\CustomerTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
14
use PyzTest\Glue\Carts\CartsApiTester;
15
use PyzTest\Glue\Carts\RestApi\Fixtures\CartsRestApiFixtures;
16
use Spryker\Glue\CartsRestApi\CartsRestApiConfig;
17
use Spryker\Glue\GlueApplication\Rest\RequestConstantsInterface;
18
use Spryker\Glue\ProductsRestApi\ProductsRestApiConfig;
19
use Spryker\Shared\Calculation\CalculationPriceMode;
20
21
/**
22
 * Auto-generated group annotations
23
 *
24
 * @group PyzTest
25
 * @group Glue
26
 * @group Carts
27
 * @group RestApi
28
 * @group CartsRestApiCest
29
 * Add your own group annotations below this line
30
 * @group EndToEnd
31
 */
32
class CartsRestApiCest
33
{
34
    /**
35
     * @var \PyzTest\Glue\Carts\RestApi\Fixtures\CartsRestApiFixtures
36
     */
37
    protected CartsRestApiFixtures $fixtures;
38
39
    /**
40
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
41
     *
42
     * @return void
43
     */
44
    public function loadFixtures(CartsApiTester $I): void
45
    {
46
        /** @var \PyzTest\Glue\Carts\RestApi\Fixtures\CartsRestApiFixtures $fixtures */
47
        $fixtures = $I->loadFixtures(CartsRestApiFixtures::class);
48
49
        $this->fixtures = $fixtures;
50
    }
51
52
    /**
53
     * @depends loadFixtures
54
     *
55
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
56
     *
57
     * @return void
58
     */
59
    public function requestCarts(CartsApiTester $I): void
60
    {
61
        // Arrange
62
        $quoteTransfer = $I->createPersistentQuote(
63
            $I,
64
            $this->fixtures->getCustomerTransfer(),
65
            [],
66
        );
67
        $quoteUuid = $quoteTransfer->getUuid();
68
        $oauthResponseTransfer = $I->haveAuthorizationToGlue($quoteTransfer->getCustomer());
69
        $I->amBearerAuthenticated($oauthResponseTransfer->getAccessToken());
70
71
        // Act
72
        $I->sendGET($I->buildCartsUrl());
73
74
        // Assert
75
        $I->seeResponseCodeIs(HttpCode::OK);
76
        $I->seeResponseIsJson();
77
        $I->seeResponseMatchesOpenApiSchema();
78
79
        $I->amSure('Response data contains resource collection')
80
            ->whenI()
81
            ->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

81
            ->/** @scrutinizer ignore-call */ seeResponseDataContainsResourceCollectionOfType(CartsRestApiConfig::RESOURCE_CARTS);
Loading history...
82
83
        $I->amSure('Resource collection has resource')
84
            ->whenI()
85
            ->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

85
            ->/** @scrutinizer ignore-call */ seeResourceCollectionHasResourceWithId($quoteUuid);
Loading history...
86
87
        $I->amSure('Resource has correct self-link')
88
            ->whenI()
89
            ->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

89
            ->/** @scrutinizer ignore-call */ seeResourceByIdHasSelfLink($quoteUuid, $I->buildCartUrl($quoteUuid));
Loading history...
90
    }
91
92
    /**
93
     * @depends loadFixtures
94
     *
95
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
96
     *
97
     * @return void
98
     */
99
    public function requestCartByUuid(CartsApiTester $I): void
100
    {
101
        // Arrange
102
        $quoteTransfer = $I->createPersistentQuote(
103
            $I,
104
            $this->fixtures->getCustomerTransfer(),
105
            [],
106
        );
107
        $quoteUuid = $quoteTransfer->getUuid();
108
        $url = $I->buildCartUrl($quoteUuid);
109
        $oauthResponseTransfer = $I->haveAuthorizationToGlue($quoteTransfer->getCustomer());
110
        $I->amBearerAuthenticated($oauthResponseTransfer->getAccessToken());
111
112
        // Act
113
        $I->sendGET($url);
114
115
        // Assert
116
        $I->seeResponseCodeIs(HttpCode::OK);
117
        $I->seeResponseIsJson();
118
        $I->seeResponseMatchesOpenApiSchema();
119
120
        $I->amSure('The returned resource is of correct type')
121
            ->whenI()
122
            ->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

122
            ->/** @scrutinizer ignore-call */ seeResponseDataContainsSingleResourceOfType(CartsRestApiConfig::RESOURCE_CARTS);
Loading history...
123
124
        $I->amSure('The returned resource has correct id')
125
            ->whenI()
126
            ->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

126
            ->/** @scrutinizer ignore-call */ seeSingleResourceIdEqualTo($quoteUuid);
Loading history...
127
128
        $I->amSure('The returned resource has correct self-link')
129
            ->whenI()
130
            ->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

130
            ->/** @scrutinizer ignore-call */ seeSingleResourceHasSelfLink($url);
Loading history...
131
    }
132
133
    /**
134
     * @depends loadFixtures
135
     *
136
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
137
     *
138
     * @return void
139
     */
140
    public function requestCartByUuidWithCartItemsRelationship(CartsApiTester $I): void
141
    {
142
        // Arrange
143
        $quoteTransfer = $I->createPersistentQuote(
144
            $I,
145
            $this->fixtures->getCustomerTransfer(),
146
            [$this->fixtures->getProductConcreteTransfer()],
147
        );
148
        $cartItemGroupKey = $quoteTransfer->getItems()->offsetGet(0)->getGroupKey();
149
150
        $oauthResponseTransfer = $I->haveAuthorizationToGlue($quoteTransfer->getCustomer());
151
        $I->amBearerAuthenticated($oauthResponseTransfer->getAccessToken());
152
153
        // Act
154
        $I->sendGET($I->buildCartUrl($quoteTransfer->getUuid(), [CartsRestApiConfig::RESOURCE_CART_ITEMS]));
155
156
        // Assert
157
        $I->seeResponseCodeIs(HttpCode::OK);
158
        $I->seeResponseIsJson();
159
        $I->seeResponseMatchesOpenApiSchema();
160
161
        $I->amSure('The returned resource has relationship')
162
            ->whenI()
163
            ->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

163
            ->/** @scrutinizer ignore-call */ seeSingleResourceHasRelationshipByTypeAndId(
Loading history...
164
                CartsRestApiConfig::RESOURCE_CART_ITEMS,
165
                $cartItemGroupKey,
166
            );
167
168
        $I->amSure('The returned resource has include')
169
            ->whenI()
170
            ->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

170
            ->/** @scrutinizer ignore-call */ seeIncludesContainsResourceByTypeAndId(
Loading history...
171
                CartsRestApiConfig::RESOURCE_CART_ITEMS,
172
                $cartItemGroupKey,
173
            );
174
175
        $I->amSure('The include has correct self-link')
176
            ->whenI()
177
            ->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

177
            ->/** @scrutinizer ignore-call */ seeIncludedResourceByTypeAndIdHasSelfLink(
Loading history...
178
                CartsRestApiConfig::RESOURCE_CART_ITEMS,
179
                $cartItemGroupKey,
180
                $I->buildCartItemUrl($quoteTransfer->getUuid(), $cartItemGroupKey),
181
            );
182
    }
183
184
    /**
185
     * @depends loadFixtures
186
     *
187
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
188
     *
189
     * @return void
190
     */
191
    public function requestCartByUuidWithProductConcreteRelationship(CartsApiTester $I): void
192
    {
193
        // Arrange
194
        $quoteTransfer = $I->createPersistentQuote(
195
            $I,
196
            $this->fixtures->getCustomerTransfer(),
197
            [$this->fixtures->getProductConcreteTransfer()],
198
        );
199
        $cartItemGroupKey = $quoteTransfer->getItems()->offsetGet(0)->getGroupKey();
200
        $productConcreteSku = $this->fixtures->getProductConcreteTransfer()->getSku();
201
        $url = $I->buildCartUrl(
202
            $quoteTransfer->getUuid(),
203
            [
204
                CartsRestApiConfig::RESOURCE_CART_ITEMS,
205
                ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS,
206
            ],
207
        );
208
209
        $oauthResponseTransfer = $I->haveAuthorizationToGlue($quoteTransfer->getCustomer());
210
        $I->amBearerAuthenticated($oauthResponseTransfer->getAccessToken());
211
212
        // Act
213
        $I->sendGET($url);
214
215
        // Assert
216
        $I->seeResponseCodeIs(HttpCode::OK);
217
        $I->seeResponseIsJson();
218
        $I->seeResponseMatchesOpenApiSchema();
219
220
        $I->amSure('The included resource has a relationship')
221
            ->whenI()
222
            ->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

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

864
            /** @scrutinizer ignore-type */ $itemGroupKey,
Loading history...
865
        );
866
    }
867
868
    /**
869
     * @depends loadFixtures
870
     *
871
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
872
     *
873
     * @return void
874
     */
875
    public function requestUpdateItemsInCartWithoutCartUuid(CartsApiTester $I): void
876
    {
877
        // Arrange
878
        $this->authorizeCustomer($I);
879
880
        // Act
881
        $I->sendPATCH(
882
            $I->formatUrl(
883
                '{resourceCarts}//{resourceCartItems}/{cartItemSku}',
884
                [
885
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
886
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
887
                    'cartItemSku' => $this->fixtures->getProductConcreteTransfer()->getSku(),
888
                ],
889
            ),
890
            [
891
                'data' => [
892
                    'type' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
893
                    'attributes' => [
894
                        'quantity' => $this->fixtures::QUANTITY_FOR_ITEM_UPDATE,
895
                    ],
896
                ],
897
            ],
898
        );
899
900
        // Assert
901
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
902
        $I->seeResponseMatchesOpenApiSchema();
903
    }
904
905
    /**
906
     * @depends loadFixtures
907
     *
908
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
909
     *
910
     * @return void
911
     */
912
    public function requestUpdateItemsInCartWithoutAuthorizationToken(CartsApiTester $I): void
913
    {
914
        // Arrange
915
        $quoteTransfer = $I->createPersistentQuote(
916
            $I,
917
            $this->fixtures->getCustomerTransfer(),
918
            [$this->fixtures->getProductConcreteTransfer()],
919
        );
920
921
        // Act
922
        $I->sendPATCH(
923
            $I->formatUrl(
924
                '{resourceCarts}/{cartUuid}/{resourceCartItems}/{itemSku}',
925
                [
926
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
927
                    'cartUuid' => $quoteTransfer->getUuid(),
928
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
929
                    'itemSku' => $this->fixtures->getProductConcreteTransfer()->getSku(),
930
                ],
931
            ),
932
            [
933
                'data' => [
934
                    'type' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
935
                    'attributes' => [
936
                        'quantity' => $this->fixtures::QUANTITY_FOR_ITEM_UPDATE,
937
                    ],
938
                ],
939
            ],
940
        );
941
942
        // Assert
943
        $I->seeResponseCodeIs(HttpCode::FORBIDDEN);
944
        $I->seeResponseMatchesOpenApiSchema();
945
    }
946
947
    /**
948
     * @depends loadFixtures
949
     *
950
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
951
     *
952
     * @return void
953
     */
954
    public function requestUpdateItemsInCartWithoutQuantity(CartsApiTester $I): void
955
    {
956
        // Arrange
957
        $this->authorizeCustomer($I);
958
        $quoteTransfer = $I->createPersistentQuote(
959
            $I,
960
            $this->fixtures->getCustomerTransfer(),
961
            [$this->fixtures->getProductConcreteTransfer()],
962
        );
963
964
        // Act
965
        $I->sendPATCH(
966
            $I->formatUrl(
967
                '{resourceCarts}/{cartUuid}/{resourceCartItems}/{itemSku}',
968
                [
969
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
970
                    'cartUuid' => $quoteTransfer->getUuid(),
971
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
972
                    'itemSku' => $this->fixtures->getProductConcreteTransfer()->getSku(),
973
                ],
974
            ),
975
            [
976
                'data' => [
977
                    'type' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
978
                    'attributes' => [
979
                    ],
980
                ],
981
            ],
982
        );
983
984
        // Assert
985
        $I->seeResponseCodeIs(HttpCode::UNPROCESSABLE_ENTITY);
986
        $I->seeResponseMatchesOpenApiSchema();
987
    }
988
989
    /**
990
     * @depends loadFixtures
991
     *
992
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
993
     *
994
     * @return void
995
     */
996
    public function requestUpdateItemsInCartWithoutItemSku(CartsApiTester $I): void
997
    {
998
        // Arrange
999
        $this->authorizeCustomer($I);
1000
        $quoteTransfer = $I->createPersistentQuote(
1001
            $I,
1002
            $this->fixtures->getCustomerTransfer(),
1003
            [$this->fixtures->getProductConcreteTransfer()],
1004
        );
1005
1006
        // Act
1007
        $I->sendPATCH(
1008
            $I->formatUrl(
1009
                '{resourceCarts}/{cartUuid}/{resourceCartItems}',
1010
                [
1011
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
1012
                    'cartUuid' => $quoteTransfer->getUuid(),
1013
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
1014
                ],
1015
            ),
1016
            [
1017
                'data' => [
1018
                    'type' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
1019
                    'attributes' => [
1020
                        'quantity' => $this->fixtures::QUANTITY_FOR_ITEM_UPDATE,
1021
                    ],
1022
                ],
1023
            ],
1024
        );
1025
1026
        // Assert
1027
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
1028
        $I->seeResponseIsJson();
1029
    }
1030
1031
    /**
1032
     * @depends loadFixtures
1033
     *
1034
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1035
     *
1036
     * @return void
1037
     */
1038
    public function requestDeleteItemsFromCart(CartsApiTester $I): void
1039
    {
1040
        // Arrange
1041
        $this->authorizeCustomer($I);
1042
        $quoteTransfer = $I->createPersistentQuote(
1043
            $I,
1044
            $this->fixtures->getCustomerTransfer(),
1045
            [$this->fixtures->getProductConcreteTransfer()],
1046
        );
1047
1048
        // Act
1049
        $I->sendDelete(
1050
            $I->formatUrl(
1051
                '{resourceCarts}/{cartUuid}/{resourceCartItems}/{itemSku}',
1052
                [
1053
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
1054
                    'cartUuid' => $quoteTransfer->getUuid(),
1055
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
1056
                    'itemSku' => $this->fixtures->getProductConcreteTransfer()->getSku(),
1057
                ],
1058
            ),
1059
        );
1060
1061
        // Assert
1062
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
1063
    }
1064
1065
    /**
1066
     * @depends loadFixtures
1067
     *
1068
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1069
     *
1070
     * @return void
1071
     */
1072
    public function requestDeleteItemsFromCartWithoutCartUuid(CartsApiTester $I): void
1073
    {
1074
        // Arrange
1075
        $this->authorizeCustomer($I);
1076
1077
        // Act
1078
        $I->sendDelete(
1079
            $I->formatUrl(
1080
                '{resourceCarts}//{resourceCartItems}/{itemSku}',
1081
                [
1082
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
1083
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
1084
                    'itemSku' => $this->fixtures->getProductConcreteTransfer()->getSku(),
1085
                ],
1086
            ),
1087
        );
1088
1089
        // Assert
1090
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
1091
        $I->seeResponseMatchesOpenApiSchema();
1092
    }
1093
1094
    /**
1095
     * @depends loadFixtures
1096
     *
1097
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1098
     *
1099
     * @return void
1100
     */
1101
    public function requestDeleteItemsFromCartWithoutAuthorizationToken(CartsApiTester $I): void
1102
    {
1103
        // Arrange
1104
        $quoteTransfer = $I->createPersistentQuote(
1105
            $I,
1106
            $this->fixtures->getCustomerTransfer(),
1107
            [$this->fixtures->getProductConcreteTransfer()],
1108
        );
1109
1110
        // Act
1111
        $I->sendDelete(
1112
            $I->formatUrl(
1113
                '{resourceCarts}/{cartUuid}/{resourceCartItems}/{itemSku}',
1114
                [
1115
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
1116
                    'cartUuid' => $quoteTransfer->getUuid(),
1117
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
1118
                    'itemSku' => $this->fixtures->getProductConcreteTransfer()->getSku(),
1119
                ],
1120
            ),
1121
        );
1122
1123
        // Assert
1124
        $I->seeResponseCodeIs(HttpCode::FORBIDDEN);
1125
        $I->seeResponseMatchesOpenApiSchema();
1126
    }
1127
1128
    /**
1129
     * @depends loadFixtures
1130
     *
1131
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1132
     *
1133
     * @return void
1134
     */
1135
    public function requestDeleteItemsFromCartWithoutItemSku(CartsApiTester $I): void
1136
    {
1137
        // Arrange
1138
        $this->authorizeCustomer($I);
1139
        $quoteTransfer = $I->createPersistentQuote(
1140
            $I,
1141
            $this->fixtures->getCustomerTransfer(),
1142
            [$this->fixtures->getProductConcreteTransfer()],
1143
        );
1144
1145
        // Act
1146
        $I->sendDelete(
1147
            $I->formatUrl(
1148
                '{resourceCarts}/{cartUuid}/{resourceCartItems}',
1149
                [
1150
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
1151
                    'cartUuid' => $quoteTransfer->getUuid(),
1152
                    'resourceCartItems' => CartsRestApiConfig::RESOURCE_CART_ITEMS,
1153
                ],
1154
            ),
1155
        );
1156
1157
        // Assert
1158
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
1159
        $I->seeResponseIsJson();
1160
    }
1161
1162
    /**
1163
     * @depends loadFixtures
1164
     *
1165
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1166
     *
1167
     * @return void
1168
     */
1169
    public function requestDeleteCart(CartsApiTester $I): void
1170
    {
1171
        // Arrange
1172
        $this->authorizeCustomer($I);
1173
        $quoteTransfer = $I->createPersistentQuote(
1174
            $I,
1175
            $this->fixtures->getCustomerTransfer(),
1176
            [],
1177
        );
1178
1179
        // Act
1180
        $I->sendDelete($I->buildCartUrl($quoteTransfer->getUuid()));
1181
1182
        // Assert
1183
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
1184
    }
1185
1186
    /**
1187
     * @depends loadFixtures
1188
     *
1189
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1190
     *
1191
     * @return void
1192
     */
1193
    public function requestDeleteCartWithoutCartUuid(CartsApiTester $I): void
1194
    {
1195
        // Arrange
1196
        $this->authorizeCustomer($I);
1197
1198
        // Act
1199
        $I->sendDelete(
1200
            $I->formatUrl(
1201
                '{resourceCarts}',
1202
                [
1203
                    'resourceCarts' => CartsRestApiConfig::RESOURCE_CARTS,
1204
                ],
1205
            ),
1206
        );
1207
1208
        // Assert
1209
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
1210
        $I->seeResponseIsJson();
1211
    }
1212
1213
    /**
1214
     * @depends loadFixtures
1215
     *
1216
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1217
     *
1218
     * @return void
1219
     */
1220
    public function requestDeleteCartWithoutAuthorizationToken(CartsApiTester $I): void
1221
    {
1222
        // Arrange
1223
        $quoteTransfer = $I->createPersistentQuote(
1224
            $I,
1225
            $this->fixtures->getCustomerTransfer(),
1226
            [],
1227
        );
1228
1229
        // Act
1230
        $I->sendDelete($I->buildCartUrl($quoteTransfer->getUuid()));
1231
1232
        // Assert
1233
        $I->seeResponseCodeIs(HttpCode::FORBIDDEN);
1234
        $I->seeResponseMatchesOpenApiSchema();
1235
    }
1236
1237
    /**
1238
     * @depends loadFixtures
1239
     *
1240
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1241
     *
1242
     * @return void
1243
     */
1244
    public function requestCustomerCarts(CartsApiTester $I): void
1245
    {
1246
        // Arrange
1247
        $quoteTransfer = $I->createPersistentQuote(
1248
            $I,
1249
            $this->fixtures->getCustomerTransfer(),
1250
            [],
1251
        );
1252
1253
        $url = $I->buildCustomerCartUrl($quoteTransfer->getCustomer()->getCustomerReference());
1254
1255
        $oauthResponseTransfer = $I->haveAuthorizationToGlue($quoteTransfer->getCustomer());
1256
        $I->amBearerAuthenticated($oauthResponseTransfer->getAccessToken());
1257
1258
        // Act
1259
        $I->sendGET($url);
1260
1261
        // Assert
1262
        $I->seeResponseCodeIs(HttpCode::OK);
1263
        $I->seeResponseMatchesOpenApiSchema();
1264
    }
1265
1266
    /**
1267
     * @depends loadFixtures
1268
     *
1269
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1270
     *
1271
     * @return void
1272
     */
1273
    public function requestCustomerCartsAuthorizationError(CartsApiTester $I): void
1274
    {
1275
        // Arrange
1276
        $quoteTransfer = $I->createPersistentQuote(
1277
            $I,
1278
            $this->fixtures->getCustomerTransfer(),
1279
            [],
1280
        );
1281
1282
        $url = $I->buildCustomerCartUrl('wrongCustomerReference');
1283
1284
        $oauthResponseTransfer = $I->haveAuthorizationToGlue($quoteTransfer->getCustomer());
1285
        $I->amBearerAuthenticated($oauthResponseTransfer->getAccessToken());
1286
1287
        // Act
1288
        $I->sendGET($url);
1289
1290
        // Assert
1291
        $I->seeResponseCodeIs(HttpCode::FORBIDDEN);
1292
        $I->seeResponseMatchesOpenApiSchema();
1293
    }
1294
1295
    /**
1296
     * @param \PyzTest\Glue\Carts\CartsApiTester $I
1297
     * @param \Generated\Shared\Transfer\CustomerTransfer|null $customerTransfer
1298
     *
1299
     * @return void
1300
     */
1301
    protected function authorizeCustomer(CartsApiTester $I, ?CustomerTransfer $customerTransfer = null): void
1302
    {
1303
        if (!$customerTransfer) {
1304
            $customerTransfer = $this->fixtures->getCustomerTransfer();
1305
        }
1306
1307
        $token = $I->haveAuthorizationToGlue($customerTransfer)->getAccessToken();
1308
1309
        $I->amBearerAuthenticated($token);
1310
    }
1311
}
1312