requestUpdatePriceModeOfNonEmptyCart()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 42
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

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

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

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

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

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

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

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

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

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

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

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

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