|
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