Passed
Pull Request — master (#356)
by Denys
05:13
created

CartsRestApiCest::requestUpdateCart()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 57
Code Lines 34

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 34
dl 0
loc 57
rs 9.376
c 1
b 0
f 0
cc 1
nc 1
nop 1

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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

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

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

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

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

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

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

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

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

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

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

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