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);
     }