%PDF- %PDF-
| Direktori : /var/www/pjc/vendor/cknow/laravel-money/tests/ |
| Current File : /var/www/pjc/vendor/cknow/laravel-money/tests/MoneyTest.php |
<?php
namespace Cknow\Money\Tests;
use Cknow\Money\Money;
use Money\Currency;
class MoneyTest extends TestCase
{
public function testNullable()
{
static::assertEquals(new Money(), Money::USD(0));
static::assertEquals(new Money(null), Money::USD(0));
static::assertEquals(new Money(null, new Currency('USD')), Money::USD(0));
}
public function testConvert()
{
static::assertEquals(Money::USD(25), Money::convert(new \Money\Money(25, new Currency('USD'))));
static::assertEquals(Money::EUR(25), Money::convert(new \Money\Money(25, new Currency('EUR'))));
}
public function testMin()
{
static::assertEquals(Money::USD(10), Money::min(Money::USD(10), Money::USD(20), Money::USD(30)));
static::assertEquals(Money::EUR(10), Money::min(Money::EUR(10), Money::EUR(20), Money::EUR(30)));
}
public function testMax()
{
static::assertEquals(Money::USD(30), Money::max(Money::USD(10), Money::USD(20), Money::USD(30)));
static::assertEquals(Money::EUR(30), Money::max(Money::EUR(10), Money::EUR(20), Money::EUR(30)));
}
public function testAvg()
{
static::assertEquals(Money::USD(20), Money::avg(Money::USD(10), Money::USD(20), Money::USD(30)));
static::assertEquals(Money::EUR(20), Money::avg(Money::EUR(10), Money::EUR(20), Money::EUR(30)));
}
public function testSum()
{
static::assertEquals(Money::USD(60), Money::sum(Money::USD(10), Money::USD(20), Money::USD(30)));
static::assertEquals(Money::EUR(60), Money::sum(Money::EUR(10), Money::EUR(20), Money::EUR(30)));
}
public function testAdd()
{
static::assertEquals(Money::USD(25), Money::USD(10)->add(Money::USD(15)));
static::assertEquals(Money::USD(40), Money::USD(10)->add(Money::USD(15), Money::USD(15)));
static::assertEquals(Money::EUR(25), Money::EUR(10)->add(Money::EUR(15)));
static::assertEquals(Money::EUR(40), Money::EUR(10)->add(Money::EUR(15), Money::EUR(15)));
}
public function testSubtract()
{
static::assertEquals(Money::USD(20), Money::USD(25)->subtract(Money::USD(5)));
static::assertEquals(Money::USD(15), Money::USD(25)->subtract(Money::USD(5), Money::USD(5)));
static::assertEquals(Money::EUR(15), Money::EUR(20)->subtract(Money::EUR(5)));
static::assertEquals(Money::EUR(10), Money::EUR(20)->subtract(Money::EUR(5), Money::EUR(5)));
}
public function testMultiply()
{
static::assertEquals(Money::USD(10), Money::USD(5)->multiply(2));
static::assertEquals(Money::EUR(10), Money::EUR(5)->multiply(2));
}
public function testDivide()
{
static::assertEquals(Money::USD(10), Money::USD(20)->divide(2));
static::assertEquals(Money::EUR(10), Money::EUR(20)->divide(2));
}
public function testMod()
{
static::assertEquals(Money::USD(115), Money::USD(415)->mod(Money::USD(150)));
static::assertEquals(Money::EUR(230), Money::EUR(830)->mod(Money::EUR(300)));
}
public function testAbsolute()
{
static::assertEquals(Money::USD(10), Money::USD(-10)->absolute());
static::assertEquals(Money::EUR(10), Money::EUR(-10)->absolute());
}
public function testNegative()
{
static::assertEquals(Money::USD(-10), Money::USD(10)->negative());
static::assertEquals(Money::EUR(-10), Money::EUR(10)->negative());
}
public function testRatioOf()
{
static::assertEquals('20', (float) Money::USD(60)->ratioOf(Money::USD(3)));
static::assertEquals('15', (float) Money::EUR(30)->ratioOf(Money::EUR(2)));
}
public function testSameCurrency()
{
static::assertTrue(Money::USD(100)->isSameCurrency(Money::USD(200)));
static::assertFalse(Money::USD(100)->isSameCurrency(Money::EUR(200)));
}
public function testEquality()
{
static::assertTrue(Money::USD(100)->equals(Money::USD(100)));
static::assertFalse(Money::EUR(100)->equals(Money::EUR(200)));
}
public function testGreaterThan()
{
static::assertTrue(Money::USD(100)->greaterThan(Money::USD(50)));
static::assertFalse(Money::EUR(100)->greaterThan(Money::EUR(100)));
}
public function testGreaterThanOrEqual()
{
static::assertTrue(Money::USD(100)->greaterThanOrEqual(Money::USD(100)));
static::assertTrue(Money::USD(100)->greaterThanOrEqual(Money::USD(50)));
static::assertFalse(Money::EUR(100)->greaterThanOrEqual(Money::EUR(150)));
}
public function testLessThan()
{
static::assertTrue(Money::USD(50)->lessThan(Money::USD(100)));
static::assertFalse(Money::EUR(100)->lessThan(Money::EUR(100)));
}
public function testLessThanOrEqual()
{
static::assertTrue(Money::USD(100)->lessThanOrEqual(Money::USD(100)));
static::assertTrue(Money::USD(50)->lessThanOrEqual(Money::USD(100)));
static::assertFalse(Money::EUR(100)->lessThanOrEqual(Money::EUR(50)));
}
public function testValueSign()
{
static::assertTrue(Money::USD(0)->isZero());
static::assertTrue(Money::EUR(0)->isZero());
static::assertTrue(Money::USD(25)->isPositive());
static::assertTrue(Money::EUR(25)->isPositive());
static::assertTrue(Money::USD(-25)->isNegative());
static::assertTrue(Money::EUR(-25)->isNegative());
}
public function testAllocateTo()
{
static::assertEquals([Money::USD(5), Money::USD(5)], Money::USD(10)->allocateTo(2));
static::assertEquals([Money::EUR(5), Money::EUR(5)], Money::EUR(10)->allocateTo(2));
}
public function testCallUndefinedMethod()
{
static::assertEquals(Money::USD(15), Money::USD(15)->undefined());
}
public function testGetters()
{
$money = new Money(100, new Currency('USD'));
$actual = ['amount' => '100', 'currency' => 'USD', 'formatted' => '$1.00'];
static::assertInstanceOf(\Money\Money::class, $money->getMoney());
static::assertJson($money->toJson());
static::assertEquals($money->toArray(), $actual);
static::assertEquals($money->jsonSerialize(), $actual);
static::assertEquals('$1.00', $money->render());
static::assertEquals('$1.00', $money);
}
public function testSerializeWithAttributes()
{
$money = new Money(100, new Currency('USD'));
$money->attributes(['foo' => 'bar']);
static::assertEquals(
$money->jsonSerialize(),
['amount' => '100', 'currency' => 'USD', 'formatted' => '$1.00', 'foo' => 'bar']
);
}
public function testMacroable()
{
Money::macro('someMacro', function () {
return 'some-return-value';
});
$money = new Money(100, new Currency('USD'));
static::assertEquals(
'some-return-value',
$money->someMacro()
);
}
}