Issues (3641)

Zed/GiftCard/Business/GiftCardFacadeTest.php (1 issue)

1
<?php
2
3
/**
4
 * Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace SprykerTest\Zed\GiftCard\Business;
9
10
use Codeception\Test\Unit;
11
use Generated\Shared\DataBuilder\GiftCardBuilder;
12
use Generated\Shared\DataBuilder\GiftCardMetadataBuilder;
13
use Generated\Shared\DataBuilder\ItemBuilder;
14
use Generated\Shared\DataBuilder\ShipmentGroupBuilder;
15
use Generated\Shared\DataBuilder\ShipmentMethodBuilder;
16
use Generated\Shared\DataBuilder\ShipmentMethodsBuilder;
17
use Generated\Shared\Transfer\GiftCardAbstractProductConfigurationTransfer;
18
use Generated\Shared\Transfer\GiftCardMetadataTransfer;
19
use Generated\Shared\Transfer\GiftCardTransfer;
20
use Generated\Shared\Transfer\ItemTransfer;
21
use Generated\Shared\Transfer\PaymentTransfer;
22
use Generated\Shared\Transfer\QuoteTransfer;
23
use Generated\Shared\Transfer\SalesPaymentTransfer;
24
use Generated\Shared\Transfer\SaveOrderTransfer;
25
use Generated\Shared\Transfer\ShipmentGroupTransfer;
26
use Generated\Shared\Transfer\ShipmentMethodTransfer;
27
use Spryker\Shared\Kernel\Transfer\Exception\NullValueException;
28
use Spryker\Shared\Kernel\Transfer\Exception\RequiredTransferPropertyException;
29
use Spryker\Zed\GiftCard\Business\GiftCardBusinessFactory;
30
use Spryker\Zed\GiftCard\Business\GiftCardFacadeInterface;
31
use Spryker\Zed\GiftCard\Dependency\Plugin\GiftCardPaymentSaverPluginInterface;
32
use Spryker\Zed\GiftCard\GiftCardConfig;
33
use Spryker\Zed\GiftCard\GiftCardDependencyProvider;
34
use SprykerTest\Zed\Sales\Helper\BusinessHelper;
35
36
/**
37
 * Auto-generated group annotations
38
 *
39
 * @group SprykerTest
40
 * @group Zed
41
 * @group GiftCard
42
 * @group Business
43
 * @group Facade
44
 * @group GiftCardFacadeTest
45
 * Add your own group annotations below this line
46
 */
