allow negative duration via internal API (#3573)

This commit is contained in:
Kevin Papst
2022-10-10 17:47:11 +02:00
committed by GitHub
parent 1959d4d8df
commit 0cefcf0e16
9 changed files with 39 additions and 46 deletions

View File

@@ -246,26 +246,4 @@ class TimesheetValidationTest extends KernelTestCase
$this->assertHasViolationForField($entity, []);
}
public function testDurationMustBeGreatorOrEqualThanZero()
{
$entity = $this->getEntity();
$begin = new \DateTime();
$end = clone $begin;
$entity->setBegin($begin);
$entity->setEnd($end);
$entity->setDuration(-1);
$this->assertHasViolationForField($entity, 'duration');
// allow zero duration
$entity = $this->getEntity();
$begin = new \DateTime();
$end = clone $begin;
$entity->setBegin($begin);
$entity->setEnd($end);
$entity->setDuration(0);
$this->assertHasViolationForField($entity, []);
}
}

View File

@@ -520,12 +520,23 @@ class LocaleFormatExtensionsTest extends TestCase
// test negative duration
$sut = $this->getSut($this->localeEn, 'en');
$this->assertEquals('0.00', $sut->durationDecimal(-1));
$this->assertEquals('-0.00', $sut->durationDecimal(-1));
// test negative duration
$sut = $this->getSut($this->localeEn, 'en');
$this->assertEquals('-0.01', $sut->durationDecimal(-50));
// test negative duration - with rounding issue
$sut = $this->getSut($this->localeEn, 'en');
$this->assertEquals('-0.02', $sut->durationDecimal(-60));
// test zero duration
$sut = $this->getSut($this->localeEn, 'en');
$this->assertEquals('0.00', $sut->durationDecimal(0));
$sut = $this->getSut($this->localeEn, 'en');
$this->assertEquals('0.00', $sut->durationDecimal(-0));
$sut = $this->getSut($this->localeEn, 'en');
$this->assertEquals('0.00', $sut->durationDecimal(null));

View File

@@ -31,11 +31,11 @@ class DurationTest extends TestCase
public function testParseDurationStringSpecials()
{
$sut = new Duration();
$this->assertEquals(0, $sut->parseDuration('-1', Duration::FORMAT_SECONDS));
$this->assertEquals(-1, $sut->parseDuration('-1', Duration::FORMAT_SECONDS));
$this->assertEquals(0, $sut->parseDuration('0', Duration::FORMAT_SECONDS));
$this->assertEquals(3600, $sut->parseDuration('3600', Duration::FORMAT_SECONDS));
$this->assertEquals(0, $sut->parseDuration('', Duration::FORMAT_SECONDS));
$this->assertEquals(0, $sut->parseDuration('-12', Duration::FORMAT_SECONDS));
$this->assertEquals(-12, $sut->parseDuration('-12', Duration::FORMAT_SECONDS));
}
/**
@@ -64,6 +64,8 @@ class DurationTest extends TestCase
[3600, '1', Duration::FORMAT_DECIMAL],
[5400, '1.5', Duration::FORMAT_DECIMAL],
[5400, '1,5', Duration::FORMAT_DECIMAL],
[-5400, '-1.5', Duration::FORMAT_DECIMAL],
[-5400, '-1,5', Duration::FORMAT_DECIMAL],
[0, '', Duration::FORMAT_NATURAL],
[0, 0, Duration::FORMAT_NATURAL],
@@ -82,10 +84,12 @@ class DurationTest extends TestCase
[12420, '3h27m', Duration::FORMAT_NATURAL],
[48420, '13:27', Duration::FORMAT_COLON],
[-48420, '-13:27', Duration::FORMAT_COLON],
[48474, '13:27:54', Duration::FORMAT_COLON],
[48474, '12:87:54', Duration::FORMAT_COLON],
[11257200, '3127:00:00', Duration::FORMAT_COLON],
[11257200, '3127:00', Duration::FORMAT_COLON],
[-11257277, '-3127:01:17', Duration::FORMAT_COLON],
];
}
@@ -108,7 +112,6 @@ class DurationTest extends TestCase
[':3127:00', Duration::FORMAT_COLON],
['::3127', Duration::FORMAT_COLON],
['3127:-01', Duration::FORMAT_COLON],
['-3127:01:17', Duration::FORMAT_COLON],
];
}

View File

@@ -211,7 +211,9 @@ class LocaleHelperTest extends TestCase
// test negative duration
$sut = $this->getSut('en');
$this->assertEquals('0.00', $sut->durationDecimal(-1));
$this->assertEquals('-0.00', $sut->durationDecimal(-1));
$this->assertEquals('0.00', $sut->durationDecimal(-0));
$this->assertEquals('-0.01', $sut->durationDecimal(-40));
// test zero duration
$sut = $this->getSut('en');