%PDF- %PDF-
| Direktori : /var/www/pjc/vendor/cknow/laravel-money/tests/ |
| Current File : /var/www/pjc/vendor/cknow/laravel-money/tests/MoneyFormatterTraitTest.php |
<?php
namespace Cknow\Money\Tests;
use Cknow\Money\Formatters\CurrencySymbolMoneyFormatter;
use Cknow\Money\Money;
use InvalidArgumentException;
use Money\Currencies\BitcoinCurrencies;
use Money\Formatter\BitcoinMoneyFormatter;
use Money\Formatter\DecimalMoneyFormatter;
use Money\Formatter\IntlLocalizedDecimalFormatter;
use Money\Formatter\IntlMoneyFormatter;
use NumberFormatter as N;
class MoneyFormatterTraitTest extends TestCase
{
public function testFormat()
{
static::assertEquals('$1.00', Money::USD(100)->format());
static::assertEquals('€1.00', Money::EUR(100)->format());
static::assertEquals('€1.00', Money::EUR(100)->format('en_US'));
static::assertEquals('$1.00', Money::USD(100)->format('en_US', Money::getCurrencies(), N::CURRENCY));
static::assertEquals('1,99', Money::EUR(199)->format('fr_FR', Money::getCurrencies(), N::DECIMAL));
static::assertEquals('1', Money::USD(100)->format('en_US', Money::getCurrencies(), N::DECIMAL));
}
public function testDefaultFormatter()
{
config(['money.defaultFormatter' => null]);
static::assertEquals('$1.00', Money::USD(100)->format());
config(['money.defaultFormatter' => CurrencySymbolMoneyFormatter::class]);
static::assertEquals('$1.00', Money::USD(100)->format());
config(['money.defaultFormatter' => [CurrencySymbolMoneyFormatter::class, ['right' => true]]]);
static::assertEquals('1.00$', Money::USD(100)->format());
config(['money.defaultFormatter' => [BitcoinMoneyFormatter::class, ['fractionDigits' => 2, 'currencies' => new BitcoinCurrencies()]]]);
static::assertEquals("\xC9\x830.41", Money::XBT(41000000)->format());
}
public function testInvalidDefaultFormatter()
{
$defaultFormatter = [BitcoinMoneyFormatter::class];
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Invalid default formatter '.json_encode($defaultFormatter));
config(['money.defaultFormatter' => $defaultFormatter]);
static::assertEquals('$1.00', Money::USD(100)->format());
}
public function testFormatByAggregate()
{
$formatters = [
'XBT' => new BitcoinMoneyFormatter(2, new BitcoinCurrencies()),
'EUR' => new DecimalMoneyFormatter(Money::getCurrencies()),
'USD' => new IntlLocalizedDecimalFormatter(new N('en_US', N::DECIMAL), Money::getCurrencies()),
'BRL' => new IntlMoneyFormatter(new N('pt_BR', N::DECIMAL), Money::getCurrencies()),
];
static::assertEquals("\xC9\x831000.00", Money::XBT(100000000000)->formatByAggregate($formatters));
static::assertEquals('1.00', Money::EUR(100)->formatByAggregate($formatters));
static::assertEquals('1', Money::USD(100)->formatByAggregate($formatters));
static::assertEquals('5', Money::BRL(500)->formatByAggregate($formatters));
}
public function testFormatByBitcoin()
{
static::assertEquals("\xC9\x835", Money::XBT(500000000)->formatByBitcoin(0));
static::assertEquals("\xC9\x830.41", Money::XBT(41000000)->formatByBitcoin(2));
static::assertEquals("\xC9\x8310.0000", Money::XBT(1000000000)->formatByBitcoin(4, new BitcoinCurrencies()));
}
public function testFormatByCurrencySymbol()
{
static::assertEquals('$1.00', Money::USD(100)->formatByCurrencySymbol());
static::assertEquals('1.00$', Money::USD(100)->formatByCurrencySymbol(true));
}
public function testFormatByDecimal()
{
static::assertEquals('1.00', Money::USD(100)->formatByDecimal(Money::getCurrencies()));
static::assertEquals('1.00', Money::USD(100)->formatByDecimal());
}
public function testFormatByIntl()
{
static::assertEquals('$1.00', Money::USD(100)->formatByIntl());
static::assertEquals('€1.00', Money::EUR(100)->formatByIntl());
static::assertEquals('€1.00', Money::EUR(100)->formatByIntl('en_US'));
static::assertEquals('$1.00', Money::USD(100)->formatByIntl('en_US', Money::getCurrencies(), N::CURRENCY));
static::assertEquals('1,99', Money::EUR(199)->formatByIntl('fr_FR', Money::getCurrencies(), N::DECIMAL));
static::assertEquals('1', Money::USD(100)->formatByIntl('en_US', Money::getCurrencies(), N::DECIMAL));
}
public function testFormatByIntlLocalizedDecimal()
{
static::assertEquals(
'$1.00',
Money::USD(100)->formatByIntlLocalizedDecimal()
);
static::assertEquals(
'$1.00',
Money::USD(100)->formatByIntlLocalizedDecimal('en_US', Money::getCurrencies(), N::CURRENCY)
);
static::assertEquals(
'1,99',
Money::EUR(199)->formatByIntlLocalizedDecimal('fr_FR', Money::getCurrencies(), N::DECIMAL)
);
static::assertEquals(
'1',
Money::USD(100)->formatByIntlLocalizedDecimal('en_US', Money::getCurrencies(), N::DECIMAL)
);
}
public function testFormatByFormatter()
{
$formatter = new DecimalMoneyFormatter(Money::getCurrencies());
static::assertEquals('1.00', Money::USD(100)->formatByFormatter($formatter));
}
}