Issues (3641)

Business/PaymentsRestApiFacadeTest.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\PaymentsRestApi\Business;
9
10
use Codeception\Test\Unit;
11
use Generated\Shared\DataBuilder\QuoteBuilder;
12
use Generated\Shared\DataBuilder\RestCheckoutRequestAttributesBuilder;
13
use Generated\Shared\DataBuilder\RestPaymentBuilder;
14
use Generated\Shared\Transfer\PaymentTransfer;
15
use Generated\Shared\Transfer\QuoteTransfer;
16
use Generated\Shared\Transfer\RestCheckoutRequestAttributesTransfer;
17
use Spryker\Shared\PaymentsRestApi\PaymentsRestApiConfig;
18
use Spryker\Zed\PaymentsRestApi\Dependency\Facade\PaymentsRestApiToPaymentFacadeBridge;
19
20
/**
21
 * Auto-generated group annotations
22
 *
23
 * @group SprykerTest
24
 * @group Zed
25
 * @group PaymentsRestApi
26
 * @group Business
27
 * @group Facade
28
 * @group PaymentsRestApiFacadeTest
29
 * Add your own group annotations below this line
30
 */
31
class PaymentsRestApiFacadeTest extends Unit
32
{
33
    /**
34
     * @var \SprykerTest\Zed\PaymentsRestApi\PaymentsRestApiBusinessTester
35
     */
36
    protected $tester;
37
38
    /**
39
     * @return void
40
     */
41
    public function testPaymentRestApiFacadeWillMapSinglePaymentToQuote(): void
42
    {
43
        /** @var \Spryker\Zed\PaymentsRestApi\Business\PaymentsRestApiFacadeInterface $paymentsRestApiFacade */
44
        $paymentsRestApiFacade = $this->tester->getFacade();
45
46
        $restCheckoutRequestAttributesTransfer = $this->prepareRestCheckoutRequestAttributesTransferWithSinglePayment();
47
        $quoteTransfer = $this->prepareQuoteTransfer();
48
49
        $actualQuote = $paymentsRestApiFacade->mapPaymentsToQuote($restCheckoutRequestAttributesTransfer, $quoteTransfer);
50
51
        $this->assertNotNull($actualQuote->getPayment());
52
        $this->assertCount(0, $actualQuote->getPayments());
53
    }
54
55
    /**
56
     * @return void
57
     */
58
    public function testPaymentRestApiFacadeWillMapSingleForeignPaymentToQuote(): void
59
    {
60
        // Arrange
61
        /** @var \Spryker\Zed\PaymentsRestApi\Business\PaymentsRestApiFacadeInterface $paymentsRestApiFacade */
62
        $paymentsRestApiFacade = $this->tester->getFacade();
63
64
        $restCheckoutRequestAttributesTransfer = $this->prepareRestCheckoutRequestAttributesTransferWithSingleForeignPayment();
65
        $quoteTransfer = $this->prepareQuoteTransfer();
66
67
        /** @var \Generated\Shared\Transfer\RestPaymentTransfer $restPaymentTransfer */
68
        $restPaymentTransfer = $restCheckoutRequestAttributesTransfer->getPayments()->offsetGet(0);
69
70
        $paymentFacadeBridgeMock = $this->createMock(PaymentsRestApiToPaymentFacadeBridge::class);
71
72
        $paymentFacadeBridgeMock
73
            ->method('expandPaymentWithPaymentSelection')
74
            ->willReturn((new PaymentTransfer())
75
                ->fromArray($restPaymentTransfer->toArray(), true)
76
                ->setPaymentSelection(sprintf(PaymentsRestApiConfig::PAYMENT_FOREIGN_PROVIDER . '[%s]', $restPaymentTransfer->getPaymentMethodName())));
77
78
        $factoryMock = $this->tester->mockFactoryMethod('getPaymentFacade', $paymentFacadeBridgeMock);
79
80
        $paymentsRestApiFacade->setFactory($factoryMock);
0 ignored issues
show
The method setFactory() does not exist on Spryker\Zed\PaymentsRest...sRestApiFacadeInterface. Since it exists in all sub-types, consider adding an abstract or default implementation to Spryker\Zed\PaymentsRest...sRestApiFacadeInterface. ( Ignorable by Annotation )

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

80
        $paymentsRestApiFacade->/** @scrutinizer ignore-call */ 
81
                                setFactory($factoryMock);
Loading history...
81
82
        // Act
83
        $actualQuote = $paymentsRestApiFacade->mapPaymentsToQuote($restCheckoutRequestAttributesTransfer, $quoteTransfer);
84
85
        // Assert
86
        $this->assertNotNull($actualQuote->getPayment());
87
        $this->assertStringContainsString(PaymentsRestApiConfig::PAYMENT_FOREIGN_PROVIDER, $actualQuote->getPayment()->getPaymentSelection());
88
        $this->assertCount(0, $actualQuote->getPayments());
89
    }
90
91
    /**
92
     * @return void
93
     */
94
    public function testPaymentRestApiFacadeWillMapNoPaymentsToQuote(): void
95
    {
96
        /** @var \Spryker\Zed\PaymentsRestApi\Business\PaymentsRestApiFacadeInterface $paymentsRestApiFacade */
97
        $paymentsRestApiFacade = $this->tester->getFacade();
98
99
        $restCheckoutRequestAttributesTransfer = $this->prepareRestCheckoutRequestAttributesTransferWithoutPayments();
100
        $quoteTransfer = $this->prepareQuoteTransfer();
101
102
        $actualQuote = $paymentsRestApiFacade->mapPaymentsToQuote($restCheckoutRequestAttributesTransfer, $quoteTransfer);
103
104
        $this->assertNull($actualQuote->getPayment());
105
        $this->assertCount(0, $actualQuote->getPayments());
106
    }
107
108
    /**
109
     * @return \Generated\Shared\Transfer\RestCheckoutRequestAttributesTransfer
110
     */
111
    protected function prepareRestCheckoutRequestAttributesTransferWithSinglePayment(): RestCheckoutRequestAttributesTransfer
112
    {
113
        /** @var \Generated\Shared\Transfer\RestCheckoutRequestAttributesTransfer $restCheckoutRequestAttributesTransfer */
114
        $restCheckoutRequestAttributesTransfer = (new RestCheckoutRequestAttributesBuilder())
115
            ->withPayment($this->prepareRestPayment())
116
            ->build();
117
118
        return $restCheckoutRequestAttributesTransfer;
119
    }
120
121
    /**
122
     * @return \Generated\Shared\Transfer\RestCheckoutRequestAttributesTransfer
123
     */
124
    protected function prepareRestCheckoutRequestAttributesTransferWithSingleForeignPayment(): RestCheckoutRequestAttributesTransfer
125
    {
126
        /** @var \Generated\Shared\Transfer\RestCheckoutRequestAttributesTransfer $restCheckoutRequestAttributesTransfer */
127
        $restCheckoutRequestAttributesTransfer = (new RestCheckoutRequestAttributesBuilder())
128
            ->withPayment($this->prepareForeignRestPayment())
129
            ->build();
130
131
        return $restCheckoutRequestAttributesTransfer;
132
    }
133
134
    /**
135
     * @return \Generated\Shared\Transfer\RestCheckoutRequestAttributesTransfer
136
     */
137
    protected function prepareRestCheckoutRequestAttributesTransferWithoutPayments(): RestCheckoutRequestAttributesTransfer
138
    {
139
        /** @var \Generated\Shared\Transfer\RestCheckoutRequestAttributesTransfer $restCheckoutRequestAttributesTransfer */
140
        $restCheckoutRequestAttributesTransfer = (new RestCheckoutRequestAttributesBuilder())->build();
141
142
        return $restCheckoutRequestAttributesTransfer;
143
    }
144
145
    /**
146
     * @return \Generated\Shared\Transfer\QuoteTransfer
147
     */
148
    protected function prepareQuoteTransfer(): QuoteTransfer
149
    {
150
        /** @var \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer */
151
        $quoteTransfer = (new QuoteBuilder())
152
            ->withStore()
153
            ->build();
154
155
        return $quoteTransfer;
156
    }
157
158
    /**
159
     * @return \Generated\Shared\DataBuilder\RestPaymentBuilder
160
     */
161
    protected function prepareRestPayment(): RestPaymentBuilder
162
    {
163
        return (new RestPaymentBuilder([
164
            'paymentProvider' => 'dummyPayment',
165
            'paymentMethod' => 'invoice',
166
            'paymentSelection' => 'dummyPaymentInvoice',
167
        ]));
168
    }
169
170
    /**
171
     * @return \Generated\Shared\DataBuilder\RestPaymentBuilder
172
     */
173
    protected function prepareForeignRestPayment(): RestPaymentBuilder
174
    {
175
        return (new RestPaymentBuilder([
176
            'paymentProvider' => 'foreignPayment',
177
            'paymentMethod' => 'foreignInvoice',
178
        ]));
179
    }
180
}
181