Skip to content

Commit 7a0bd2b

Browse files
committed
Add tests on null date casts
1 parent ad79fb1 commit 7a0bd2b

File tree

1 file changed

+54
-137
lines changed

1 file changed

+54
-137
lines changed

tests/ModelTest.php

Lines changed: 54 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -657,161 +657,78 @@ public function testDates(): void
657657
$item = Item::create(['name' => 'sword']);
658658
$json = $item->toArray();
659659
$this->assertEquals($item->created_at->toISOString(), $json['created_at']);
660+
}
660661

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);
662+
public static function provideDate(): \Generator
663+
{
664+
yield [time()];
665+
yield [Date::now()];
666+
yield ['Monday 8th August 2005 03:12:46 PM'];
667+
yield ['Monday 8th August 1960 03:12:46 PM'];
668+
yield ['2005-08-08'];
669+
yield ['1965-08-08'];
670+
yield [new DateTime('2010-08-08')];
671+
yield [new DateTime('1965-08-08')];
672+
yield [new DateTime('2010-08-08 04.08.37')];
673+
yield [new DateTime('1965-08-08 04.08.37')];
674+
yield [new DateTime('2010-08-08 04.08.37.324')];
675+
yield [new DateTime('1965-08-08 04.08.37.324')];
676+
yield [new DateTime('1965-08-08 04.08.37.324')];
677+
}
695678

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

699689
//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'));
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', $date);
784699
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
785700

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'));
701+
// Test with create and array property
702+
$data = $user->toArray();
703+
$this->assertIsString($data['entry']['date']);
704+
}
791705

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

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

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'));
715+
$user->save();
803716

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

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

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

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

817734
public function testCarbonDateMockingWorks()

0 commit comments

Comments
 (0)