Skip to content

Add test for date with multiple formats #2027

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Apr 28, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
141 changes: 136 additions & 5 deletions tests/ModelTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Collection as EloquentCollection;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Support\Facades\Date;
use Jenssegers\Mongodb\Collection;
use Jenssegers\Mongodb\Connection;
use Jenssegers\Mongodb\Eloquent\Model;
Expand Down Expand Up @@ -385,8 +386,13 @@ public function testUnset(): void

public function testDates(): void
{
$birthday = new DateTime('1980/1/1');
$user = User::create(['name' => 'John Doe', 'birthday' => $birthday]);
$user = User::create(['name' => 'John Doe', 'birthday' => new DateTime('1965/1/1')]);
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user = User::where('birthday', '<', new DateTime('1968/1/1'))->first();
$this->assertEquals('John Doe', $user->name);

$user = User::create(['name' => 'John Doe', 'birthday' => new DateTime('1980/1/1')]);
$this->assertInstanceOf(Carbon::class, $user->birthday);

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

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

$user = User::create(['name' => 'Jane Doe', 'birthday' => Date::now()]);
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user = User::create(['name' => 'Jane Doe', 'birthday' => 'Monday 8th of August 2005 03:12:46 PM']);
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user = User::create(['name' => 'Jane Doe', 'birthday' => 'Monday 8th of August 1960 03:12:46 PM']);
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user = User::create(['name' => 'Jane Doe', 'birthday' => '2005-08-08']);
$this->assertInstanceOf(Carbon::class, $user->birthday);

// test millisecond-precision dates after 1970:
$user = User::create(['name' => 'Jane Doe', 'birthday' => '1965-08-08']);
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('2010-08-08')]);
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('1965-08-08')]);
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('2010-08-08 04.08.37')]);
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('1965-08-08 04.08.37')]);
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('2010-08-08 04.08.37.324')]);
$this->assertInstanceOf(Carbon::class, $user->birthday);

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

//Test with setAttribute and standard property
$user->setAttribute('birthday', time());
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user->setAttribute('birthday', Date::now());
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user->setAttribute('birthday', 'Monday 8th of August 2005 03:12:46 PM');
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user->setAttribute('birthday', 'Monday 8th of August 1960 03:12:46 PM');
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user->setAttribute('birthday', '2005-08-08');
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user->setAttribute('birthday', '1965-08-08');
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user->setAttribute('birthday', new DateTime('2010-08-08'));
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user->setAttribute('birthday', new DateTime('1965-08-08'));
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user->setAttribute('birthday', new DateTime('2010-08-08 04.08.37'));
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user->setAttribute('birthday', new DateTime('1965-08-08 04.08.37'));
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user->setAttribute('birthday', new DateTime('2010-08-08 04.08.37.324'));
$this->assertInstanceOf(Carbon::class, $user->birthday);

$user->setAttribute('birthday', new DateTime('1965-08-08 04.08.37.324'));
$this->assertInstanceOf(Carbon::class, $user->birthday);

//Test with create and array property
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => time()]]);
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => Date::now()]]);
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => 'Monday 8th of August 2005 03:12:46 PM']]);
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => 'Monday 8th of August 1960 03:12:46 PM']]);
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => '2005-08-08']]);
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user->setAttribute('entry.date', new DateTime);
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => '1965-08-08']]);
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('2010-08-08')]]);
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('1965-08-08')]]);
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('2010-08-08 04.08.37')]]);
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('1965-08-08 04.08.37')]]);
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('2010-08-08 04.08.37.324')]]);
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('1965-08-08 04.08.37.324')]]);
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

//Test with setAttribute and array property
$user->setAttribute('entry.date', time());
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user->setAttribute('entry.date', Date::now());
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user->setAttribute('entry.date', 'Monday 8th of August 2005 03:12:46 PM');
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user->setAttribute('entry.date', 'Monday 8th of August 1960 03:12:46 PM');
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user->setAttribute('entry.date', '2005-08-08');
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user->setAttribute('entry.date', '1965-08-08');
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user->setAttribute('entry.date', new DateTime('2010-08-08'));
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user->setAttribute('entry.date', new DateTime('1965-08-08'));
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user->setAttribute('entry.date', new DateTime('2010-08-08 04.08.37'));
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user->setAttribute('entry.date', new DateTime('1965-08-08 04.08.37'));
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user->setAttribute('entry.date', new DateTime('2010-08-08 04.08.37.324'));
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$user->setAttribute('entry.date', new DateTime('1965-08-08 04.08.37.324'));
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

$data = $user->toArray();
Expand Down
13 changes: 9 additions & 4 deletions tests/QueryBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -547,21 +547,26 @@ public function testDates()
{
DB::collection('users')->insert([
['name' => 'John Doe', 'birthday' => new UTCDateTime(Date::parse("1980-01-01 00:00:00")->format('Uv'))],
['name' => 'Jane Doe', 'birthday' => new UTCDateTime(Date::parse("1981-01-01 00:00:00")->format('Uv'))],
['name' => 'Robert Roe', 'birthday' => new UTCDateTime(Date::parse("1982-01-01 00:00:00")->format('Uv'))],
['name' => 'Mark Moe', 'birthday' => new UTCDateTime(Date::parse("1983-01-01 00:00:00")->format('Uv'))],
['name' => 'Mark Moe', 'birthday' => new UTCDateTime(Date::parse("1983-01-01 00:00:00.1")->format('Uv'))],
['name' => 'Frank White', 'birthday' => new UTCDateTime(Date::parse("1960-01-01 12:12:12.1")->format('Uv'))]
]);

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

$user = DB::collection('users')
->where('birthday', new UTCDateTime(Date::parse("1960-01-01 12:12:12.1")->format('Uv')))
->first();
$this->assertEquals('Frank White', $user['name']);

$user = DB::collection('users')->where('birthday', '=', new DateTime("1980-01-01 00:00:00"))->first();
$this->assertEquals('John Doe', $user['name']);

$start = new UTCDateTime(1000 * strtotime("1981-01-01 00:00:00"));
$stop = new UTCDateTime(1000 * strtotime("1982-01-01 00:00:00"));
$start = new UTCDateTime(1000 * strtotime("1950-01-01 00:00:00"));
$stop = new UTCDateTime(1000 * strtotime("1981-01-01 00:00:00"));

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