Skip to content

Commit 1898947

Browse files
authored
Merge pull request #2027 from Giacomo92/add_test_for_negative_dates
Add test for date with multiple formats
2 parents 736415e + e7bce2c commit 1898947

File tree

2 files changed

+145
-9
lines changed

2 files changed

+145
-9
lines changed

tests/ModelTest.php

Lines changed: 136 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use Carbon\Carbon;
55
use Illuminate\Database\Eloquent\Collection as EloquentCollection;
66
use Illuminate\Database\Eloquent\ModelNotFoundException;
7+
use Illuminate\Support\Facades\Date;
78
use Jenssegers\Mongodb\Collection;
89
use Jenssegers\Mongodb\Connection;
910
use Jenssegers\Mongodb\Eloquent\Model;
@@ -385,8 +386,13 @@ public function testUnset(): void
385386

386387
public function testDates(): void
387388
{
388-
$birthday = new DateTime('1980/1/1');
389-
$user = User::create(['name' => 'John Doe', 'birthday' => $birthday]);
389+
$user = User::create(['name' => 'John Doe', 'birthday' => new DateTime('1965/1/1')]);
390+
$this->assertInstanceOf(Carbon::class, $user->birthday);
391+
392+
$user = User::where('birthday', '<', new DateTime('1968/1/1'))->first();
393+
$this->assertEquals('John Doe', $user->name);
394+
395+
$user = User::create(['name' => 'John Doe', 'birthday' => new DateTime('1980/1/1')]);
390396
$this->assertInstanceOf(Carbon::class, $user->birthday);
391397

392398
$check = User::find($user->_id);
@@ -416,27 +422,152 @@ public function testDates(): void
416422
$this->assertEquals($item->created_at->format('Y-m-d H:i:s'), $json['created_at']);
417423

418424
/** @var User $user */
425+
//Test with create and standard property
419426
$user = User::create(['name' => 'Jane Doe', 'birthday' => time()]);
420427
$this->assertInstanceOf(Carbon::class, $user->birthday);
421428

429+
$user = User::create(['name' => 'Jane Doe', 'birthday' => Date::now()]);
430+
$this->assertInstanceOf(Carbon::class, $user->birthday);
431+
422432
$user = User::create(['name' => 'Jane Doe', 'birthday' => 'Monday 8th of August 2005 03:12:46 PM']);
423433
$this->assertInstanceOf(Carbon::class, $user->birthday);
424434

435+
$user = User::create(['name' => 'Jane Doe', 'birthday' => 'Monday 8th of August 1960 03:12:46 PM']);
436+
$this->assertInstanceOf(Carbon::class, $user->birthday);
437+
425438
$user = User::create(['name' => 'Jane Doe', 'birthday' => '2005-08-08']);
426439
$this->assertInstanceOf(Carbon::class, $user->birthday);
427440

428-
// test millisecond-precision dates after 1970:
441+
$user = User::create(['name' => 'Jane Doe', 'birthday' => '1965-08-08']);
442+
$this->assertInstanceOf(Carbon::class, $user->birthday);
443+
444+
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('2010-08-08')]);
445+
$this->assertInstanceOf(Carbon::class, $user->birthday);
446+
447+
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('1965-08-08')]);
448+
$this->assertInstanceOf(Carbon::class, $user->birthday);
449+
450+
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('2010-08-08 04.08.37')]);
451+
$this->assertInstanceOf(Carbon::class, $user->birthday);
452+
453+
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('1965-08-08 04.08.37')]);
454+
$this->assertInstanceOf(Carbon::class, $user->birthday);
455+
429456
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('2010-08-08 04.08.37.324')]);
430457
$this->assertInstanceOf(Carbon::class, $user->birthday);
431458

432-
// test millisecond-precision dates before 1970:
433459
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('1965-08-08 04.08.37.324')]);
434460
$this->assertInstanceOf(Carbon::class, $user->birthday);
435461

462+
//Test with setAttribute and standard property
463+
$user->setAttribute('birthday', time());
464+
$this->assertInstanceOf(Carbon::class, $user->birthday);
465+
466+
$user->setAttribute('birthday', Date::now());
467+
$this->assertInstanceOf(Carbon::class, $user->birthday);
468+
469+
$user->setAttribute('birthday', 'Monday 8th of August 2005 03:12:46 PM');
470+
$this->assertInstanceOf(Carbon::class, $user->birthday);
471+
472+
$user->setAttribute('birthday', 'Monday 8th of August 1960 03:12:46 PM');
473+
$this->assertInstanceOf(Carbon::class, $user->birthday);
474+
475+
$user->setAttribute('birthday', '2005-08-08');
476+
$this->assertInstanceOf(Carbon::class, $user->birthday);
477+
478+
$user->setAttribute('birthday', '1965-08-08');
479+
$this->assertInstanceOf(Carbon::class, $user->birthday);
480+
481+
$user->setAttribute('birthday', new DateTime('2010-08-08'));
482+
$this->assertInstanceOf(Carbon::class, $user->birthday);
483+
484+
$user->setAttribute('birthday', new DateTime('1965-08-08'));
485+
$this->assertInstanceOf(Carbon::class, $user->birthday);
486+
487+
$user->setAttribute('birthday', new DateTime('2010-08-08 04.08.37'));
488+
$this->assertInstanceOf(Carbon::class, $user->birthday);
489+
490+
$user->setAttribute('birthday', new DateTime('1965-08-08 04.08.37'));
491+
$this->assertInstanceOf(Carbon::class, $user->birthday);
492+
493+
$user->setAttribute('birthday', new DateTime('2010-08-08 04.08.37.324'));
494+
$this->assertInstanceOf(Carbon::class, $user->birthday);
495+
496+
$user->setAttribute('birthday', new DateTime('1965-08-08 04.08.37.324'));
497+
$this->assertInstanceOf(Carbon::class, $user->birthday);
498+
499+
//Test with create and array property
500+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => time()]]);
501+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
502+
503+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => Date::now()]]);
504+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
505+
506+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => 'Monday 8th of August 2005 03:12:46 PM']]);
507+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
508+
509+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => 'Monday 8th of August 1960 03:12:46 PM']]);
510+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
511+
436512
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => '2005-08-08']]);
437513
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
438514

