From bc6a04a6f67e36193c023813b3f7de602f787c94 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sat, 19 Dec 2020 23:44:18 +0800 Subject: [PATCH] Replace user ID on couples table on user deletion --- app/Http/Controllers/UsersController.php | 32 +++++++++++++++----------------- tests/Feature/UsersDeletionTest.php | 22 ++++++++-------------- 2 files changed, 23 insertions(+), 31 deletions(-) diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index 3f65816..5f76f13 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -215,24 +215,22 @@ class UsersController extends Controller */ private function replaceUserOnCouplesTable($oldUserId, $replacementUserId) { - foreach (['husband_id', 'wife_id', 'manager_id'] as $field) { - if (in_array($field, ['husband_id', 'wife_id'])) { - $replacementUserCouples = Couple::where('husband_id', $replacementUserId) - ->orWhere('wive_id', $replacementUserId) - ->get(); - if ($replacementUserCouples->isEmpty()) { - DB::table('couples')->where($field, $oldUserId)->update([ - $field => $replacementUserId, - ]); - } else { - $replacementUserCouples->first()->delete(); - } - } else { - DB::table('couples')->where($field, $oldUserId)->update([ - $field => $replacementUserId, - ]); - } + $replacementUserCouples = Couple::where('husband_id', $replacementUserId) + ->orWhere('wife_id', $replacementUserId) + ->orWhere('manager_id', $replacementUserId) + ->get(); + if (!$replacementUserCouples->isEmpty()) { + $replacementUserCouples->each->delete(); } + DB::table('couples')->where('husband_id', $oldUserId)->update([ + 'husband_id' => $replacementUserId, + ]); + DB::table('couples')->where('wife_id', $oldUserId)->update([ + 'wife_id' => $replacementUserId, + ]); + DB::table('couples')->where('manager_id', $oldUserId)->update([ + 'manager_id' => $replacementUserId, + ]); } /** diff --git a/tests/Feature/UsersDeletionTest.php b/tests/Feature/UsersDeletionTest.php index 6046762..bc7b591 100644 --- a/tests/Feature/UsersDeletionTest.php +++ b/tests/Feature/UsersDeletionTest.php @@ -258,19 +258,16 @@ class UsersDeletionTest extends TestCase public function bugfix_handle_duplicated_couple_on_user_deletion() { $manager = $this->loginAsUser(); - $oldUser = factory(User::class)->states('male')->create([ - 'manager_id' => $manager->id, - ]); - $replacementUser = factory(User::class)->states('male')->create([ - 'manager_id' => $manager->id, - ]); + $singleWife = factory(User::class)->states('female')->create(['manager_id' => $manager->id]); + $oldUser = factory(User::class)->states('male')->create(['manager_id' => $manager->id]); + $replacementUser = factory(User::class)->states('male')->create(['manager_id' => $manager->id]); $oldUserCouple = factory(Couple::class)->create([ 'husband_id' => $oldUser->id, - 'wife_id' => '999999', + 'wife_id' => $singleWife->id, ]); $duplicatedCouple = factory(Couple::class)->create([ 'husband_id' => $replacementUser->id, - 'wife_id' => '999999', + 'wife_id' => $singleWife->id, ]); $this->visit(route('users.edit', [$oldUser, 'action' => 'delete'])); @@ -280,17 +277,14 @@ class UsersDeletionTest extends TestCase 'replacement_user_id' => $replacementUser->id, ]); - $this->dontSeeInDatabase('users', [ - 'id' => $oldUser->id, - ]); + $this->dontSeeInDatabase('users', ['id' => $oldUser->id]); - $this->dontSeeInDatabase('couples', [ - 'husband_id' => $oldUser->id, - ]); + $this->dontSeeInDatabase('couples', ['husband_id' => $oldUser->id]); $this->seeInDatabase('couples', [ 'id' => $oldUserCouple->id, 'husband_id' => $replacementUser->id, + 'wife_id' => $singleWife->id, ]); } }