Skip to content

Commit

Permalink
Merge 0664507 into d4d8d04
Browse files Browse the repository at this point in the history
  • Loading branch information
pierredup committed Nov 22, 2023
2 parents d4d8d04 + 0664507 commit 2c28631
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 4 deletions.
8 changes: 4 additions & 4 deletions src/MoneyBundle/Form/DataTransformer/ViewTransformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,18 @@ public function __construct(Currency $currency)
public function transform($value)
{
if ($value instanceof Money) {
return $value->getAmount() / 100;
return (float) ($value->getAmount() / 100);
}

return 0;
return 0.0;
}

public function reverseTransform($value): Money
{
if (null === $value) {
if (!is_numeric($value)) {
$value = 0;
}

return new Money(((int) $value * 100), $this->currency);
return new Money($value * 100, $this->currency);
}
}
78 changes: 78 additions & 0 deletions src/MoneyBundle/Tests/Form/DataTransformer/ViewTransformerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
<?php

namespace SolidInvoice\MoneyBundle\Tests\Form\DataTransformer;

use Money\Currency;
use Money\Money;
use SolidInvoice\MoneyBundle\Form\DataTransformer\ViewTransformer;
use PHPUnit\Framework\TestCase;

/**
* @covers \SolidInvoice\MoneyBundle\Form\DataTransformer\ViewTransformer
*/
final class ViewTransformerTest extends TestCase
{
private ViewTransformer $viewTransformer;

private Currency $currency;

protected function setUp(): void
{
$this->currency = new Currency("USD");
$this->viewTransformer = new ViewTransformer($this->currency);
}

/**
* @dataProvider reverseTransformDataProvider
*/
public function testReverseTransform(?float $value, int $expected): void
{
$expectedResult = new Money($expected, $this->currency);
$result = $this->viewTransformer->reverseTransform($value);

self::assertTrue($result->equals($expectedResult));
}

/**
* @param Money|string|null $money
* @param int|float $expected
*
* @dataProvider transformDataProvider
*/
public function testTransformsMoneyObjectToFloat($money, $expected): void
{
$value = $this->viewTransformer->transform($money);

self::assertSame($expected, $value);
}

public function reverseTransformDataProvider(): iterable
{
yield [null, 0];
yield [10, 1000];
yield [10.00, 1000];
yield [10.01, 1001];
yield [10.10, 1010];
yield [10.11, 1011];
yield [10.99, 1099];
yield [111, 11100];
yield [111.11, 11111];
yield [0.01, 1];
yield [0.10, 10];
yield [0.11, 11];
yield [0.99, 99];
}

public function transformDataProvider(): iterable
{
yield [null, 0.0];
yield ['something else', 0.0];
yield [1.0, 0.0];
yield [new Money(1500, new Currency('USD')), 15.0];
yield [new Money(1000, new Currency('USD')), 10.0];
yield [new Money(100, new Currency('USD')), 1.0];
yield [new Money(10, new Currency('USD')), 0.10];
yield [new Money(1, new Currency('USD')), 0.01];
yield [new Money(0, new Currency('USD')), 0.0];
}
}

0 comments on commit 2c28631

Please sign in to comment.