forked from moneyphp/money
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathConverterSpec.php
69 lines (53 loc) · 2.26 KB
/
ConverterSpec.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
namespace spec\Money;
use Money\Converter;
use Money\Currencies;
use Money\Currency;
use Money\CurrencyPair;
use Money\Exchange;
use Money\Money;
use PhpSpec\ObjectBehavior;
final class ConverterSpec extends ObjectBehavior
{
function let(Currencies $currencies, Exchange $exchange)
{
$this->beConstructedWith($currencies, $exchange);
}
function it_is_initializable()
{
$this->shouldHaveType(Converter::class);
}
function it_converts_to_a_different_currency(Currencies $currencies, Exchange $exchange) {
$baseCurrency = new Currency($baseCurrencyCode = 'ABC');
$counterCurrency = new Currency($counterCurrencyCode = 'XYZ');
$pair = new CurrencyPair($baseCurrency, $counterCurrency, 0.5);
$currencies->subunitFor($baseCurrency)->willReturn(100);
$currencies->subunitFor($counterCurrency)->willReturn(100);
$exchange->quote($baseCurrency, $counterCurrency)->willReturn($pair);
$money = $this->convert(
new Money(2, new Currency($baseCurrencyCode)),
$counterCurrency
);
$money->shouldHaveType(Money::class);
$money->getAmount()->shouldBe('1');
$money->getCurrency()->getCode()->shouldBe($counterCurrencyCode);
}
function it_converts_using_rounding_modes(Currencies $currencies, Exchange $exchange)
{
$baseCurrency = new Currency('EUR');
$counterCurrency = new Currency('USD');
$pair = new CurrencyPair($baseCurrency, $counterCurrency, 1.25);
$currencies->subunitFor($baseCurrency)->willReturn(2);
$currencies->subunitFor($counterCurrency)->willReturn(2);
$exchange->quote($baseCurrency, $counterCurrency)->willReturn($pair);
$money = new Money(10, $baseCurrency);
$resultMoney = $this->convert($money, $counterCurrency);
$resultMoney->shouldHaveType(Money::class);
$resultMoney->getAmount()->shouldBeLike(13);
$resultMoney->getCurrency()->getCode()->shouldReturn('USD');
$resultMoney = $this->convert($money, $counterCurrency, PHP_ROUND_HALF_DOWN);
$resultMoney->shouldHaveType(Money::class);
$resultMoney->getAmount()->shouldBeLike(12);
$resultMoney->getCurrency()->getCode()->shouldReturn('USD');
}
}