mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
Add tests for edge cases in CurrencyField
This commit is contained in:
parent
8929b8204f
commit
d56bad7568
@ -39,9 +39,8 @@ class CurrencyField extends TextField
|
|||||||
{
|
{
|
||||||
if ($this->value) {
|
if ($this->value) {
|
||||||
return preg_replace('/[^0-9.\-]/', '', $this->value);
|
return preg_replace('/[^0-9.\-]/', '', $this->value);
|
||||||
} else {
|
|
||||||
return 0.00;
|
|
||||||
}
|
}
|
||||||
|
return 0.00;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Type()
|
public function Type()
|
||||||
@ -54,7 +53,7 @@ class CurrencyField extends TextField
|
|||||||
*/
|
*/
|
||||||
public function performReadonlyTransformation()
|
public function performReadonlyTransformation()
|
||||||
{
|
{
|
||||||
return $this->castedCopy('SilverStripe\\Forms\\CurrencyField_Readonly');
|
return $this->castedCopy(CurrencyField_Readonly::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function validate($validator)
|
public function validate($validator)
|
||||||
|
@ -5,6 +5,7 @@ namespace SilverStripe\Forms\Tests;
|
|||||||
use SilverStripe\Core\Config\Config;
|
use SilverStripe\Core\Config\Config;
|
||||||
use SilverStripe\Dev\SapphireTest;
|
use SilverStripe\Dev\SapphireTest;
|
||||||
use SilverStripe\Forms\CurrencyField;
|
use SilverStripe\Forms\CurrencyField;
|
||||||
|
use SilverStripe\Forms\CurrencyField_Readonly;
|
||||||
use SilverStripe\Forms\RequiredFields;
|
use SilverStripe\Forms\RequiredFields;
|
||||||
use SilverStripe\ORM\FieldType\DBCurrency;
|
use SilverStripe\ORM\FieldType\DBCurrency;
|
||||||
|
|
||||||
@ -124,56 +125,56 @@ class CurrencyFieldTest extends SapphireTest
|
|||||||
//tests with default currency symbol setting
|
//tests with default currency symbol setting
|
||||||
$f->setValue('123.45');
|
$f->setValue('123.45');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'$123.45',
|
'$123.45',
|
||||||
'Prepends dollar sign to positive decimal'
|
'Prepends dollar sign to positive decimal'
|
||||||
);
|
);
|
||||||
|
|
||||||
$f->setValue('-123.45');
|
$f->setValue('-123.45');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'$-123.45',
|
'$-123.45',
|
||||||
'Prepends dollar sign to negative decimal'
|
'Prepends dollar sign to negative decimal'
|
||||||
);
|
);
|
||||||
|
|
||||||
$f->setValue('$1');
|
$f->setValue('$1');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'$1.00',
|
'$1.00',
|
||||||
'Formats small value'
|
'Formats small value'
|
||||||
);
|
);
|
||||||
|
|
||||||
$f->setValue('$2.5');
|
$f->setValue('$2.5');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'$2.50',
|
'$2.50',
|
||||||
'Formats small value'
|
'Formats small value'
|
||||||
);
|
);
|
||||||
|
|
||||||
$f->setValue('$2500000.13');
|
$f->setValue('$2500000.13');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'$2,500,000.13',
|
'$2,500,000.13',
|
||||||
'Formats large value'
|
'Formats large value'
|
||||||
);
|
);
|
||||||
|
|
||||||
$f->setValue('$2.50000013');
|
$f->setValue('$2.50000013');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'$2.50',
|
'$2.50',
|
||||||
'Truncates long decimal portions'
|
'Truncates long decimal portions'
|
||||||
);
|
);
|
||||||
|
|
||||||
$f->setValue('test123.00test');
|
$f->setValue('test123.00test');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'$123.00',
|
'$123.00',
|
||||||
'Strips alpha values'
|
'Strips alpha values'
|
||||||
);
|
);
|
||||||
|
|
||||||
$f->setValue('test');
|
$f->setValue('test');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'$0.00',
|
'$0.00',
|
||||||
'Does not set alpha values'
|
'Does not set alpha values'
|
||||||
);
|
);
|
||||||
@ -183,56 +184,56 @@ class CurrencyFieldTest extends SapphireTest
|
|||||||
|
|
||||||
$f->setValue('123.45');
|
$f->setValue('123.45');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'€123.45',
|
'€123.45',
|
||||||
'Prepends dollar sign to positive decimal'
|
'Prepends dollar sign to positive decimal'
|
||||||
);
|
);
|
||||||
|
|
||||||
$f->setValue('-123.45');
|
$f->setValue('-123.45');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'€-123.45',
|
'€-123.45',
|
||||||
'Prepends dollar sign to negative decimal'
|
'Prepends dollar sign to negative decimal'
|
||||||
);
|
);
|
||||||
|
|
||||||
$f->setValue('€1');
|
$f->setValue('€1');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'€1.00',
|
'€1.00',
|
||||||
'Formats small value'
|
'Formats small value'
|
||||||
);
|
);
|
||||||
|
|
||||||
$f->setValue('€2.5');
|
$f->setValue('€2.5');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'€2.50',
|
'€2.50',
|
||||||
'Formats small value'
|
'Formats small value'
|
||||||
);
|
);
|
||||||
|
|
||||||
$f->setValue('€2500000.13');
|
$f->setValue('€2500000.13');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'€2,500,000.13',
|
'€2,500,000.13',
|
||||||
'Formats large value'
|
'Formats large value'
|
||||||
);
|
);
|
||||||
|
|
||||||
$f->setValue('€2.50000013');
|
$f->setValue('€2.50000013');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'€2.50',
|
'€2.50',
|
||||||
'Truncates long decimal portions'
|
'Truncates long decimal portions'
|
||||||
);
|
);
|
||||||
|
|
||||||
$f->setValue('test123.00test');
|
$f->setValue('test123.00test');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'€123.00',
|
'€123.00',
|
||||||
'Strips alpha values'
|
'Strips alpha values'
|
||||||
);
|
);
|
||||||
|
|
||||||
$f->setValue('test');
|
$f->setValue('test');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$f->value,
|
$f->Value(),
|
||||||
'€0.00',
|
'€0.00',
|
||||||
'Does not set alpha values'
|
'Does not set alpha values'
|
||||||
);
|
);
|
||||||
@ -282,4 +283,30 @@ class CurrencyFieldTest extends SapphireTest
|
|||||||
-123.45
|
-123.45
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testDataValueReturnsEmptyFloat()
|
||||||
|
{
|
||||||
|
$field = new CurrencyField('Test', '', null);
|
||||||
|
$this->assertSame(0.00, $field->dataValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPerformReadonlyTransformation()
|
||||||
|
{
|
||||||
|
$field = new CurrencyField('Test');
|
||||||
|
$result = $field->performReadonlyTransformation();
|
||||||
|
$this->assertInstanceOf(CurrencyField_Readonly::class, $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInvalidCurrencySymbol()
|
||||||
|
{
|
||||||
|
$field = new CurrencyField('Test', '', '$5.00');
|
||||||
|
$validator = new RequiredFields();
|
||||||
|
|
||||||
|
DBCurrency::config()->update('currency_symbol', '€');
|
||||||
|
$result = $field->validate($validator);
|
||||||
|
|
||||||
|
$this->assertFalse($result, 'Validation should fail since wrong currency was used');
|
||||||
|
$this->assertFalse($validator->getResult()->isValid(), 'Validator should receive failed state');
|
||||||
|
$this->assertContains('Please enter a valid currency', $validator->getResult()->serialize());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user