439-
$user->setAttribute('entry.date', new DateTime);
515+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => '1965-08-08']]);
516+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
517+
518+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('2010-08-08')]]);
519+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
520+
521+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('1965-08-08')]]);
522+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
523+
524+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('2010-08-08 04.08.37')]]);
525+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
526+
527+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('1965-08-08 04.08.37')]]);
528+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
529+
530+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('2010-08-08 04.08.37.324')]]);
531+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
532+
533+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('1965-08-08 04.08.37.324')]]);
534+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
535+
536+
//Test with setAttribute and array property
537+
$user->setAttribute('entry.date', time());
538+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
539+
540+
$user->setAttribute('entry.date', Date::now());
541+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
542+
543+
$user->setAttribute('entry.date', 'Monday 8th of August 2005 03:12:46 PM');
544+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
545+
546+
$user->setAttribute('entry.date', 'Monday 8th of August 1960 03:12:46 PM');
547+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
548+
549+
$user->setAttribute('entry.date', '2005-08-08');
550+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
551+
552+
$user->setAttribute('entry.date', '1965-08-08');
553+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
554+
555+
$user->setAttribute('entry.date', new DateTime('2010-08-08'));
556+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
557+
558+
$user->setAttribute('entry.date', new DateTime('1965-08-08'));
559+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
560+
561+
$user->setAttribute('entry.date', new DateTime('2010-08-08 04.08.37'));
562+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
563+
564+
$user->setAttribute('entry.date', new DateTime('1965-08-08 04.08.37'));
565+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
566+
567+
$user->setAttribute('entry.date', new DateTime('2010-08-08 04.08.37.324'));
568+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
569+
570+
$user->setAttribute('entry.date', new DateTime('1965-08-08 04.08.37.324'));
440571
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
441572

442573
$data = $user->toArray();

tests/QueryBuilderTest.php

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -547,21 +547,26 @@ public function testDates()
547547
{
548548
DB::collection('users')->insert([
549549
['name' => 'John Doe', 'birthday' => new UTCDateTime(Date::parse("1980-01-01 00:00:00")->format('Uv'))],
550-
['name' => 'Jane Doe', 'birthday' => new UTCDateTime(Date::parse("1981-01-01 00:00:00")->format('Uv'))],
551550
['name' => 'Robert Roe', 'birthday' => new UTCDateTime(Date::parse("1982-01-01 00:00:00")->format('Uv'))],
552-
['name' => 'Mark Moe', 'birthday' => new UTCDateTime(Date::parse("1983-01-01 00:00:00")->format('Uv'))],
551+
['name' => 'Mark Moe', 'birthday' => new UTCDateTime(Date::parse("1983-01-01 00:00:00.1")->format('Uv'))],
552+
['name' => 'Frank White', 'birthday' => new UTCDateTime(Date::parse("1960-01-01 12:12:12.1")->format('Uv'))]
553553
]);
554554

555555
$user = DB::collection('users')
556556
->where('birthday', new UTCDateTime(Date::parse("1980-01-01 00:00:00")->format('Uv')))
557557
->first();
558558
$this->assertEquals('John Doe', $user['name']);
559559

560+
$user = DB::collection('users')
561+
->where('birthday', new UTCDateTime(Date::parse("1960-01-01 12:12:12.1")->format('Uv')))
562+
->first();
563+
$this->assertEquals('Frank White', $user['name']);
564+
560565
$user = DB::collection('users')->where('birthday', '=', new DateTime("1980-01-01 00:00:00"))->first();
561566
$this->assertEquals('John Doe', $user['name']);
562567

563-
$start = new UTCDateTime(1000 * strtotime("1981-01-01 00:00:00"));
564-
$stop = new UTCDateTime(1000 * strtotime("1982-01-01 00:00:00"));
568+
$start = new UTCDateTime(1000 * strtotime("1950-01-01 00:00:00"));
569+
$stop = new UTCDateTime(1000 * strtotime("1981-01-01 00:00:00"));
565570

566571
$users = DB::collection('users')->whereBetween('birthday', [$start, $stop])->get();
567572
$this->assertCount(2, $users);

0 commit comments

Comments
 (0)