Skip to content

Commit 2112045

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

File tree

1 file changed

+56
-137
lines changed

1 file changed

+56
-137
lines changed

tests/ModelTest.php

Lines changed: 56 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -657,161 +657,80 @@ 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', null);
691+
$user->setAttribute('birthday', $date);
734692
$this->assertInstanceOf(Carbon::class, $user->birthday);
735693

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());
694+
// Test with create and array property
695+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => $date]]);
781696
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
782697

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

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

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

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

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

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

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

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

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

817736
public function testCarbonDateMockingWorks()

0 commit comments

Comments
 (0)