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\SalesPayment\Business\Facade; |
||||||
9 | |||||||
10 | use Codeception\Test\Unit; |
||||||
11 | use Generated\Shared\Transfer\OrderTransfer; |
||||||
12 | use Generated\Shared\Transfer\PaymentTransfer; |
||||||
13 | use Generated\Shared\Transfer\QuoteTransfer; |
||||||
14 | use Generated\Shared\Transfer\SalesPaymentTransfer; |
||||||
15 | use Generated\Shared\Transfer\SaveOrderTransfer; |
||||||
16 | use Generated\Shared\Transfer\TotalsTransfer; |
||||||
17 | use Spryker\Zed\SalesPayment\SalesPaymentDependencyProvider; |
||||||
18 | use Spryker\Zed\SalesPaymentExtension\Dependency\Plugin\OrderPaymentExpanderPluginInterface; |
||||||
19 | use SprykerTest\Shared\Testify\Helper\DependencyHelperTrait; |
||||||
20 | use SprykerTest\Zed\Sales\Helper\BusinessHelper; |
||||||
21 | |||||||
22 | /** |
||||||
23 | * Auto-generated group annotations |
||||||
24 | * |
||||||
25 | * @group SprykerTest |
||||||
26 | * @group Zed |
||||||
27 | * @group SalesPayment |
||||||
28 | * @group Business |
||||||
29 | * @group Facade |
||||||
30 | * @group Facade |
||||||
31 | * @group SalesPaymentFacadeTest |
||||||
32 | * Add your own group annotations below this line |
||||||
33 | * |
||||||
34 | * @property \SprykerTest\Zed\SalesPayment\SalesPaymentBusinessTester $tester |
||||||
35 | */ |
||||||
36 | class SalesPaymentFacadeTest extends Unit |
||||||
37 | { |
||||||
38 | use DependencyHelperTrait; |
||||||
39 | |||||||
40 | /** |
||||||
41 | * @var string |
||||||
42 | */ |
||||||
43 | protected const TEST_PROVIDER_ONE = 'Test one'; |
||||||
44 | |||||||
45 | /** |
||||||
46 | * @var string |
||||||
47 | */ |
||||||
48 | protected const TEST_PROVIDER_TWO = 'Test two'; |
||||||
49 | |||||||
50 | /** |
||||||
51 | * @var int |
||||||
52 | */ |
||||||
53 | protected const TEST_GRAND_TOTAL = 125; |
||||||
54 | |||||||
55 | /** |
||||||
56 | * @var string |
||||||
57 | */ |
||||||
58 | protected const ITEM_NAME = 'ITEM_NAME'; |
||||||
59 | |||||||
60 | /** |
||||||
61 | * @var string |
||||||
62 | */ |
||||||
63 | protected const CURRENCY_ISO_CODE = 'CODE'; |
||||||
64 | |||||||
65 | /** |
||||||
66 | * @var string |
||||||
67 | */ |
||||||
68 | protected const CUSTOMER_REFERENCE = 'CUSTOMER_REFERENCE'; |
||||||
69 | |||||||
70 | /** |
||||||
71 | * @var \Spryker\Zed\SalesPayment\Business\SalesPaymentFacadeInterface|\Spryker\Zed\Kernel\Business\AbstractFacade |
||||||
72 | */ |
||||||
73 | protected $salesPaymentFacade; |
||||||
74 | |||||||
75 | /** |
||||||
76 | * @return void |
||||||
77 | */ |
||||||
78 | protected function setUp(): void |
||||||
79 | { |
||||||
80 | parent::setUp(); |
||||||
81 | |||||||
82 | $this->salesPaymentFacade = $this->tester->getFacade(); |
||||||
83 | } |
||||||
84 | |||||||
85 | /** |
||||||
86 | * @return void |
||||||
87 | */ |
||||||
88 | public function testSaveOrderPaymentsPaymentTransfersHaveIdSalesPayment(): void |
||||||
89 | { |
||||||
90 | // Arrange |
||||||
91 | $this->tester->configureTestStateMachine([BusinessHelper::DEFAULT_OMS_PROCESS_NAME]); |
||||||
92 | $saveOrderTransfer = $this->tester->haveOrder([], BusinessHelper::DEFAULT_OMS_PROCESS_NAME); |
||||||
93 | |||||||
94 | $paymentTransferOne = (new PaymentTransfer()) |
||||||
95 | ->setAmount(100) |
||||||
96 | ->setPaymentProvider(static::TEST_PROVIDER_ONE) |
||||||
97 | ->setPaymentMethod('Method one'); |
||||||
98 | |||||||
99 | $paymentTransferTwo = (new PaymentTransfer()) |
||||||
100 | ->setAmount(150) |
||||||
101 | ->setPaymentProvider(static::TEST_PROVIDER_TWO) |
||||||
102 | ->setPaymentMethod('Method one'); |
||||||
103 | |||||||
104 | $quoteTransfer = (new QuoteTransfer()) |
||||||
105 | ->addPayment($paymentTransferOne) |
||||||
106 | ->addPayment($paymentTransferTwo); |
||||||
107 | |||||||
108 | // Act |
||||||
109 | $this->salesPaymentFacade->saveOrderPayments($quoteTransfer, $saveOrderTransfer); |
||||||
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||||||
110 | |||||||
111 | // Assert |
||||||
112 | foreach ($quoteTransfer->getPayments() as $paymentTransfer) { |
||||||
113 | $this->tester->assertIsSalesPaymentSaved($paymentTransfer); |
||||||
114 | } |
||||||
115 | } |
||||||
116 | |||||||
117 | /** |
||||||
118 | * @return void |
||||||
119 | */ |
||||||
120 | public function testExpandOrderWithPaymentsExecutePluginStack(): void |
||||||
121 | { |
||||||
122 | // Arrange |
||||||
123 | $this->tester->configureTestStateMachine([BusinessHelper::DEFAULT_OMS_PROCESS_NAME]); |
||||||
124 | $salesOrderEntityTransfer = $this->tester->haveOrder([], BusinessHelper::DEFAULT_OMS_PROCESS_NAME); |
||||||
125 | $orderTransfer = $this->createOrderTransfer($salesOrderEntityTransfer); |
||||||
126 | |||||||
127 | $salesPaymentExpanderPluginMock = $this->getMockBuilder(OrderPaymentExpanderPluginInterface::class) |
||||||
128 | ->getMock(); |
||||||
129 | $salesPaymentExpanderPluginMock->expects($this->exactly(2)) |
||||||
130 | ->method('expand') |
||||||
131 | ->willReturnCallback(function (OrderTransfer $orderTransfer, PaymentTransfer $paymentTransfer): PaymentTransfer { |
||||||
132 | return $paymentTransfer; |
||||||
133 | }); |
||||||
134 | |||||||
135 | $this->getDependencyHelper()->setDependency( |
||||||
136 | SalesPaymentDependencyProvider::SALES_PAYMENT_EXPANDER_PLUGINS, |
||||||
137 | [ |
||||||
138 | $salesPaymentExpanderPluginMock, |
||||||
139 | ], |
||||||
140 | ); |
||||||
141 | |||||||
142 | // Act |
||||||
143 | $this->assertCount(0, $orderTransfer->getPayments()); |
||||||
144 | $this->salesPaymentFacade->expandOrderWithPayments($orderTransfer); |
||||||
0 ignored issues
–
show
The method
expandOrderWithPayments() does not exist on Spryker\Zed\Kernel\Business\AbstractFacade . It seems like you code against a sub-type of Spryker\Zed\Kernel\Business\AbstractFacade such as Spryker\Zed\SalesPayment...ness\SalesPaymentFacade .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
145 | $this->assertCount(2, $orderTransfer->getPayments()); |
||||||
146 | } |
||||||
147 | |||||||
148 | /** |
||||||
149 | * @return void |
||||||
150 | */ |
||||||
151 | public function testExpandOrderWithPaymentsPriceToPayAmountIsNotAffected(): void |
||||||
152 | { |
||||||
153 | // Arrange |
||||||
154 | $this->tester->configureTestStateMachine([BusinessHelper::DEFAULT_OMS_PROCESS_NAME]); |
||||||
155 | $salesOrderEntityTransfer = $this->tester->haveOrder([], BusinessHelper::DEFAULT_OMS_PROCESS_NAME); |
||||||
156 | $orderTransfer = $this->createOrderTransfer($salesOrderEntityTransfer); |
||||||
157 | |||||||
158 | // Act |
||||||
159 | $this->salesPaymentFacade->expandOrderWithPayments($orderTransfer); |
||||||
160 | $this->assertSame(static::TEST_GRAND_TOTAL, $orderTransfer->getTotals()->getPriceToPay()); |
||||||
161 | } |
||||||
162 | |||||||
163 | /** |
||||||
164 | * @return void |
||||||
165 | */ |
||||||
166 | public function testExpandOrderWithPaymentsPriceToPayShouldNotBeEqualToGrandTotal(): void |
||||||
167 | { |
||||||
168 | // Arrange |
||||||
169 | $this->tester->configureTestStateMachine([BusinessHelper::DEFAULT_OMS_PROCESS_NAME]); |
||||||
170 | $salesOrderEntityTransfer = $this->tester->haveOrder([], BusinessHelper::DEFAULT_OMS_PROCESS_NAME); |
||||||
171 | $orderTransfer = $this->createOrderTransfer($salesOrderEntityTransfer); |
||||||
172 | $fakeAvailableAmount = 50; |
||||||
173 | |||||||
174 | $salesPaymentExpanderPluginMock = $this->getMockBuilder(OrderPaymentExpanderPluginInterface::class) |
||||||
175 | ->getMock(); |
||||||
176 | $salesPaymentExpanderPluginMock->expects($this->exactly(2)) |
||||||
177 | ->method('expand') |
||||||
178 | ->willReturnCallback(function (OrderTransfer $orderTransfer, PaymentTransfer $paymentTransfer) use ($fakeAvailableAmount): PaymentTransfer { |
||||||
179 | return $paymentTransfer->setIsLimitedAmount(true) |
||||||
180 | ->setAvailableAmount($fakeAvailableAmount); |
||||||
181 | }); |
||||||
182 | |||||||
183 | $this->getDependencyHelper()->setDependency( |
||||||
184 | SalesPaymentDependencyProvider::SALES_PAYMENT_EXPANDER_PLUGINS, |
||||||
185 | [ |
||||||
186 | $salesPaymentExpanderPluginMock, |
||||||
187 | ], |
||||||
188 | ); |
||||||
189 | |||||||
190 | // Act |
||||||
191 | $this->salesPaymentFacade->expandOrderWithPayments($orderTransfer); |
||||||
192 | $this->assertSame(static::TEST_GRAND_TOTAL - 2 * $fakeAvailableAmount, $orderTransfer->getTotals()->getPriceToPay()); |
||||||
193 | } |
||||||
194 | |||||||
195 | /** |
||||||
196 | * @param \Generated\Shared\Transfer\SaveOrderTransfer $salesOrderTransfer |
||||||
197 | * |
||||||
198 | * @return \Generated\Shared\Transfer\OrderTransfer |
||||||
199 | */ |
||||||
200 | protected function createOrderTransfer(SaveOrderTransfer $salesOrderTransfer): OrderTransfer |
||||||
201 | { |
||||||
202 | $totalsTransfer = new TotalsTransfer(); |
||||||
203 | $totalsTransfer->setGrandTotal(static::TEST_GRAND_TOTAL); |
||||||
204 | |||||||
205 | $orderTransfer = (new OrderTransfer()) |
||||||
206 | ->setIdSalesOrder($salesOrderTransfer->getIdSalesOrder()) |
||||||
207 | ->setTotals($totalsTransfer); |
||||||
208 | |||||||
209 | $salesPaymentTransferOne = (new SalesPaymentTransfer()) |
||||||
210 | ->setFkSalesOrder($salesOrderTransfer->getIdSalesOrder()) |
||||||
211 | ->setAmount(100) |
||||||
212 | ->setPaymentProvider(static::TEST_PROVIDER_ONE) |
||||||
213 | ->setPaymentMethod('Method one'); |
||||||
214 | |||||||
215 | $salesPaymentTransferTwo = (new SalesPaymentTransfer()) |
||||||
216 | ->setFkSalesOrder($salesOrderTransfer->getIdSalesOrder()) |
||||||
217 | ->setAmount(150) |
||||||
218 | ->setPaymentProvider(static::TEST_PROVIDER_TWO) |
||||||
219 | ->setPaymentMethod('Method one'); |
||||||
220 | |||||||
221 | $this->tester->haveSalesPaymentEntities([ |
||||||
222 | $salesPaymentTransferOne, |
||||||
223 | $salesPaymentTransferTwo, |
||||||
224 | ]); |
||||||
225 | |||||||
226 | return $orderTransfer; |
||||||
227 | } |
||||||
228 | } |
||||||
229 |