language specific money and date display (#180)

* improved date translation
* language specific date and money display
This commit is contained in:
Kevin Papst
2018-06-25 16:41:12 +02:00
committed by Simon Schaufelberger
parent f563e0703d
commit d4a46cf257
14 changed files with 308 additions and 37 deletions

View File

@@ -12,6 +12,8 @@ namespace App\Tests\Twig;
use App\Entity\Timesheet;
use App\Twig\Extensions;
use PHPUnit\Framework\TestCase;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Twig\TwigFilter;
/**
@@ -19,10 +21,25 @@ use Twig\TwigFilter;
*/
class ExtensionsTest extends TestCase
{
/**
* @param string $locales
* @param string $locale
* @return Extensions
*/
protected function getSut($locales, $locale = 'en')
{
$request = new Request();
$request->setLocale($locale);
$requestStack = new RequestStack();
$requestStack->push($request);
return new Extensions($requestStack, $locales);
}
public function testGetFilters()
{
$filters = ['duration', 'money', 'currency', 'country'];
$sut = new Extensions('de');
$sut = $this->getSut('de');
$twigFilters = $sut->getFilters();
$this->assertCount(count($filters), $twigFilters);
$i = 0;
@@ -35,7 +52,7 @@ class ExtensionsTest extends TestCase
public function testGetFunctions()
{
$functions = ['locales'];
$sut = new Extensions('de');
$sut = $this->getSut('de');
$twigFunctions = $sut->getFunctions();
$this->assertCount(count($functions), $twigFunctions);
$i = 0;
@@ -53,7 +70,7 @@ class ExtensionsTest extends TestCase
['code' => 'ru', 'name' => 'русский'],
];
$sut = new Extensions('en|de|ru');
$sut = $this->getSut('en|de|ru');
$this->assertEquals($locales, $sut->getLocales());
}
@@ -65,7 +82,7 @@ class ExtensionsTest extends TestCase
'RUB' => 'RUB',
];
$sut = new Extensions('en');
$sut = $this->getSut('en');
foreach ($symbols as $name => $symbol) {
$this->assertEquals($symbol, $sut->currency($name));
}
@@ -79,33 +96,48 @@ class ExtensionsTest extends TestCase
'ES' => 'Spain',
];
$sut = new Extensions('en');
$sut = $this->getSut('en');
foreach ($countries as $locale => $name) {
$this->assertEquals($name, $sut->country($locale));
}
}
public function testMoney()
/**
* @param string $result
* @param int $amount
* @param string $currency
* @param string $locale
* @dataProvider getMoneyData
*/
public function testMoney($result, $amount, $currency, $locale)
{
$money = [
[2222, 'EUR', '2,222.00 €'],
[13.75, 'USD', '13.75 $'],
];
$sut = $this->getSut('en', $locale);
$this->assertEquals($result, $sut->money($amount, $currency));
}
$sut = new Extensions('en');
foreach ($money as $entry) {
$amount = $entry[0];
$currency = $entry[1];
$expected = $entry[2];
$this->assertEquals($expected, $sut->money($amount, $currency));
}
public function getMoneyData()
{
return [
['2,345 €', 2345, 'EUR', 'en'],
['2,345 €', 2345, 'EUR', 'en'],
['2.345,01 €', 2345.009, 'EUR', 'de'],
['2.345,01 €', 2345.009, 'EUR', 'de'],
['13.75 $', 13.75, 'USD', 'en'],
['13,75 $', 13.75, 'USD', 'de'],
['13,75 RUB', 13.75, 'RUB', 'de'],
['13,5 RUB', 13.50, 'RUB', 'de'],
['13,75 ₽', 13.75, 'RUB', 'ru'],
['14 ¥', 13.75, 'JPY', 'de'],
['13 933 ¥', 13933.49, 'JPY', 'ru'],
['1.234.567,89 $', 1234567.891234567890000, 'USD', 'de'],
];
}
public function testDuration()
{
$record = $this->getTimesheet(9437);
$sut = new Extensions('en');
$sut = $this->getSut('en');
$this->assertEquals('02:37 h', $sut->duration($record->getDuration()));
$this->assertEquals('02:37:17 h', $sut->duration($record->getDuration(), true));