From b751c5963b338d3cf2f187f3d2d8847bcbf29810 Mon Sep 17 00:00:00 2001 From: saineshmamgain Date: Wed, 9 Apr 2025 20:15:15 +0530 Subject: [PATCH 1/8] Fixe: error when accessing a immutable_datetime casted property when setting `Date::use(CarbonImmutable::class);` --- src/Eloquent/DocumentModel.php | 2 +- tests/Models/Anniversary.php | 30 ++++++++++++++++++++++++++++++ tests/PropertyTest.php | 18 ++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 tests/Models/Anniversary.php diff --git a/src/Eloquent/DocumentModel.php b/src/Eloquent/DocumentModel.php index d39a12401..e5a294128 100644 --- a/src/Eloquent/DocumentModel.php +++ b/src/Eloquent/DocumentModel.php @@ -128,7 +128,7 @@ public function fromDateTime($value): UTCDateTime * * @param mixed $value */ - protected function asDateTime($value): Carbon + protected function asDateTime($value): DateTimeInterface { // Convert UTCDateTime instances to Carbon. if ($value instanceof UTCDateTime) { diff --git a/tests/Models/Anniversary.php b/tests/Models/Anniversary.php new file mode 100644 index 000000000..fb78c9a55 --- /dev/null +++ b/tests/Models/Anniversary.php @@ -0,0 +1,30 @@ + 'immutable_datetime']; +} diff --git a/tests/PropertyTest.php b/tests/PropertyTest.php index c71fd68c9..0417697de 100644 --- a/tests/PropertyTest.php +++ b/tests/PropertyTest.php @@ -4,6 +4,9 @@ namespace MongoDB\Laravel\Tests\Eloquent; +use Carbon\CarbonImmutable; +use Illuminate\Support\Facades\Date; +use MongoDB\Laravel\Tests\Models\Anniversary; use MongoDB\Laravel\Tests\Models\HiddenAnimal; use MongoDB\Laravel\Tests\TestCase; @@ -16,6 +19,7 @@ protected function setUp(): void parent::setUp(); HiddenAnimal::truncate(); + Anniversary::truncate(); } public function testCanHideCertainProperties(): void @@ -35,4 +39,18 @@ public function testCanHideCertainProperties(): void self::assertArrayNotHasKey('country', $hiddenAnimal->toArray(), 'the country column should be hidden'); self::assertArrayHasKey('can_be_eaten', $hiddenAnimal->toArray()); } + + public function testCanReturnCarbonImmutableObject(): void + { + Date::use(CarbonImmutable::class); + + Anniversary::create([ + 'name' => 'John', + 'anniversary' => new CarbonImmutable('2020-01-01 00:00:00'), + ]); + + $anniversary = Anniversary::sole(); + assert($anniversary instanceof Anniversary); + self::assertInstanceOf(CarbonImmutable::class, $anniversary->anniversary); + } } From 0534989050049a2cba3d7edb3ceb53d8ba8f1339 Mon Sep 17 00:00:00 2001 From: saineshmamgain Date: Wed, 9 Apr 2025 20:54:00 +0530 Subject: [PATCH 2/8] Fix: test --- tests/DateTimeImmutableTest.php | 40 +++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 tests/DateTimeImmutableTest.php diff --git a/tests/DateTimeImmutableTest.php b/tests/DateTimeImmutableTest.php new file mode 100644 index 000000000..8fb668ba5 --- /dev/null +++ b/tests/DateTimeImmutableTest.php @@ -0,0 +1,40 @@ + 'John', + 'anniversary' => new CarbonImmutable('2020-01-01 00:00:00'), + ]); + + $anniversary = Anniversary::sole(); + assert($anniversary instanceof Anniversary); + self::assertInstanceOf(CarbonImmutable::class, $anniversary->anniversary); + + Date::useDefault(); + } +} From dc673886780359414637b8c670f8b75a72079e28 Mon Sep 17 00:00:00 2001 From: saineshmamgain Date: Wed, 9 Apr 2025 20:54:23 +0530 Subject: [PATCH 3/8] Fix: test --- tests/DateTimeImmutableTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/DateTimeImmutableTest.php b/tests/DateTimeImmutableTest.php index 8fb668ba5..0c0ba378e 100644 --- a/tests/DateTimeImmutableTest.php +++ b/tests/DateTimeImmutableTest.php @@ -18,7 +18,6 @@ protected function setUp(): void { parent::setUp(); - Date::use(CarbonImmutable::class); Anniversary::truncate(); } From a7e288f0759f0fafaf11d704cb5d1c5be14ca7cb Mon Sep 17 00:00:00 2001 From: saineshmamgain Date: Wed, 9 Apr 2025 20:54:23 +0530 Subject: [PATCH 4/8] Fix: test --- tests/DateTimeImmutableTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/DateTimeImmutableTest.php b/tests/DateTimeImmutableTest.php index 8fb668ba5..0c0ba378e 100644 --- a/tests/DateTimeImmutableTest.php +++ b/tests/DateTimeImmutableTest.php @@ -18,7 +18,6 @@ protected function setUp(): void { parent::setUp(); - Date::use(CarbonImmutable::class); Anniversary::truncate(); } From 8e534f0355daeacc089d16a25960e0da79d7884e Mon Sep 17 00:00:00 2001 From: saineshmamgain Date: Wed, 9 Apr 2025 20:57:07 +0530 Subject: [PATCH 5/8] Fix:test --- tests/PropertyTest.php | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/tests/PropertyTest.php b/tests/PropertyTest.php index 0417697de..c71fd68c9 100644 --- a/tests/PropertyTest.php +++ b/tests/PropertyTest.php @@ -4,9 +4,6 @@ namespace MongoDB\Laravel\Tests\Eloquent; -use Carbon\CarbonImmutable; -use Illuminate\Support\Facades\Date; -use MongoDB\Laravel\Tests\Models\Anniversary; use MongoDB\Laravel\Tests\Models\HiddenAnimal; use MongoDB\Laravel\Tests\TestCase; @@ -19,7 +16,6 @@ protected function setUp(): void parent::setUp(); HiddenAnimal::truncate(); - Anniversary::truncate(); } public function testCanHideCertainProperties(): void @@ -39,18 +35,4 @@ public function testCanHideCertainProperties(): void self::assertArrayNotHasKey('country', $hiddenAnimal->toArray(), 'the country column should be hidden'); self::assertArrayHasKey('can_be_eaten', $hiddenAnimal->toArray()); } - - public function testCanReturnCarbonImmutableObject(): void - { - Date::use(CarbonImmutable::class); - - Anniversary::create([ - 'name' => 'John', - 'anniversary' => new CarbonImmutable('2020-01-01 00:00:00'), - ]); - - $anniversary = Anniversary::sole(); - assert($anniversary instanceof Anniversary); - self::assertInstanceOf(CarbonImmutable::class, $anniversary->anniversary); - } } From 5d3fb4d96b61b36cb94b7096f4995ad450e3b76e Mon Sep 17 00:00:00 2001 From: saineshmamgain Date: Thu, 10 Apr 2025 12:29:36 +0530 Subject: [PATCH 6/8] Reset Date facade to use default in the tearDown method --- tests/DateTimeImmutableTest.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/DateTimeImmutableTest.php b/tests/DateTimeImmutableTest.php index 931b56c79..133f3b57f 100644 --- a/tests/DateTimeImmutableTest.php +++ b/tests/DateTimeImmutableTest.php @@ -20,6 +20,11 @@ protected function setUp(): void Anniversary::truncate(); } + protected function tearDown(): void + { + Date::useDefault(); + } + public function testCanReturnCarbonImmutableObject(): void { Date::use(CarbonImmutable::class); @@ -32,7 +37,5 @@ public function testCanReturnCarbonImmutableObject(): void $anniversary = Anniversary::sole(); assert($anniversary instanceof Anniversary); self::assertInstanceOf(CarbonImmutable::class, $anniversary->anniversary); - - Date::useDefault(); } } From fd47edfbbbd085f7bda4ff2a95acd91d0f0e66e6 Mon Sep 17 00:00:00 2001 From: saineshmamgain Date: Thu, 10 Apr 2025 16:34:33 +0530 Subject: [PATCH 7/8] Fix: add call to `parent::tearDown()` --- tests/DateTimeImmutableTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/DateTimeImmutableTest.php b/tests/DateTimeImmutableTest.php index 133f3b57f..a4dffb168 100644 --- a/tests/DateTimeImmutableTest.php +++ b/tests/DateTimeImmutableTest.php @@ -23,6 +23,8 @@ protected function setUp(): void protected function tearDown(): void { Date::useDefault(); + + parent::tearDown(); } public function testCanReturnCarbonImmutableObject(): void From bbee5c22bb45a3d002b97e48560668c3c43e3562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Thu, 10 Apr 2025 14:21:35 +0200 Subject: [PATCH 8/8] Fix CS --- src/Eloquent/DocumentModel.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Eloquent/DocumentModel.php b/src/Eloquent/DocumentModel.php index e5a294128..965b1a444 100644 --- a/src/Eloquent/DocumentModel.php +++ b/src/Eloquent/DocumentModel.php @@ -5,7 +5,6 @@ namespace MongoDB\Laravel\Eloquent; use BackedEnum; -use Carbon\Carbon; use Carbon\CarbonInterface; use DateTimeInterface; use DateTimeZone;