Skip to content

Commit bd1d2ae

Browse files
committed
Add test on updateOrCreate
1 parent a72d181 commit bd1d2ae

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

tests/ModelTest.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
use MongoDB\Laravel\Tests\Models\Soft;
2929
use MongoDB\Laravel\Tests\Models\SqlUser;
3030
use MongoDB\Laravel\Tests\Models\User;
31+
use PHPUnit\Framework\Attributes\TestWith;
3132

3233
use function abs;
3334
use function array_keys;
@@ -1100,4 +1101,46 @@ public function testCreateOrFirstRequiresFilter()
11001101
$this->expectExceptionMessage('You must provide attributes to check for duplicates');
11011102
User::createOrFirst([]);
11021103
}
1104+
1105+
#[TestWith([new ObjectID()])]
1106+
#[TestWith(['foo'])]
1107+
public function testUpdateOrCreate(mixed $id)
1108+
{
1109+
Carbon::setTestNow('2010-01-01');
1110+
//$createdAt = Carbon::now()->getTimestamp();
1111+
1112+
// Create
1113+
$user = User::updateOrCreate(
1114+
['_id' => $id],
1115+
['email' => 'john.doe@example.com', 'birthday' => new DateTime('1987-05-28')],
1116+
);
1117+
$this->assertInstanceOf(User::class, $user);
1118+
$this->assertEquals('john.doe@example.com', $user->email);
1119+
$this->assertEquals(new DateTime('1987-05-28'), $user->birthday);
1120+
//$this->assertEquals($createdAt, $user->created_at->getTimestamp());
1121+
//$this->assertEquals($createdAt, $user->updated_at->getTimestamp());
1122+
1123+
Carbon::setTestNow('2010-02-01');
1124+
$updatedAt = Carbon::now()->getTimestamp();
1125+
1126+
// Update
1127+
$user = User::updateOrCreate(
1128+
['_id' => $id],
1129+
['birthday' => new DateTime('1990-01-12'), 'foo' => 'bar'],
1130+
);
1131+
1132+
$this->assertInstanceOf(User::class, $user);
1133+
$this->assertEquals('john.doe@example.com', $user->email);
1134+
$this->assertEquals(new DateTime('1990-01-12'), $user->birthday);
1135+
//$this->assertEquals($createdAt, $user->created_at->getTimestamp());
1136+
$this->assertEquals($updatedAt, $user->updated_at->getTimestamp());
1137+
1138+
// Stored data
1139+
$checkUser = User::find($id)->first();
1140+
$this->assertInstanceOf(User::class, $checkUser);
1141+
$this->assertEquals('john.doe@example.com', $checkUser->email);
1142+
$this->assertEquals(new DateTime('1990-01-12'), $checkUser->birthday);
1143+
//$this->assertEquals($createdAt, $user->created_at->getTimestamp());
1144+
$this->assertEquals($updatedAt, $checkUser->updated_at->getTimestamp());
1145+
}
11031146
}

0 commit comments

Comments
 (0)