mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
273 lines
6.8 KiB
PHP
273 lines
6.8 KiB
PHP
|
<?php
|
|||
|
/**
|
|||
|
* Partially based on Zend_CurrencyTest.
|
|||
|
*
|
|||
|
* @copyright Copyright (c) 2006 Zend Technologies USA Inc. (http://www.zend.com)
|
|||
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
|||
|
* @version $Id: CurrencyTest.php 14644 2009-04-04 18:59:08Z thomas $
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @package sapphire
|
|||
|
* @subpackage tests
|
|||
|
*/
|
|||
|
class MoneyTest extends SapphireTest {
|
|||
|
|
|||
|
static $fixture_file = 'sapphire/tests/model/MoneyTest.yml';
|
|||
|
|
|||
|
/**
|
|||
|
* Write a Money object to the database, then re-read it to ensure it
|
|||
|
* is re-read properly.
|
|||
|
*/
|
|||
|
function testGettingWrittenDataObject() {
|
|||
|
$obj = new MoneyTest_DataObject();
|
|||
|
|
|||
|
$m = new Money();
|
|||
|
$m->setAmount(987.65);
|
|||
|
$m->setCurrency('USD');
|
|||
|
$obj->MyMoney = $m;
|
|||
|
$this->assertEquals("$987.65", $obj->MyMoney->Nice(),
|
|||
|
"Money field not added to data object properly when read prior to first writing the record."
|
|||
|
);
|
|||
|
|
|||
|
$objID = $obj->write();
|
|||
|
|
|||
|
$moneyTest = DataObject::get_by_id('MoneyTest_DataObject',$objID);
|
|||
|
$this->assertTrue($moneyTest instanceof MoneyTest_DataObject);
|
|||
|
$this->assertEquals('USD', $moneyTest->MyMoneyCurrency);
|
|||
|
$this->assertEquals(987.65, $moneyTest->MyMoneyAmount);
|
|||
|
$this->assertEquals("$987.65", $moneyTest->MyMoney->Nice(),
|
|||
|
"Money field not added to data object properly when read."
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
public function testToCurrency() {
|
|||
|
$USD = new Money();
|
|||
|
$USD->setCurrency('USD');
|
|||
|
$USD->setLocale('en_US');
|
|||
|
|
|||
|
$EGP = new Money();
|
|||
|
$EGP->setCurrency('EGP');
|
|||
|
$EGP->setLocale('ar_EG');
|
|||
|
|
|||
|
$USD->setAmount(53292.18);
|
|||
|
$this->assertSame('$53,292.18', $USD->Nice());
|
|||
|
$USD->setAmount(53292.18);
|
|||
|
$this->assertSame('$٥٣,٢٩٢.١٨', $USD->Nice(array('script' => 'Arab' )));
|
|||
|
$USD->setAmount(53292.18);
|
|||
|
$this->assertSame('$ ٥٣.٢٩٢,١٨', $USD->Nice(array('script' => 'Arab', 'format' => 'de_AT')));
|
|||
|
$USD->setAmount(53292.18);
|
|||
|
$this->assertSame('$ 53.292,18', $USD->Nice(array('format' => 'de_AT')));
|
|||
|
|
|||
|
$EGP->setAmount(53292.18);
|
|||
|
$this->assertSame('ج.م. 53٬292٫18', $EGP->Nice());
|
|||
|
$EGP->setAmount(53292.18);
|
|||
|
$this->assertSame('ج.م. ٥٣٬٢٩٢٫١٨', $EGP->Nice(array('script' => 'Arab' )));
|
|||
|
$EGP->setAmount(53292.18);
|
|||
|
$this->assertSame('ج.م. ٥٣.٢٩٢,١٨', $EGP->Nice(array('script' =>'Arab', 'format' => 'de_AT')));
|
|||
|
$EGP->setAmount(53292.18);
|
|||
|
$this->assertSame('ج.م. 53.292,18', $EGP->Nice(array('format' => 'de_AT')));
|
|||
|
|
|||
|
$USD = new Money();
|
|||
|
$USD->setLocale('en_US');
|
|||
|
$USD->setAmount(53292.18);
|
|||
|
$this->assertSame('$53,292.18', $USD->Nice());
|
|||
|
/*
|
|||
|
try {
|
|||
|
$this->assertSame('$ 53,292.18', $USD->Nice('nocontent'));
|
|||
|
$this->fail("No currency expected");
|
|||
|
} catch (Exception $e) {
|
|||
|
$this->assertContains("has to be numeric", $e->getMessage());
|
|||
|
}
|
|||
|
*/
|
|||
|
|
|||
|
/*
|
|||
|
$INR = new Money();
|
|||
|
$INR->setLocale('de_AT');
|
|||
|
$INR->setCurrency('INR');
|
|||
|
$INR->setAmount(1.2);
|
|||
|
$this->assertSame('Rs. 1,20', $INR->Nice());
|
|||
|
$INR->setAmount(1);
|
|||
|
$this->assertSame('Re. 1,00', $INR->Nice());
|
|||
|
$INR->setAmount(0);
|
|||
|
$this->assertSame('Rs. 0,00', $INR->Nice());
|
|||
|
$INR->setAmount(-3);
|
|||
|
$this->assertSame('-Rs. 3,00', $INR->Nice());
|
|||
|
*/
|
|||
|
}
|
|||
|
|
|||
|
public function testGetSign() {
|
|||
|
$EGP = new Money();
|
|||
|
$EGP->setValue(array(
|
|||
|
'Currency' => 'EGP',
|
|||
|
'Amount' => 3.44
|
|||
|
));
|
|||
|
$EGP->setLocale('ar_EG');
|
|||
|
|
|||
|
$this->assertSame('ج.م.', $EGP->getSymbol('EGP','ar_EG'));
|
|||
|
$this->assertSame('€', $EGP->getSymbol('EUR','de_AT'));
|
|||
|
$this->assertSame('ج.م.', $EGP->getSymbol(null, 'ar_EG'));
|
|||
|
//$this->assertSame('€', $EGP->getSymbol(null, 'de_AT'));
|
|||
|
$this->assertSame('ج.م.', $EGP->getSymbol());
|
|||
|
|
|||
|
try {
|
|||
|
$EGP->getSymbol('EGP', 'de_XX');
|
|||
|
$this->setExpectedException("Exception");
|
|||
|
} catch(Exception $e) {
|
|||
|
}
|
|||
|
|
|||
|
$EUR = new Money();
|
|||
|
$EUR->setValue(array(
|
|||
|
'Currency' => 'EUR',
|
|||
|
'Amount' => 3.44
|
|||
|
));
|
|||
|
$EUR->setLocale('de_DE');
|
|||
|
$this->assertSame('€', $EUR->getSymbol());
|
|||
|
}
|
|||
|
|
|||
|
public function testGetName()
|
|||
|
{
|
|||
|
$m = new Money();
|
|||
|
$m->setValue(array(
|
|||
|
'Currency' => 'EUR',
|
|||
|
'Amount' => 3.44
|
|||
|
));
|
|||
|
$m->setLocale('ar_EG');
|
|||
|
|
|||
|
$this->assertSame('جنيه مصرى', $m->getName('EGP','ar_EG'));
|
|||
|
$this->assertSame('Estnische Krone', $m->getName('EEK','de_AT'));
|
|||
|
//$this->assertSame('جنيه مصرى', $m->getName(null, 'ar_EG'));
|
|||
|
//$this->assertSame('Euro', $m->getName('de_AT'));
|
|||
|
$this->assertSame('يورو', $m->getName());
|
|||
|
|
|||
|
try {
|
|||
|
$m->getName('EGP', 'xy_XY');
|
|||
|
$this->setExpectedException("Exception");
|
|||
|
} catch(Exception $e) {
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public function testGetShortName() {
|
|||
|
$m = new Money();
|
|||
|
$m->setValue(array(
|
|||
|
'Currency' => 'EUR',
|
|||
|
'Amount' => 3.44
|
|||
|
));
|
|||
|
$m->setLocale('de_AT');
|
|||
|
|
|||
|
$this->assertSame('EUR', $m->getShortName('Euro', 'de_AT'));
|
|||
|
$this->assertSame('USD', $m->getShortName('US-Dollar','de_AT'));
|
|||
|
//$this->assertSame('EUR', $m->getShortName(null, 'de_AT'));
|
|||
|
$this->assertSame('EUR', $m->getShortName());
|
|||
|
|
|||
|
try {
|
|||
|
$m->getShortName('EUR', 'xy_ZT');
|
|||
|
$this->setExpectedException("Exception");
|
|||
|
} catch(Exception $e) {
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function testSetValueAsArray() {
|
|||
|
$m = new Money();
|
|||
|
$m->setValue(array(
|
|||
|
'Currency' => 'EUR',
|
|||
|
'Amount' => 3.44
|
|||
|
));
|
|||
|
$this->assertEquals(
|
|||
|
$m->getCurrency(),
|
|||
|
'EUR'
|
|||
|
);
|
|||
|
$this->assertEquals(
|
|||
|
$m->getAmount(),
|
|||
|
3.44
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
function testSetValueAsMoney() {
|
|||
|
$m1 = new Money();
|
|||
|
$m1->setValue(array(
|
|||
|
'Currency' => 'EUR',
|
|||
|
'Amount' => 3.44
|
|||
|
));
|
|||
|
$m2 = new Money();
|
|||
|
$m2->setValue($m1);
|
|||
|
$this->assertEquals(
|
|||
|
$m2->getCurrency(),
|
|||
|
'EUR'
|
|||
|
);
|
|||
|
$this->assertEquals(
|
|||
|
$m2->getAmount(),
|
|||
|
3.44
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
function testHasValue() {
|
|||
|
$m1 = new Money();
|
|||
|
$this->assertFalse($m1->hasValue());
|
|||
|
|
|||
|
$m2 = new Money();
|
|||
|
$m2->setValue(array(
|
|||
|
'Currency' => 'EUR',
|
|||
|
'Amount' => 3.44
|
|||
|
));
|
|||
|
$this->assertTrue($m2->hasValue());
|
|||
|
|
|||
|
$m3 = new Money();
|
|||
|
$m3->setValue(array(
|
|||
|
'Currency' => 'EUR',
|
|||
|
'Amount' => 0
|
|||
|
));
|
|||
|
$this->assertTrue($m3->hasValue());
|
|||
|
}
|
|||
|
|
|||
|
function testLoadIntoDataObject() {
|
|||
|
$obj = new MoneyTest_DataObject();
|
|||
|
|
|||
|
$this->assertType('Money', $obj->obj('MyMoney'));
|
|||
|
|
|||
|
$m = new Money();
|
|||
|
$m->setValue(array(
|
|||
|
'Currency' => 'EUR',
|
|||
|
'Amount' => 1.23
|
|||
|
));
|
|||
|
$obj->MyMoney = $m;
|
|||
|
|
|||
|
$this->assertEquals($obj->MyMoney->getCurrency(), 'EUR');
|
|||
|
$this->assertEquals($obj->MyMoney->getAmount(), 1.23);
|
|||
|
}
|
|||
|
|
|||
|
function testWriteToDataObject() {
|
|||
|
$obj = new MoneyTest_DataObject();
|
|||
|
$m = new Money();
|
|||
|
$m->setValue(array(
|
|||
|
'Currency' => 'EUR',
|
|||
|
'Amount' => 1.23
|
|||
|
));
|
|||
|
$obj->MyMoney = $m;
|
|||
|
$obj->write();
|
|||
|
|
|||
|
$this->assertEquals(
|
|||
|
'EUR',
|
|||
|
DB::query(sprintf(
|
|||
|
'SELECT "MyMoneyCurrency" FROM "MoneyTest_DataObject" WHERE "ID" = %d',
|
|||
|
$obj->ID
|
|||
|
))->value()
|
|||
|
);
|
|||
|
$this->assertEquals(
|
|||
|
'1.23',
|
|||
|
DB::query(sprintf(
|
|||
|
'SELECT "MyMoneyAmount" FROM "MoneyTest_DataObject" WHERE "ID" = %d',
|
|||
|
$obj->ID
|
|||
|
))->value()
|
|||
|
);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
class MoneyTest_DataObject extends DataObject implements TestOnly {
|
|||
|
static $db = array(
|
|||
|
'MyMoney' => 'Money',
|
|||
|
//'MyOtherMoney' => 'Money',
|
|||
|
);
|
|||
|
|
|||
|
}
|
|||
|
?>
|