@@ -264,6 +264,53 @@ public function testWithWhereHasOnNestedSelfReferencingHasManyRelationship()
264264 $ this ->assertSame ($ results ->first ()->childPosts ->pluck ('childPosts ' )->flatten ()->pluck ('name ' )->unique ()->toArray (), ['Child Post ' ]);
265265 }
266266
267+ public function testIncrementOrCreate ()
268+ {
269+ $ user1 = ModelTestUser::incrementOrCreate (['email ' => 'test@example.com ' ], 'value ' );
270+ $ this ->assertTrue ($ user1 ->wasRecentlyCreated );
271+ $ this ->assertSame ('test@example.com ' , $ user1 ->email );
272+ $ this ->assertEquals (1 , $ user1 ->value );
273+
274+ $ user2 = ModelTestUser::incrementOrCreate (['email ' => 'test@example.com ' ], 'value ' );
275+ $ this ->assertFalse ($ user2 ->wasRecentlyCreated );
276+ $ this ->assertEquals ($ user1 ->id , $ user2 ->id );
277+ $ this ->assertEquals (2 , $ user2 ->value );
278+
279+ $ user3 = ModelTestUser::incrementOrCreate (['email ' => 'test2@example.com ' ], 'value ' , 10 , 5 );
280+ $ this ->assertTrue ($ user3 ->wasRecentlyCreated );
281+ $ this ->assertEquals (10 , $ user3 ->value );
282+
283+ $ user4 = ModelTestUser::incrementOrCreate (['email ' => 'test2@example.com ' ], 'value ' , 10 , 5 );
284+ $ this ->assertFalse ($ user4 ->wasRecentlyCreated );
285+ $ this ->assertEquals (15 , $ user4 ->value );
286+
287+ $ user5 = ModelTestUser::incrementOrCreate (['email ' => 'test3@example.com ' ], 'value ' , 1 , 1 , ['name ' => 'Test User ' ]);
288+ $ this ->assertTrue ($ user5 ->wasRecentlyCreated );
289+ $ this ->assertEquals (1 , $ user5 ->value );
290+ $ this ->assertNull ($ user5 ->name );
291+
292+ $ user6 = ModelTestUser::incrementOrCreate (['email ' => 'test3@example.com ' ], 'value ' , 1 , 1 , ['name ' => 'Updated User ' ]);
293+ $ this ->assertFalse ($ user6 ->wasRecentlyCreated );
294+ $ this ->assertEquals (2 , $ user6 ->value );
295+ $ this ->assertSame ('Updated User ' , $ user6 ->name );
296+ }
297+
298+ public function testIncrementOrCreateOnDifferentConnection ()
299+ {
300+ $ user1 = ModelTestUser::on ('second_connection ' )->incrementOrCreate (['email ' => 'test@example.com ' ], 'value ' );
301+ $ this ->assertTrue ($ user1 ->wasRecentlyCreated );
302+ $ this ->assertSame ('second_connection ' , $ user1 ->getConnectionName ());
303+ $ this ->assertEquals (1 , $ user1 ->value );
304+
305+ $ user2 = ModelTestUser::on ('second_connection ' )->incrementOrCreate (['email ' => 'test@example.com ' ], 'value ' );
306+ $ this ->assertFalse ($ user2 ->wasRecentlyCreated );
307+ $ this ->assertSame ('second_connection ' , $ user2 ->getConnectionName ());
308+ $ this ->assertEquals (2 , $ user2 ->value );
309+
310+ $ this ->assertEquals (0 , ModelTestUser::count ());
311+ $ this ->assertEquals (1 , ModelTestUser::on ('second_connection ' )->count ());
312+ }
313+
267314 protected function createSchema (): void
268315 {
269316 foreach (['default ' , 'second_connection ' ] as $ connection ) {
0 commit comments