Skip to content

Commit 6945a95

Browse files
committed
Add test on updateOrCreate
1 parent 8f7bf77 commit 6945a95

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

tests/ModelTest.php

+43
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;
@@ -1091,4 +1092,46 @@ public function testCreateOrFirstRequiresFilter()
10911092
$this->expectExceptionMessage('You must provide attributes to check for duplicates');
10921093
User::createOrFirst([]);
10931094
}
1095+
1096+
#[TestWith([new ObjectID()])]
1097+
#[TestWith(['foo'])]
1098+
public function testUpdateOrCreate(mixed $id)
1099+
{
1100+
Carbon::setTestNow('2010-01-01');
1101+
//$createdAt = Carbon::now()->getTimestamp();
1102+
1103+
// Create
1104+
$user = User::updateOrCreate(
1105+
['_id' => $id],
1106+
['email' => '[email protected]', 'birthday' => new DateTime('1987-05-28')],
1107+
);
1108+
$this->assertInstanceOf(User::class, $user);
1109+
$this->assertEquals('[email protected]', $user->email);
1110+
$this->assertEquals(new DateTime('1987-05-28'), $user->birthday);
1111+
//$this->assertEquals($createdAt, $user->created_at->getTimestamp());
1112+
//$this->assertEquals($createdAt, $user->updated_at->getTimestamp());
1113+
1114+
Carbon::setTestNow('2010-02-01');
1115+
$updatedAt = Carbon::now()->getTimestamp();
1116+
1117+
// Update
1118+
$user = User::updateOrCreate(
1119+
['_id' => $id],
1120+
['birthday' => new DateTime('1990-01-12'), 'foo' => 'bar'],
1121+
);
1122+
1123+
$this->assertInstanceOf(User::class, $user);
1124+
$this->assertEquals('[email protected]', $user->email);
1125+
$this->assertEquals(new DateTime('1990-01-12'), $user->birthday);
1126+
//$this->assertEquals($createdAt, $user->created_at->getTimestamp());
1127+
$this->assertEquals($updatedAt, $user->updated_at->getTimestamp());
1128+
1129+
// Stored data
1130+
$checkUser = User::find($id)->first();
1131+
$this->assertInstanceOf(User::class, $checkUser);
1132+
$this->assertEquals('[email protected]', $checkUser->email);
1133+
$this->assertEquals(new DateTime('1990-01-12'), $checkUser->birthday);
1134+
//$this->assertEquals($createdAt, $user->created_at->getTimestamp());
1135+
$this->assertEquals($updatedAt, $checkUser->updated_at->getTimestamp());
1136+
}
10941137
}

0 commit comments

Comments
 (0)