|
6 | 6 |
|
7 | 7 | use Carbon\Carbon;
|
8 | 8 | use DateTime;
|
9 |
| -use DateTimeImmutable; |
10 | 9 | use Illuminate\Database\Eloquent\Collection as EloquentCollection;
|
11 | 10 | use Illuminate\Database\Eloquent\ModelNotFoundException;
|
12 | 11 | use Illuminate\Support\Facades\Date;
|
@@ -657,161 +656,83 @@ public function testDates(): void
|
657 | 656 | $item = Item::create(['name' => 'sword']);
|
658 | 657 | $json = $item->toArray();
|
659 | 658 | $this->assertEquals($item->created_at->toISOString(), $json['created_at']);
|
| 659 | + } |
660 | 660 |
|
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 'int timestamp' => [time()]; |
| 664 | + yield 'Carbon date' => [Date::now()]; |
| 665 | + yield 'Date in words' => ['Monday 8th August 2005 03:12:46 PM']; |
| 666 | + yield 'Date in words before unix epoch' => ['Monday 8th August 1960 03:12:46 PM']; |
| 667 | + yield 'Date' => ['2005-08-08']; |
| 668 | + yield 'Date before unix epoch' => ['1965-08-08']; |
| 669 | + yield 'DateTime date' => [new DateTime('2010-08-08')]; |
| 670 | + yield 'DateTime date before unix epoch' => [new DateTime('1965-08-08')]; |
| 671 | + yield 'DateTime date and time' => [new DateTime('2010-08-08 04.08.37')]; |
| 672 | + yield 'DateTime date and time before unix epoch' => [new DateTime('1965-08-08 04.08.37')]; |
| 673 | + yield 'DateTime date, time and ms' => [new DateTime('2010-08-08 04.08.37.324')]; |
| 674 | + yield 'DateTime date, time and ms before unix epoch' => [new DateTime('1965-08-08 04.08.37.324')]; |
| 675 | + } |
695 | 676 |
|
696 |
| - $user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('1965-08-08 04.08.37.324')]); |
| 677 | + /** |
| 678 | + * @dataProvider provideDate |
| 679 | + */ |
| 680 | + public function testDateInputs($date): void |
| 681 | + { |
| 682 | + /** @var User $user */ |
| 683 | + // Test with create and standard property |
| 684 | + $user = User::create(['name' => 'Jane Doe', 'birthday' => $date]); |
697 | 685 | $this->assertInstanceOf(Carbon::class, $user->birthday);
|
698 | 686 |
|
699 | 687 | //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); |
| 688 | + $user->setAttribute('birthday', null); |
| 689 | + $this->assertNull($user->birthday); |
732 | 690 |
|
733 |
| - $user->setAttribute('birthday', new DateTime('1965-08-08 04.08.37.324')); |
| 691 | + $user->setAttribute('birthday', $date); |
734 | 692 | $this->assertInstanceOf(Carbon::class, $user->birthday);
|
735 | 693 |
|
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()]]); |
| 694 | + // Test with create and array property |
| 695 | + $user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => $date]]); |
744 | 696 | $this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
|
745 | 697 |
|
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')); |
| 698 | + // Test with setAttribute and array property |
| 699 | + $user->setAttribute('entry.date', null); |
| 700 | + $this->assertNull($user->birthday); |
779 | 701 |
|
780 |
| - $user->setAttribute('entry.date', Date::now()); |
| 702 | + $user->setAttribute('entry.date', $date); |
781 | 703 | $this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
|
782 | 704 |
|
783 |
| - $user->setAttribute('entry.date', 'Monday 8th August 2005 03:12:46 PM'); |
784 |
| - $this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date')); |
785 |
| - |
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')); |
791 |
| - |
792 |
| - $user->setAttribute('entry.date', '1965-08-08'); |
793 |
| - $this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date')); |
| 705 | + // Test with create and array property |
| 706 | + $data = $user->toArray(); |
| 707 | + $this->assertIsString($data['entry']['date']); |
| 708 | + } |
794 | 709 |
|
795 |
| - $user->setAttribute('entry.date', new DateTime('2010-08-08')); |
796 |
| - $this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date')); |
| 710 | + public function testDateNull(): void |
| 711 | + { |
| 712 | + $user = User::create(['name' => 'Jane Doe', 'birthday' => null]); |
| 713 | + $this->assertNull($user->birthday); |
797 | 714 |
|
798 |
| - $user->setAttribute('entry.date', new DateTime('1965-08-08')); |
799 |
| - $this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date')); |
| 715 | + $user->setAttribute('birthday', new DateTime()); |
| 716 | + $user->setAttribute('birthday', null); |
| 717 | + $this->assertNull($user->birthday); |
800 | 718 |
|
801 |
| - $user->setAttribute('entry.date', new DateTime('2010-08-08 04.08.37')); |
802 |
| - $this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date')); |
| 719 | + $user->save(); |
803 | 720 |
|
804 |
| - $user->setAttribute('entry.date', new DateTime('1965-08-08 04.08.37')); |
805 |
| - $this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date')); |
| 721 | + // Re-fetch to be sure |
| 722 | + $user = User::find($user->_id); |
| 723 | + $this->assertNull($user->birthday); |
806 | 724 |
|
807 |
| - $user->setAttribute('entry.date', new DateTime('2010-08-08 04.08.37.324')); |
808 |
| - $this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date')); |
| 725 | + // Nested field with dot notation |
| 726 | + $user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => null]]); |
| 727 | + $this->assertNull($user->getAttribute('entry.date')); |
809 | 728 |
|
810 |
| - $user->setAttribute('entry.date', new DateTime('1965-08-08 04.08.37.324')); |
811 |
| - $this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date')); |
| 729 | + $user->setAttribute('entry.date', new DateTime()); |
| 730 | + $user->setAttribute('entry.date', null); |
| 731 | + $this->assertNull($user->getAttribute('entry.date')); |
812 | 732 |
|
813 |
| - $data = $user->toArray(); |
814 |
| - $this->assertIsString($data['entry']['date']); |
| 733 | + // Re-fetch to be sure |
| 734 | + $user = User::find($user->_id); |
| 735 | + $this->assertNull($user->getAttribute('entry.date')); |
815 | 736 | }
|
816 | 737 |
|
817 | 738 | public function testCarbonDateMockingWorks()
|
|
0 commit comments