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\Shared\Money\Builder; |
||||
9 | |||||
10 | use Codeception\Test\Unit; |
||||
11 | use Generated\Shared\Transfer\CurrencyTransfer; |
||||
12 | use Generated\Shared\Transfer\MoneyTransfer; |
||||
13 | use Money\Money; |
||||
14 | use Spryker\Shared\Money\Builder\MoneyBuilder; |
||||
15 | use Spryker\Shared\Money\Builder\MoneyBuilderInterface; |
||||
16 | use Spryker\Shared\Money\Converter\DecimalToIntegerConverter; |
||||
17 | use Spryker\Shared\Money\Exception\InvalidAmountArgumentException; |
||||
18 | use Spryker\Shared\Money\Mapper\MoneyToTransferMapperInterface; |
||||
19 | |||||
20 | /** |
||||
21 | * Auto-generated group annotations |
||||
22 | * |
||||
23 | * @group SprykerTest |
||||
24 | * @group Shared |
||||
25 | * @group Money |
||||
26 | * @group Builder |
||||
27 | * @group MoneyBuilderTest |
||||
28 | * Add your own group annotations below this line |
||||
29 | */ |
||||
30 | class MoneyBuilderTest extends Unit |
||||
31 | { |
||||
32 | /** |
||||
33 | * @var string |
||||
34 | */ |
||||
35 | public const DEFAULT_CURRENCY = 'EUR'; |
||||
36 | |||||
37 | /** |
||||
38 | * @var int |
||||
39 | */ |
||||
40 | public const AMOUNT_INTEGER = 1000; |
||||
41 | |||||
42 | public const AMOUNT_FLOAT = 10.00; |
||||
43 | |||||
44 | /** |
||||
45 | * @var string |
||||
46 | */ |
||||
47 | public const AMOUNT_STRING = '1000'; |
||||
48 | |||||
49 | /** |
||||
50 | * @var string |
||||
51 | */ |
||||
52 | public const OTHER_CURRENCY = 'USD'; |
||||
53 | |||||
54 | /** |
||||
55 | * @return void |
||||
56 | */ |
||||
57 | public function testConstruct(): void |
||||
58 | { |
||||
59 | $moneyBuilder = $this->getMoneyBuilder(); |
||||
60 | $this->assertInstanceOf(MoneyBuilderInterface::class, $moneyBuilder); |
||||
61 | } |
||||
62 | |||||
63 | /** |
||||
64 | * @return void |
||||
65 | */ |
||||
66 | public function testFromIntegerWithoutCurrencyShouldReturnMoneyTransferWithDefaultCurrency(): void |
||||
67 | { |
||||
68 | $moneyBuilder = $this->getMoneyBuilder(); |
||||
69 | |||||
70 | $moneyTransfer = $moneyBuilder->fromInteger(static::AMOUNT_INTEGER); |
||||
71 | $this->assertSame(static::AMOUNT_STRING, $moneyTransfer->getAmount()); |
||||
72 | $this->assertSame(static::DEFAULT_CURRENCY, $moneyTransfer->getCurrency()->getCode()); |
||||
73 | } |
||||
74 | |||||
75 | /** |
||||
76 | * @return void |
||||
77 | */ |
||||
78 | public function testFromIntegerWithCurrencyShouldReturnMoneyTransfer(): void |
||||
79 | { |
||||
80 | $moneyBuilder = $this->getMoneyBuilder(); |
||||
81 | |||||
82 | $moneyTransfer = $moneyBuilder->fromInteger(static::AMOUNT_INTEGER, static::OTHER_CURRENCY); |
||||
83 | $this->assertSame(static::AMOUNT_STRING, $moneyTransfer->getAmount()); |
||||
84 | $this->assertSame(static::OTHER_CURRENCY, $moneyTransfer->getCurrency()->getCode()); |
||||
85 | } |
||||
86 | |||||
87 | /** |
||||
88 | * @return void |
||||
89 | */ |
||||
90 | public function testFromIntegerWithoutIntegerShouldThrowException(): void |
||||
91 | { |
||||
92 | $this->expectException(InvalidAmountArgumentException::class); |
||||
93 | |||||
94 | $moneyBuilder = $this->getMoneyBuilder(); |
||||
95 | $moneyBuilder->fromInteger(static::AMOUNT_STRING); |
||||
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||||
96 | } |
||||
97 | |||||
98 | /** |
||||
99 | * @return void |
||||
100 | */ |
||||
101 | public function testFromFloatWithoutCurrencyShouldReturnMoneyTransferWithDefaultCurrency(): void |
||||
102 | { |
||||
103 | $moneyBuilder = $this->getMoneyBuilder(); |
||||
104 | |||||
105 | $moneyTransfer = $moneyBuilder->fromFloat(static::AMOUNT_FLOAT); |
||||
106 | $this->assertSame(static::AMOUNT_STRING, $moneyTransfer->getAmount()); |
||||
107 | $this->assertSame(static::DEFAULT_CURRENCY, $moneyTransfer->getCurrency()->getCode()); |
||||
108 | } |
||||
109 | |||||
110 | /** |
||||
111 | * @return void |
||||
112 | */ |
||||
113 | public function testFromFloatWithCurrencyShouldReturnMoneyTransfer(): void |
||||
114 | { |
||||
115 | $moneyBuilder = $this->getMoneyBuilder(); |
||||
116 | |||||
117 | $moneyTransfer = $moneyBuilder->fromFloat(static::AMOUNT_FLOAT, static::OTHER_CURRENCY); |
||||
118 | $this->assertSame(static::AMOUNT_STRING, $moneyTransfer->getAmount()); |
||||
119 | $this->assertSame(static::OTHER_CURRENCY, $moneyTransfer->getCurrency()->getCode()); |
||||
120 | } |
||||
121 | |||||
122 | /** |
||||
123 | * @return void |
||||
124 | */ |
||||
125 | public function testFromFloatWithoutFloatShouldThrowException(): void |
||||
126 | { |
||||
127 | $this->expectException(InvalidAmountArgumentException::class); |
||||
128 | |||||
129 | $moneyBuilder = $this->getMoneyBuilder(); |
||||
130 | $moneyBuilder->fromFloat(static::AMOUNT_STRING); |
||||
0 ignored issues
–
show
static::AMOUNT_STRING of type string is incompatible with the type double expected by parameter $amount of Spryker\Shared\Money\Bui...neyBuilder::fromFloat() .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
131 | } |
||||
132 | |||||
133 | /** |
||||
134 | * @return void |
||||
135 | */ |
||||
136 | public function testFromStringWithoutCurrencyShouldReturnMoneyTransferWithDefaultCurrency(): void |
||||
137 | { |
||||
138 | $moneyBuilder = $this->getMoneyBuilder(); |
||||
139 | |||||
140 | $moneyTransfer = $moneyBuilder->fromString(static::AMOUNT_STRING); |
||||
141 | $this->assertSame(static::AMOUNT_STRING, $moneyTransfer->getAmount()); |
||||
142 | $this->assertSame(static::DEFAULT_CURRENCY, $moneyTransfer->getCurrency()->getCode()); |
||||
143 | } |
||||
144 | |||||
145 | /** |
||||
146 | * @return void |
||||
147 | */ |
||||
148 | public function testFromStringWithCurrencyShouldReturnMoneyTransfer(): void |
||||
149 | { |
||||
150 | $moneyBuilder = $this->getMoneyBuilder(); |
||||
151 | |||||
152 | $moneyTransfer = $moneyBuilder->fromString(static::AMOUNT_STRING, static::OTHER_CURRENCY); |
||||
153 | $this->assertSame(static::AMOUNT_STRING, $moneyTransfer->getAmount()); |
||||
154 | $this->assertSame(static::OTHER_CURRENCY, $moneyTransfer->getCurrency()->getCode()); |
||||
155 | } |
||||
156 | |||||
157 | /** |
||||
158 | * @return void |
||||
159 | */ |
||||
160 | public function testFromStringWithoutStringShouldThrowException(): void |
||||
161 | { |
||||
162 | $this->expectException(InvalidAmountArgumentException::class); |
||||
163 | |||||
164 | $moneyBuilder = $this->getMoneyBuilder(); |
||||
165 | $moneyBuilder->fromString(static::AMOUNT_INTEGER); |
||||
166 | } |
||||
167 | |||||
168 | /** |
||||
169 | * @return void |
||||
170 | */ |
||||
171 | public function testFromStringWithInvalidStringShouldThrowException(): void |
||||
172 | { |
||||
173 | $this->expectException(InvalidAmountArgumentException::class); |
||||
174 | |||||
175 | $moneyBuilder = $this->getMoneyBuilder(); |
||||
176 | $moneyBuilder->fromString(static::AMOUNT_STRING . '.00'); |
||||
177 | } |
||||
178 | |||||
179 | /** |
||||
180 | * @return \Spryker\Shared\Money\Mapper\MoneyToTransferMapperInterface|\PHPUnit\Framework\MockObject\MockObject |
||||
181 | */ |
||||
182 | protected function getMoneyToTransferConverterMock(): MoneyToTransferMapperInterface |
||||
183 | { |
||||
184 | $moneyToTransferConverterMock = $this->getMockBuilder(MoneyToTransferMapperInterface::class)->getMock(); |
||||
185 | $moneyToTransferConverterMock->method('convert')->willReturnCallback([$this, 'convert']); |
||||
186 | |||||
187 | return $moneyToTransferConverterMock; |
||||
188 | } |
||||
189 | |||||
190 | /** |
||||
191 | * @param \Money\Money $money |
||||
192 | * |
||||
193 | * @return \Generated\Shared\Transfer\MoneyTransfer |
||||
194 | */ |
||||
195 | public function convert(Money $money): MoneyTransfer |
||||
196 | { |
||||
197 | $moneyTransfer = new MoneyTransfer(); |
||||
198 | $moneyTransfer->setAmount($money->getAmount()); |
||||
199 | |||||
200 | $isoCodeTransfer = new CurrencyTransfer(); |
||||
201 | $isoCodeTransfer->setCode($money->getCurrency()->getCode()); |
||||
202 | $moneyTransfer->setCurrency($isoCodeTransfer); |
||||
203 | |||||
204 | return $moneyTransfer; |
||||
205 | } |
||||
206 | |||||
207 | /** |
||||
208 | * @return \Spryker\Shared\Money\Builder\MoneyBuilderInterface |
||||
209 | */ |
||||
210 | protected function getMoneyBuilder(): MoneyBuilderInterface |
||||
211 | { |
||||
212 | return new MoneyBuilder($this->getMoneyToTransferConverterMock(), new DecimalToIntegerConverter(), static::DEFAULT_CURRENCY); |
||||
213 | } |
||||
214 | } |
||||
215 |