Skip to content

Commit 56809d6

Browse files
committed
Add tests on null date casts
1 parent ad79fb1 commit 56809d6

File tree

1 file changed

+56
-138
lines changed

1 file changed

+56
-138
lines changed

tests/ModelTest.php

Lines changed: 56 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
use Carbon\Carbon;
88
use DateTime;
9-
use DateTimeImmutable;
109
use Illuminate\Database\Eloquent\Collection as EloquentCollection;
1110
use Illuminate\Database\Eloquent\ModelNotFoundException;
1211
use Illuminate\Support\Facades\Date;
@@ -657,161 +656,80 @@ public function testDates(): void
657656
$item = Item::create(['name' => 'sword']);
658657
$json = $item->toArray();
659658
$this->assertEquals($item->created_at->toISOString(), $json['created_at']);
659+
}
660660

661-
/** @var User $user */
662-
//Test with create and standard property
663-
$user = User::create(['name' => 'Jane Doe', 'birthday' => time()]);
664-
$this->assertInstanceOf(Carbon::class, $user->birthday);
665-
666-
$user = User::create(['name' => 'Jane Doe', 'birthday' => Date::now()]);
667-
$this->assertInstanceOf(Carbon::class, $user->birthday);
668-
669-
$user = User::create(['name' => 'Jane Doe', 'birthday' => 'Monday 8th August 2005 03:12:46 PM']);
670-
$this->assertInstanceOf(Carbon::class, $user->birthday);
671-
672-
$user = User::create(['name' => 'Jane Doe', 'birthday' => 'Monday 8th August 1960 03:12:46 PM']);
673-
$this->assertInstanceOf(Carbon::class, $user->birthday);
674-
675-
$user = User::create(['name' => 'Jane Doe', 'birthday' => '2005-08-08']);
676-
$this->assertInstanceOf(Carbon::class, $user->birthday);
677-
678-
$user = User::create(['name' => 'Jane Doe', 'birthday' => '1965-08-08']);
679-
$this->assertInstanceOf(Carbon::class, $user->birthday);
680-
681-
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('2010-08-08')]);
682-
$this->assertInstanceOf(Carbon::class, $user->birthday);
683-
684-
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('1965-08-08')]);
685-
$this->assertInstanceOf(Carbon::class, $user->birthday);
686-
687-
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('2010-08-08 04.08.37')]);
688-
$this->assertInstanceOf(Carbon::class, $user->birthday);
689-
690-
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('1965-08-08 04.08.37')]);
691-
$this->assertInstanceOf(Carbon::class, $user->birthday);
692-
693-
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('2010-08-08 04.08.37.324')]);
694-
$this->assertInstanceOf(Carbon::class, $user->birthday);
661+
public static function provideDate(): \Generator
662+
{
663+
yield [time()];
664+
yield [Date::now()];
665+
yield ['Monday 8th August 2005 03:12:46 PM'];
666+
yield ['Monday 8th August 1960 03:12:46 PM'];
667+
yield ['2005-08-08'];
668+
yield ['1965-08-08'];
669+
yield [new DateTime('2010-08-08')];
670+
yield [new DateTime('1965-08-08')];
671+
yield [new DateTime('2010-08-08 04.08.37')];
672+
yield [new DateTime('1965-08-08 04.08.37')];
673+
yield [new DateTime('2010-08-08 04.08.37.324')];
674+
yield [new DateTime('1965-08-08 04.08.37.324')];
675+
yield [new DateTime('1965-08-08 04.08.37.324')];
676+
}
695677

