|
28 | 28 | use MongoDB\Laravel\Tests\Models\Soft;
|
29 | 29 | use MongoDB\Laravel\Tests\Models\SqlUser;
|
30 | 30 | use MongoDB\Laravel\Tests\Models\User;
|
| 31 | +use PHPUnit\Framework\Attributes\TestWith; |
31 | 32 |
|
32 | 33 | use function abs;
|
33 | 34 | use function array_keys;
|
@@ -1091,4 +1092,46 @@ public function testCreateOrFirstRequiresFilter()
|
1091 | 1092 | $this->expectExceptionMessage('You must provide attributes to check for duplicates');
|
1092 | 1093 | User::createOrFirst([]);
|
1093 | 1094 | }
|
| 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 | + } |
1094 | 1137 | }
|
0 commit comments