From 675717ff82b3e30ba7e76cbe4cec25def5615c0d Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Mon, 25 Mar 2024 13:46:22 -0700 Subject: [PATCH 1/5] Add failing test --- tests/Feature/Api/Assets/AssetStoreTest.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/Feature/Api/Assets/AssetStoreTest.php b/tests/Feature/Api/Assets/AssetStoreTest.php index 4b4f66f3d..e98da36cf 100644 --- a/tests/Feature/Api/Assets/AssetStoreTest.php +++ b/tests/Feature/Api/Assets/AssetStoreTest.php @@ -113,6 +113,20 @@ class AssetStoreTest extends TestCase $this->assertNull($asset->last_audit_date); } + public function testNonDateUsedForLastAuditDateReturnsValidationError() + { + $response = $this->actingAsForApi(User::factory()->superuser()->create()) + ->postJson(route('api.assets.store'), [ + 'last_audit_date' => 'this-is-not-valid', + 'asset_tag' => '1234', + 'model_id' => AssetModel::factory()->create()->id, + 'status_id' => Statuslabel::factory()->create()->id, + ]) + ->assertStatusMessageIs('error'); + + $this->assertNotNull($response->json('messages.last_audit_date')); + } + public function testArchivedDepreciateAndPhysicalCanBeNull() { $model = AssetModel::factory()->ipadModel()->create(); From c98b9da612a701a49119bdc0a1b7ff8dfe928ab8 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Mon, 25 Mar 2024 13:47:24 -0700 Subject: [PATCH 2/5] Pass last_audit_date through for model level validation if not a date --- app/Http/Requests/StoreAssetRequest.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/app/Http/Requests/StoreAssetRequest.php b/app/Http/Requests/StoreAssetRequest.php index d87d5bc2f..918972c6c 100644 --- a/app/Http/Requests/StoreAssetRequest.php +++ b/app/Http/Requests/StoreAssetRequest.php @@ -5,6 +5,7 @@ namespace App\Http\Requests; use App\Models\Asset; use App\Models\Company; use Carbon\Carbon; +use Carbon\Exceptions\InvalidFormatException; use Illuminate\Support\Facades\Gate; class StoreAssetRequest extends ImageUploadRequest @@ -29,9 +30,15 @@ class StoreAssetRequest extends ImageUploadRequest : $this->company_id; if ($this->input('last_audit_date')) { - $this->merge([ - 'last_audit_date' => Carbon::parse($this->input('last_audit_date'))->startOfDay()->format('Y-m-d H:i:s'), - ]); + try { + $lastAuditDate = Carbon::parse($this->input('last_audit_date')); + + $this->merge([ + 'last_audit_date' => $lastAuditDate->startOfDay()->format('Y-m-d H:i:s'), + ]); + } catch (InvalidFormatException $e) { + // we don't need to do anything here... + } } $this->merge([ From a2625c889ac307556badd99fe28b15c09392494d Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Mon, 25 Mar 2024 13:48:32 -0700 Subject: [PATCH 3/5] Improve comment --- app/Http/Requests/StoreAssetRequest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/Http/Requests/StoreAssetRequest.php b/app/Http/Requests/StoreAssetRequest.php index 918972c6c..20b801a52 100644 --- a/app/Http/Requests/StoreAssetRequest.php +++ b/app/Http/Requests/StoreAssetRequest.php @@ -38,6 +38,8 @@ class StoreAssetRequest extends ImageUploadRequest ]); } catch (InvalidFormatException $e) { // we don't need to do anything here... + // we'll keep the provided date in an + // invalid format so validation picks it up later } } From 71722b753d87e056e366450604dda21c7b8e189c Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Mon, 25 Mar 2024 13:49:03 -0700 Subject: [PATCH 4/5] Little bit of clean up --- app/Http/Requests/StoreAssetRequest.php | 31 ++++++++++++++----------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/app/Http/Requests/StoreAssetRequest.php b/app/Http/Requests/StoreAssetRequest.php index 20b801a52..70e7195c7 100644 --- a/app/Http/Requests/StoreAssetRequest.php +++ b/app/Http/Requests/StoreAssetRequest.php @@ -29,19 +29,7 @@ class StoreAssetRequest extends ImageUploadRequest ? Company::getIdForCurrentUser($this->company_id) : $this->company_id; - if ($this->input('last_audit_date')) { - try { - $lastAuditDate = Carbon::parse($this->input('last_audit_date')); - - $this->merge([ - 'last_audit_date' => $lastAuditDate->startOfDay()->format('Y-m-d H:i:s'), - ]); - } catch (InvalidFormatException $e) { - // we don't need to do anything here... - // we'll keep the provided date in an - // invalid format so validation picks it up later - } - } + $this->formatLastAuditDate(); $this->merge([ 'asset_tag' => $this->asset_tag ?? Asset::autoincrement_asset(), @@ -64,4 +52,21 @@ class StoreAssetRequest extends ImageUploadRequest return $rules; } + + private function formatLastAuditDate(): void + { + if ($this->input('last_audit_date')) { + try { + $lastAuditDate = Carbon::parse($this->input('last_audit_date')); + + $this->merge([ + 'last_audit_date' => $lastAuditDate->startOfDay()->format('Y-m-d H:i:s'), + ]); + } catch (InvalidFormatException $e) { + // we don't need to do anything here... + // we'll keep the provided date in an + // invalid format so validation picks it up later + } + } + } } From 57d1c036ecbf3d1b67c1c0e721641c769839d34e Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Mon, 25 Mar 2024 13:53:30 -0700 Subject: [PATCH 5/5] Improve method name --- app/Http/Requests/StoreAssetRequest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Requests/StoreAssetRequest.php b/app/Http/Requests/StoreAssetRequest.php index 70e7195c7..8e7559673 100644 --- a/app/Http/Requests/StoreAssetRequest.php +++ b/app/Http/Requests/StoreAssetRequest.php @@ -29,7 +29,7 @@ class StoreAssetRequest extends ImageUploadRequest ? Company::getIdForCurrentUser($this->company_id) : $this->company_id; - $this->formatLastAuditDate(); + $this->parseLastAuditDate(); $this->merge([ 'asset_tag' => $this->asset_tag ?? Asset::autoincrement_asset(), @@ -53,7 +53,7 @@ class StoreAssetRequest extends ImageUploadRequest return $rules; } - private function formatLastAuditDate(): void + private function parseLastAuditDate(): void { if ($this->input('last_audit_date')) { try {