696-
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('1965-08-08 04.08.37.324')]);
678+
/**
679+
* @dataProvider provideDate
680+
*/
681+
public function testDateInputs($date): void
682+
{
683+
/** @var User $user */
684+
// Test with create and standard property
685+
$user = User::create(['name' => 'Jane Doe', 'birthday' => $date]);
697686
$this->assertInstanceOf(Carbon::class, $user->birthday);
698687

699688
//Test with setAttribute and standard property
700-
$user->setAttribute('birthday', time());
701-
$this->assertInstanceOf(Carbon::class, $user->birthday);
702-
703-
$user->setAttribute('birthday', Date::now());
704-
$this->assertInstanceOf(Carbon::class, $user->birthday);
705-
706-
$user->setAttribute('birthday', 'Monday 8th August 2005 03:12:46 PM');
707-
$this->assertInstanceOf(Carbon::class, $user->birthday);
708-
709-
$user->setAttribute('birthday', 'Monday 8th August 1960 03:12:46 PM');
710-
$this->assertInstanceOf(Carbon::class, $user->birthday);
711-
712-
$user->setAttribute('birthday', '2005-08-08');
713-
$this->assertInstanceOf(Carbon::class, $user->birthday);
714-
715-
$user->setAttribute('birthday', '1965-08-08');
716-
$this->assertInstanceOf(Carbon::class, $user->birthday);
717-
718-
$user->setAttribute('birthday', new DateTime('2010-08-08'));
719-
$this->assertInstanceOf(Carbon::class, $user->birthday);
720-
721-
$user->setAttribute('birthday', new DateTime('1965-08-08'));
722-
$this->assertInstanceOf(Carbon::class, $user->birthday);
723-
724-
$user->setAttribute('birthday', new DateTime('2010-08-08 04.08.37'));
725-
$this->assertInstanceOf(Carbon::class, $user->birthday);
726-
727-
$user->setAttribute('birthday', new DateTime('1965-08-08 04.08.37'));
728-
$this->assertInstanceOf(Carbon::class, $user->birthday);
729-
730-
$user->setAttribute('birthday', new DateTime('2010-08-08 04.08.37.324'));
731-
$this->assertInstanceOf(Carbon::class, $user->birthday);
732-
733-
$user->setAttribute('birthday', new DateTime('1965-08-08 04.08.37.324'));
689+
$user->setAttribute('birthday', null);
690+
$user->setAttribute('birthday', $date);
734691
$this->assertInstanceOf(Carbon::class, $user->birthday);
735692

736-
$user->setAttribute('birthday', new DateTimeImmutable('1965-08-08 04.08.37.324'));
737-
$this->assertInstanceOf(Carbon::class, $user->birthday);
738-
739-
//Test with create and array property
740-
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => time()]]);
741-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
742-
743-
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => Date::now()]]);
744-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
745-
746-
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => 'Monday 8th August 2005 03:12:46 PM']]);
747-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
748-
749-
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => 'Monday 8th August 1960 03:12:46 PM']]);
750-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
751-
752-
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => '2005-08-08']]);
753-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
754-
755-
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => '1965-08-08']]);
756-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
757-
758-
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('2010-08-08')]]);
759-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
760-
761-
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('1965-08-08')]]);
762-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
763-
764-
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('2010-08-08 04.08.37')]]);
765-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
766-
767-
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('1965-08-08 04.08.37')]]);
768-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
769-
770-
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('2010-08-08 04.08.37.324')]]);
771-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
772-
773-
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('1965-08-08 04.08.37.324')]]);
774-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
775-
776-
//Test with setAttribute and array property
777-
$user->setAttribute('entry.date', time());
778-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
779-
780-
$user->setAttribute('entry.date', Date::now());
693+
// Test with create and array property
694+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => $date]]);
781695
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
782696

783-
$user->setAttribute('entry.date', 'Monday 8th August 2005 03:12:46 PM');
697+
// Test with setAttribute and array property
698+
$user->setAttribute('entry.date', null);
699+
$user->setAttribute('entry.date', $date);
784700
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
785701

786-
$user->setAttribute('entry.date', 'Monday 8th August 1960 03:12:46 PM');
787-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
788-
789-
$user->setAttribute('entry.date', '2005-08-08');
790-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
702+
// Test with create and array property
703+
$data = $user->toArray();
704+
$this->assertIsString($data['entry']['date']);
705+
}
791706

792-
$user->setAttribute('entry.date', '1965-08-08');
793-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
707+
public function testDateNull(): void
708+
{
709+
$user = User::create(['name' => 'Jane Doe', 'birthday' => null]);
710+
$this->assertNull($user->birthday);
794711

795-
$user->setAttribute('entry.date', new DateTime('2010-08-08'));
796-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
712+
$user->setAttribute('birthday', new DateTime());
713+
$user->setAttribute('birthday', null);
714+
$this->assertNull($user->birthday);
797715

798-
$user->setAttribute('entry.date', new DateTime('1965-08-08'));
799-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
800-
801-
$user->setAttribute('entry.date', new DateTime('2010-08-08 04.08.37'));
802-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
716+
$user->save();
803717

804-
$user->setAttribute('entry.date', new DateTime('1965-08-08 04.08.37'));
805-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
718+
// Re-fetch to be sure
719+
$user = User::find($user->_id);
720+
$this->assertNull($user->birthday);
806721

807-
$user->setAttribute('entry.date', new DateTime('2010-08-08 04.08.37.324'));
808-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
722+
// Nested field with dot notation
723+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => null]]);
724+
$this->assertNull($user->getAttribute('entry.date'));
809725

810-
$user->setAttribute('entry.date', new DateTime('1965-08-08 04.08.37.324'));
811-
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
726+
$user->setAttribute('entry.date', new DateTime());
727+
$user->setAttribute('entry.date', null);
728+
$this->assertNull($user->getAttribute('entry.date'));
812729

813-
$data = $user->toArray();
814-
$this->assertIsString($data['entry']['date']);
730+
// Re-fetch to be sure
731+
$user = User::find($user->_id);
732+
$this->assertNull($user->getAttribute('entry.date'));
815733
}
816734

817735
public function testCarbonDateMockingWorks()

0 commit comments

Comments
 (0)