47
class GiftCardFacadeTest extends Unit
48
{
49
    /**
50
     * @var string
51
     */
52
    protected const TEST_GIFT_CARD_CODE = 'testCode';
53
54
    /**
55
     * @var string
56
     */
57
    protected const TEST_PAYMENT_PROVIDER = 'TEST_PAYMENT_PROVIDER';
58
59
    /**
60
     * @var string
61
     */
62
    protected const TEST_PAYMENT_METHOD = 'TEST_PAYMENT_METHOD';
63
64
    /**
65
     * @var int
66
     */
67
    protected const TEST_GIFT_CARD_ID = 0;
68
69
    /**
70
     * @var string
71
     */
72
    protected const NULL_VALUE_EXCEPTION_MESSAGE_PATTERN = 'Property "%s" of transfer `%s` is null.';
73
74
    /**
75
     * @var \SprykerTest\Zed\GiftCard\GiftCardBusinessTester
76
     */
77
    protected $tester;
78
79
    /**
80
     * @return void
81
     */
82
    public function testFindByIdShouldReturnTransferObjectForExistingGiftCard(): void
83
    {
84
        $giftCardTransfer = $this->tester->haveGiftCard(['attributes' => []]);
85
86
        $foundGiftCardTransfer = $this->getFacade()->findById($giftCardTransfer->getIdGiftCard());
87
88
        $this->assertNotNull($foundGiftCardTransfer);
89
        $this->assertSame($giftCardTransfer->getIdGiftCard(), $foundGiftCardTransfer->getIdGiftCard());
90
    }
91
92
    /**
93
     * @return void
94
     */
95
    public function testCreateShouldAssertRequiredTransferObjectFields(): void
96
    {
97
        $giftCardTransfer = (new GiftCardBuilder([
98
            'attributes' => [],
99
            'value' => null,
100
        ]))->build();
101
102
        $this->expectException(RequiredTransferPropertyException::class);
103
        $this->expectExceptionMessageMatches('/^Missing required property "value" for transfer/');
104
        $this->getFacade()->create($giftCardTransfer);
105
    }
106
107
    /**
108
     * @return void
109
     */
110
    public function testCreateShouldPersistGiftCard(): void
111
    {
112
        // Arrange
113
        /** @var \Generated\Shared\Transfer\GiftCardTransfer $giftCardTransfer */
114
        $giftCardTransfer = (new GiftCardBuilder([
115
            'attributes' => [],
116
            'idGiftCard' => null,
117
        ]))->build();
118
119
        // Act
120
        $this->getFacade()->create($giftCardTransfer);
121
122
        // Assert
123
        $this->assertNotNull($giftCardTransfer->getIdGiftCard());
124
125
        $createdGiftCardTransfer = $this->getFacade()->findById($giftCardTransfer->getIdGiftCard());
126
127
        $this->assertSame($giftCardTransfer->getCode(), $createdGiftCardTransfer->getCode());
128
        $this->assertSame($giftCardTransfer->getName(), $createdGiftCardTransfer->getName());
129
        $this->assertEquals($giftCardTransfer->getValue(), $createdGiftCardTransfer->getValue());
130
        $this->assertEquals($giftCardTransfer->getIsActive(), $createdGiftCardTransfer->getIsActive());
131
    }
132
133
    /**
134
     * @dataProvider filterShipmentGroupMethodsShouldRemoveAllowedShipmentMethodsDataProvider
135
     *
136
     * @param \Generated\Shared\Transfer\ShipmentGroupTransfer $shipmentGroupTransfer
137
     * @param array<string> $expectedAllowedShipmentMethodNames
138
     * @param array<string> $expectedDisallowedShipmentMethodNames
139
     *
140
     * @return void
141
     */
142
    public function testFilterShipmentGroupMethodsShouldRemoveAllowedShipmentMethods(
143
        ShipmentGroupTransfer $shipmentGroupTransfer,
144
        array $expectedAllowedShipmentMethodNames,
145
        array $expectedDisallowedShipmentMethodNames
146
    ): void {
147
        // Arrange
148
        $facade = $this->getFacadeWithMockedConfig();
149
150
        // Act
151
        $actualShipmentMethodTransfers = $facade->filterShipmentGroupMethods($shipmentGroupTransfer);
152
153
        // Assert
154
        foreach ($actualShipmentMethodTransfers as $actualShipmentMethodTransfer) {
155
            $this->assertContains($actualShipmentMethodTransfer->getName(), $expectedAllowedShipmentMethodNames);
156
            $this->assertNotContains($actualShipmentMethodTransfer->getName(), $expectedDisallowedShipmentMethodNames);
157
        }
158
    }
159
160
    /**
161
     * @return array
162
     */
163
    public function filterShipmentGroupMethodsShouldRemoveAllowedShipmentMethodsDataProvider(): array
164
    {
165
        return [
166
            'shipment group: only gift card items; expected: only NoShipment method' => $this->getDataWithOnlyGiftCardItems(),
167
            'shipment group: not only gift card items; expected: all methods except NoShipment method' => $this->getDataWithNotOnlyGiftCardItems(),
168
        ];
169
    }
170
171
    /**
172
     * @return void
173
     */
174
    public function testAddCartCodeAddsGiftCardToQuote(): void
175
    {
176
        // Arrange
177
        $quoteTransfer = $this->tester->createQuoteTransferWithoutGiftCard();
178
179
        // Act
180
        $resultQuoteTransfer = $this->getFacade()->addCartCode($quoteTransfer, $this->tester::GIFT_CARD_CODE);
181
182
        // Assert
183
        $this->assertCount(1, $quoteTransfer->getGiftCards());
184
        $this->assertSame(
185
            $this->tester::GIFT_CARD_CODE,
186
            $resultQuoteTransfer->getGiftCards()[0]->getCode(),
187
        );
188
    }
189
190
    /**
191
     * @return void
192
     */
193
    public function testAddCartCodeCantAddGiftCardToQuoteWithGiftCardAlreadyAddedToQuote(): void
194
    {
195
        // Arrange
196
        $quoteTransfer = $this->tester->createQuoteTransferWithGiftCard();
197
198
        // Act
199
        $resultQuoteTransfer = $this->getFacade()->addCartCode($quoteTransfer, $this->tester::GIFT_CARD_CODE);
200
201
        // Assert
202
        $this->assertCount(1, $resultQuoteTransfer->getGiftCards());
203
    }
204
205
    /**
206
     * @return void
207
     */
208
    public function testRemoveCartCodeRemovesGiftCardFromQuote(): void
209
    {
210
        // Arrange
211
        $quoteTransfer = $this->tester->createQuoteTransferWithGiftCard();
212
213
        // Act
214
        $resultQuoteTransfer = $this->getFacade()->removeCartCode($quoteTransfer, $this->tester::GIFT_CARD_CODE);
215
216
        // Assert
217
        $this->assertCount(0, $resultQuoteTransfer->getGiftCards());
218
    }
219
220
    /**
221
     * @return void
222
     */
223
    public function testClearCartCodesRemovesGiftCardsFromQuote(): void
224
    {
225
        // Arrange
226
        $quoteTransfer = $this->tester->createQuoteTransferWithGiftCard();
227
228
        // Act
229
        $resultQuoteTransfer = $this->getFacade()->clearCartCodes($quoteTransfer);
230
231
        // Assert
232
        $this->assertCount(0, $resultQuoteTransfer->getGiftCards());
233
    }
234
235
    /**
236
     * @return void
237
     */
238
    public function testFindOperationResponseMessageReturnsMessageTransfer(): void
239
    {
240
        // Arrange
241
        $quoteTransfer = $this->tester->createQuoteTransferWithGiftCard();
242
243
        // Act
244
        $messageTransfer = $this->getFacade()->findOperationResponseMessage($quoteTransfer, $this->tester::GIFT_CARD_CODE);
245
246
        // Assert
247
        $this->assertNotNull($messageTransfer);
248
    }
249
250
    /**
251
     * @return void
252
     */
253
    public function testSaveOrderGiftCardsShouldCreatePaymentGiftCardEntity(): void
254
    {
255
        // Arrange
256
        $idSalesPayment = $this->createSalesPaymentEntity();
257
258
        $anotherPaymentTransfer = new PaymentTransfer();
259
        $giftCardTransfer = new GiftCardTransfer();
260
        $giftCardTransfer->setCode(static::TEST_GIFT_CARD_CODE);
261
        $giftCardPaymentTransfer = (new PaymentTransfer())
262
            ->setPaymentProvider(GiftCardConfig::PROVIDER_NAME)
263
            ->setGiftCard($giftCardTransfer)
264
            ->setAmount(100)
265
            ->setIdSalesPayment($idSalesPayment);
266
267
        $quoteTransfer = (new QuoteTransfer())
268
            ->addPayment($anotherPaymentTransfer)
269
            ->addPayment($giftCardPaymentTransfer);
270
271
        // Act
272
        $this->getFacade()->saveOrderGiftCards($quoteTransfer, new SaveOrderTransfer());
273
274
        // Assert
275
        $this->tester->assertPaymentGiftCardExistBySalesPaymentId($idSalesPayment, 1);
276
        $this->tester->assertPaymentGiftCardExistBySalesPaymentIdAndCode($idSalesPayment, static::TEST_GIFT_CARD_CODE);
277
    }
278
279
    /**
280
     * @return void
281
     */
282
    public function testSaveOrderGiftCardsShouldCreateSalesOrderItemGiftCardEntities(): void
283
    {
284
        // Arrange
285
        $this->tester->configureTestStateMachine([BusinessHelper::DEFAULT_OMS_PROCESS_NAME]);
286
        $saveOrderTransfer = $this->tester->haveOrder([], BusinessHelper::DEFAULT_OMS_PROCESS_NAME);
287
        $oneSalesOrderItemEntity = $this->tester->createSalesOrderItemForOrder(
288
            $saveOrderTransfer->getIdSalesOrder(),
289
            ['name' => 'item 1'],
290
        );
291
        $twoSalesOrderItemEntity = $this->tester->createSalesOrderItemForOrder(
292
            $saveOrderTransfer->getIdSalesOrder(),
293
            ['name' => 'item 2'],
294
        );
295
296
        $oneGiftCardItemTransfer = new ItemTransfer();
297
        $oneGiftCardItemTransfer->setIdSalesOrderItem($oneSalesOrderItemEntity->getIdSalesOrderItem());
298
        $oneGiftCardItemTransfer->setGiftCardMetadata(new GiftCardMetadataTransfer());
299
        $oneGiftCardItemTransfer->getGiftCardMetadata()
300
            ->setIsGiftCard(true)
301
            ->setAbstractConfiguration(new GiftCardAbstractProductConfigurationTransfer());
302
        $twoGiftCardItemTransfer = new ItemTransfer();
303
        $twoGiftCardItemTransfer->setIdSalesOrderItem($twoSalesOrderItemEntity->getIdSalesOrderItem());
304
        $twoGiftCardItemTransfer->setGiftCardMetadata(new GiftCardMetadataTransfer());
305
        $twoGiftCardItemTransfer->getGiftCardMetadata()
306
            ->setIsGiftCard(true)
307
            ->setAbstractConfiguration(new GiftCardAbstractProductConfigurationTransfer());
308
309
        $quoteTransfer = new QuoteTransfer();
310
        $quoteTransfer->addItem($oneGiftCardItemTransfer);
311
        $quoteTransfer->addItem($twoGiftCardItemTransfer);
312
        $quoteTransfer->addItem(new ItemTransfer());
313
314
        // Act
315
        $this->getFacade()->saveOrderGiftCards($quoteTransfer, new SaveOrderTransfer());
316
317
        // Assert
318
        $this->tester->assertSalesOrderItemGiftCardExistBySalesPaymentId($saveOrderTransfer->getIdSalesOrder(), 2);
319
    }
320
321
    /**
322
     * @return void
323
     */
324
    public function testSaveOrderGiftCardsWithZeroGiftCardAmountShouldNotCreatePaymentGiftCardEntity(): void
325
    {
326
        // Arrange
327
        $idSalesPayment = $this->createSalesPaymentEntity();
328
329
        $anotherPaymentTransfer = new PaymentTransfer();
330
        $giftCardTransfer = new GiftCardTransfer();
331
        $giftCardTransfer->setCode(static::TEST_GIFT_CARD_CODE);
332
        $giftCardPaymentTransfer = (new PaymentTransfer())
333
            ->setPaymentProvider(GiftCardConfig::PROVIDER_NAME)
334
            ->setGiftCard($giftCardTransfer)
335
            ->setAmount(0)
336
            ->setIdSalesPayment($idSalesPayment);
337
338
        $quoteTransfer = (new QuoteTransfer())
339
            ->addPayment($anotherPaymentTransfer)
340
            ->addPayment($giftCardPaymentTransfer);
341
342
        // Act
343
        $this->getFacade()->saveOrderGiftCards($quoteTransfer, new SaveOrderTransfer());
344
345
        // Assert
346
        $this->tester->assertPaymentGiftCardExistBySalesPaymentId($idSalesPayment, 0);
347
    }
348
349
    /**
350
     * @return void
351
     */
352
    public function testSaveOrderGiftCardsWithoutGiftCardShouldNotCreatePaymentGiftCardEntity(): void
353
    {
354
        // Arrange
355
        $idSalesPayment = $this->createSalesPaymentEntity();
356
357
        $anotherPaymentTransfer = new PaymentTransfer();
358
        $giftCardPaymentTransfer = (new PaymentTransfer())
359
            ->setPaymentProvider(GiftCardConfig::PROVIDER_NAME)
360
            ->setAmount(0)
361
            ->setIdSalesPayment($idSalesPayment);
362
363
        $quoteTransfer = (new QuoteTransfer())
364
            ->addPayment($anotherPaymentTransfer)
365
            ->addPayment($giftCardPaymentTransfer);
366
367
        // Act
368
        $this->getFacade()->saveOrderGiftCards($quoteTransfer, new SaveOrderTransfer());
369
370
        // Assert
371
        $this->tester->assertPaymentGiftCardExistBySalesPaymentId($idSalesPayment, 0);
372
    }
373
374
    /**
375
     * @return void
376
     */
377
    public function testSaveOrderGiftCardsExecutePluginStack(): void
378
    {
379
        // Arrange
380
        $anotherPaymentTransfer = new PaymentTransfer();
381
        $giftCardTransfer = new GiftCardTransfer();
382
        $giftCardTransfer->setCode(static::TEST_GIFT_CARD_CODE);
383
        $giftCardPaymentTransfer = (new PaymentTransfer())
384
            ->setPaymentProvider(GiftCardConfig::PROVIDER_NAME)
385
            ->setGiftCard($giftCardTransfer)
386
            ->setAmount(100)
387
            ->setIdSalesPayment($this->createSalesPaymentEntity());
388
389
        $quoteTransfer = (new QuoteTransfer())
390
            ->addPayment($anotherPaymentTransfer)
391
            ->addPayment($giftCardPaymentTransfer);
392
393
        $giftCardPaymentSaverPluginMock = $this->getMockBuilder(GiftCardPaymentSaverPluginInterface::class)
394
            ->getMock();
395
        $giftCardPaymentSaverPluginMock->expects($this->once())
396
            ->method('savePayment');
397
398
        $this->tester->setDependency(
399
            GiftCardDependencyProvider::GIFT_CARD_PAYMENT_SAVER_PLUGINS,
400
            [
401
                $giftCardPaymentSaverPluginMock,
402
            ],
403
        );
404
405
        // Act
406
        $this->getFacade()->saveOrderGiftCards($quoteTransfer, new SaveOrderTransfer());
407
    }
408
409
    /**
410
     * @return void
411
     */
412
    public function testBuildPaymentMapKeyReturnsMapKeyAccordingToThePattern(): void
413
    {
414
        // Arrange
415
        $paymentTransfer = (new PaymentTransfer())
416
            ->setPaymentProvider(static::TEST_PAYMENT_PROVIDER)
417
            ->setPaymentMethod(static::TEST_PAYMENT_METHOD)
418
            ->setGiftCard((new GiftCardTransfer())->setIdGiftCard(static::TEST_GIFT_CARD_ID));
419
420
        // Act
421
        $paymentKeyMap = $this->getFacade()->buildPaymentMapKey($paymentTransfer);
422
423
        // Assert
424
        $this->assertEquals('TEST_PAYMENT_PROVIDER-TEST_PAYMENT_METHOD-0', $paymentKeyMap);
425
    }
426
427
    /**
428
     * @dataProvider buildPaymentMapKeyThrowsExceptionIfRequiredPropertiesAreNotSetDataProvider
429
     *
430
     * @param \Generated\Shared\Transfer\PaymentTransfer $paymentTransfer
431
     * @param string $exceptionMessage
432
     *
433
     * @return void
434
     */
435
    public function testBuildPaymentMapKeyThrowsExceptionIfRequiredPropertiesAreNotSet(
436
        PaymentTransfer $paymentTransfer,
437
        string $exceptionMessage
438
    ): void {
439
        // Assert
440
        $this->expectException(NullValueException::class);
441
        $this->expectExceptionMessage(
442
            $exceptionMessage,
443
        );
444
445
        // Act
446
        $this->getFacade()->buildPaymentMapKey($paymentTransfer);
447
    }
448
449
    /**
450
     * @return array<string, array<int, mixed>>
451
     */
452
    public function buildPaymentMapKeyThrowsExceptionIfRequiredPropertiesAreNotSetDataProvider(): array
453
    {
454
        return [
455
            'payment transfer: idGiftCard is not provided; expected: NullValueException' =>
456
                $this->getDataForNoGiftCardIdProvided(),
457
            'payment transfer: PaymentProvider is not provided; expected: NullValueException' =>
458
                $this->getDataForNoPaymentProviderProvided(),
459
            'payment transfer: PaymentMethod is not provided; expected: NullValueException' =>
460
                $this->getDataForNoPaymentMethodProvided(),
461
        ];
462
    }
463
464
    /**
465
     * @return array<int, mixed>
466
     */
467
    protected function getDataForNoGiftCardIdProvided(): array
468
    {
469
        return [
470
            (new PaymentTransfer())
471
                ->setPaymentProvider(static::TEST_PAYMENT_PROVIDER)
472
                ->setPaymentMethod(static::TEST_PAYMENT_METHOD)
473
                ->setGiftCard((new GiftCardTransfer())),
474
            sprintf(
475
                static::NULL_VALUE_EXCEPTION_MESSAGE_PATTERN,
476
                GiftCardTransfer::ID_GIFT_CARD,
477
                GiftCardTransfer::class,
478
            ),
479
        ];
480
    }
481
482
    /**
483
     * @return array<int, mixed>
484
     */
485
    protected function getDataForNoPaymentProviderProvided(): array
486
    {
487
        return [
488
            (new PaymentTransfer())
489
                ->setPaymentMethod(static::TEST_PAYMENT_METHOD)
490
                ->setGiftCard((new GiftCardTransfer())->setIdGiftCard(static::TEST_GIFT_CARD_ID)),
491
            sprintf(
492
                static::NULL_VALUE_EXCEPTION_MESSAGE_PATTERN,
493
                PaymentTransfer::PAYMENT_PROVIDER,
494
                PaymentTransfer::class,
495
            ),
496
        ];
497
    }
498
499
    /**
500
     * @return array<int, mixed>
501
     */
502
    protected function getDataForNoPaymentMethodProvided(): array
503
    {
504
        return [
505
            (new PaymentTransfer())
506
                ->setPaymentProvider(static::TEST_PAYMENT_PROVIDER)
507
                ->setGiftCard((new GiftCardTransfer())->setIdGiftCard(static::TEST_GIFT_CARD_ID)),
508
            sprintf(
509
                static::NULL_VALUE_EXCEPTION_MESSAGE_PATTERN,
510
                PaymentTransfer::PAYMENT_METHOD,
511
                PaymentTransfer::class,
512
            ),
513
        ];
514
    }
515
516
    /**
517
     * @return int
518
     */
519
    protected function createSalesPaymentEntity(): int
520
    {
521
        $this->tester->configureTestStateMachine([BusinessHelper::DEFAULT_OMS_PROCESS_NAME]);
522
        $salesOrderTransfer = $this->tester->haveOrder([], BusinessHelper::DEFAULT_OMS_PROCESS_NAME);
523
        $salesPaymentTransfer = (new SalesPaymentTransfer())
524
            ->setPaymentProvider('Test provider')
525
            ->setPaymentMethod('Test method')
526
            ->setAmount(100)
527
            ->setFkSalesOrder($salesOrderTransfer->getIdSalesOrder());
528
        $salesPaymentEntity = $this->tester->haveSalesPaymentEntity($salesPaymentTransfer);
529
530
        return $salesPaymentEntity->getIdSalesPayment();
531
    }
532
533
    /**
534
     * @return array
535
     */
536
    protected function getDataWithOnlyGiftCardItems(): array
537
    {
538
        $giftCardMetadataBuilder = new GiftCardMetadataBuilder([GiftCardMetadataTransfer::IS_GIFT_CARD => true]);
539
540
        $availableShipmentMethodsBuilder = (new ShipmentMethodsBuilder())
541
            ->withMethod(new ShipmentMethodBuilder([ShipmentMethodTransfer::NAME => 'NoShipment']))
542
            ->withAnotherMethod(new ShipmentMethodBuilder([ShipmentMethodTransfer::NAME => 'Test method 1']))
543
            ->withAnotherMethod(new ShipmentMethodBuilder([ShipmentMethodTransfer::NAME => 'Test method 2']));
544
545
        $shipmentGroupTransfer = (new ShipmentGroupBuilder())
546
            ->withItem((new ItemBuilder())->withGiftCardMetadata($giftCardMetadataBuilder))
547
            ->withAnotherItem((new ItemBuilder())->withGiftCardMetadata($giftCardMetadataBuilder))
548
            ->withAnotherItem((new ItemBuilder())->withGiftCardMetadata($giftCardMetadataBuilder))
549
            ->withAvailableShipmentMethods($availableShipmentMethodsBuilder)
550
            ->build();
551
552
        return [$shipmentGroupTransfer, ['NoShipment'], ['Test method 1', 'Test method 2']];
553
    }
554
555
    /**
556
     * @return array
557
     */
558
    public function getDataWithNotOnlyGiftCardItems(): array
559
    {
560
        $giftCardMetadataBuilder = (new GiftCardMetadataBuilder([GiftCardMetadataTransfer::IS_GIFT_CARD => true]));
561
562
        $availableShipmentMethodsBuilder = (new ShipmentMethodsBuilder())
563
            ->withMethod(new ShipmentMethodBuilder([ShipmentMethodTransfer::NAME => 'NoShipment']))
564
            ->withAnotherMethod(new ShipmentMethodBuilder([ShipmentMethodTransfer::NAME => 'Test method 1']))
565
            ->withAnotherMethod(new ShipmentMethodBuilder([ShipmentMethodTransfer::NAME => 'Test method 2']));
566
567
        $shipmentGroupTransfer = (new ShipmentGroupBuilder())
568
            ->withItem((new ItemBuilder())->withGiftCardMetadata($giftCardMetadataBuilder))
569
            ->withAnotherItem(new ItemBuilder())
570
            ->withAnotherItem(new ItemBuilder())
571
            ->withAvailableShipmentMethods($availableShipmentMethodsBuilder)
572
            ->build();
573
574
        return [$shipmentGroupTransfer, ['Test method 1', 'Test method 2'], ['NoShipment']];
575
    }
576
577
    /**
578
     * @return \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\GiftCard\GiftCardConfig
579
     */
580
    protected function createGiftCardConfigMock(): GiftCardConfig
581
    {
582
        $mock = $this->getMockBuilder(GiftCardConfig::class)->getMock();
583
        $mock->method('getGiftCardOnlyShipmentMethods')->willReturn(['NoShipment']);
584
585
        return $mock;
586
    }
587
588
    /**
589
     * @return \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\GiftCard\Business\GiftCardBusinessFactory
590
     */
591
    protected function createGiftCardBusinessFactoryMock(): GiftCardBusinessFactory
592
    {
593
        return $this->getMockBuilder(GiftCardBusinessFactory::class)
594
            ->enableProxyingToOriginalMethods()
595
            ->getMock();
596
    }
597
598
    /**
599
     * @return \Spryker\Zed\GiftCard\Business\GiftCardFacadeInterface
600
     */
601
    protected function getFacadeWithMockedConfig(): GiftCardFacadeInterface
602
    {
603
        /** @var \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\GiftCard\GiftCardConfig $configMock */
604
        $configMock = $this->createGiftCardConfigMock();
605
        /** @var \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\GiftCard\Business\GiftCardBusinessFactory $businessFactoryMock */
606
        $businessFactoryMock = $this->createGiftCardBusinessFactoryMock();
607
        $businessFactoryMock->setConfig($configMock);
608
609
        /** @var \Spryker\Zed\GiftCard\Business\GiftCardFacadeInterface|\Spryker\Zed\Kernel\Business\AbstractFacade $facade */
610
        $facade = $this->tester->getFacade();
611
        $facade->setFactory($businessFactoryMock);
0 ignored issues
show
The method setFactory() does not exist on Spryker\Zed\GiftCard\Bus...GiftCardFacadeInterface. Since it exists in all sub-types, consider adding an abstract or default implementation to Spryker\Zed\GiftCard\Bus...GiftCardFacadeInterface. ( Ignorable by Annotation )

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

611
        $facade->/** @scrutinizer ignore-call */ 
612
                 setFactory($businessFactoryMock);
Loading history...
612
613
        return $facade;
614
    }
615
616
    /**
617
     * @return \Spryker\Zed\GiftCard\Business\GiftCardFacadeInterface|\Spryker\Zed\Kernel\Business\AbstractFacade
618
     */
619
    protected function getFacade()
620
    {
621
        return $this->tester->getFacade();
622
    }
623
}
624