From bdd05a275d77aa5d50127dee1843a1f8cfca7549 Mon Sep 17 00:00:00 2001 From: Kevin Papst <kevinpapst@users.noreply.github.com> Date: Thu, 20 Jun 2019 01:38:28 +0200 Subject: [PATCH] use default_begin in duration only mode (#873) --- src/Timesheet/TrackingMode/DurationOnlyMode.php | 14 ++++++++++++++ .../TrackingMode/AbstractTrackingModeTest.php | 11 ++++++++--- .../TrackingMode/DurationOnlyModeTest.php | 9 ++++++++- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/Timesheet/TrackingMode/DurationOnlyMode.php b/src/Timesheet/TrackingMode/DurationOnlyMode.php index 1382f5d0f..2c1ef29d8 100644 --- a/src/Timesheet/TrackingMode/DurationOnlyMode.php +++ b/src/Timesheet/TrackingMode/DurationOnlyMode.php @@ -9,6 +9,9 @@ namespace App\Timesheet\TrackingMode; +use App\Entity\Timesheet; +use Symfony\Component\HttpFoundation\Request; + class DurationOnlyMode extends AbstractTrackingMode { public function canEditBegin(): bool @@ -40,4 +43,15 @@ class DurationOnlyMode extends AbstractTrackingMode { return false; } + + public function create(Timesheet $timesheet, Request $request): void + { + if (null === $timesheet->getBegin()) { + $timesheet->setBegin($this->dateTime->createDateTime()); + } + + $timesheet->getBegin()->modify($this->configuration->getDefaultBeginTime()); + + parent::create($timesheet, $request); + } } diff --git a/tests/Timesheet/TrackingMode/AbstractTrackingModeTest.php b/tests/Timesheet/TrackingMode/AbstractTrackingModeTest.php index bc4fc82d0..5a45821ba 100644 --- a/tests/Timesheet/TrackingMode/AbstractTrackingModeTest.php +++ b/tests/Timesheet/TrackingMode/AbstractTrackingModeTest.php @@ -24,6 +24,11 @@ abstract class AbstractTrackingModeTest extends TestCase */ abstract protected function createSut(); + protected function assertDefaultBegin(Timesheet $timesheet) + { + self::assertNull($timesheet->getBegin()); + } + public function testCreateDoesNotChangeAnythingOnEmptyRequest() { $sut = $this->createSut(); @@ -35,7 +40,7 @@ abstract class AbstractTrackingModeTest extends TestCase $sut->create($timesheet, new Request()); - self::assertNull($timesheet->getBegin()); + $this->assertDefaultBegin($timesheet); self::assertNull($timesheet->getEnd()); } @@ -88,7 +93,7 @@ abstract class AbstractTrackingModeTest extends TestCase $sut->create($timesheet, $request); - self::assertNull($timesheet->getBegin()); + $this->assertDefaultBegin($timesheet); self::assertNull($timesheet->getEnd()); self::assertEquals(0, $timesheet->getDuration()); } @@ -181,7 +186,7 @@ abstract class AbstractTrackingModeTest extends TestCase $sut->create($timesheet, $request); - self::assertNull($timesheet->getBegin()); + $this->assertDefaultBegin($timesheet); self::assertNull($timesheet->getEnd()); self::assertEquals(0, $timesheet->getDuration()); } diff --git a/tests/Timesheet/TrackingMode/DurationOnlyModeTest.php b/tests/Timesheet/TrackingMode/DurationOnlyModeTest.php index dddb443ca..3530c1ea9 100644 --- a/tests/Timesheet/TrackingMode/DurationOnlyModeTest.php +++ b/tests/Timesheet/TrackingMode/DurationOnlyModeTest.php @@ -10,6 +10,7 @@ namespace App\Tests\Timesheet\TrackingMode; use App\Configuration\TimesheetConfiguration; +use App\Entity\Timesheet; use App\Tests\Configuration\TestConfigLoader; use App\Tests\Mocks\Security\UserDateTimeFactoryFactory; use App\Timesheet\TrackingMode\DurationOnlyMode; @@ -19,11 +20,17 @@ use App\Timesheet\TrackingMode\DurationOnlyMode; */ class DurationOnlyModeTest extends AbstractTrackingModeTest { + protected function assertDefaultBegin(Timesheet $timesheet) + { + self::assertNotNull($timesheet->getBegin()); + self::assertEquals('13:45:37', $timesheet->getBegin()->format('H:i:s')); + } + protected function createSut() { $loader = new TestConfigLoader([]); $dateTime = (new UserDateTimeFactoryFactory($this))->create(); - $configuration = new TimesheetConfiguration($loader, []); + $configuration = new TimesheetConfiguration($loader, ['default_begin' => '13:45:37']); return new DurationOnlyMode($dateTime, $configuration); }