Browse Source

Replace user ID on couples table on user deletion

pull/65/head
Nafies Luthfi 5 years ago
parent
commit
bc6a04a6f6
  1. 32
      app/Http/Controllers/UsersController.php
  2. 22
      tests/Feature/UsersDeletionTest.php

32
app/Http/Controllers/UsersController.php

@ -215,24 +215,22 @@ class UsersController extends Controller
*/ */
private function replaceUserOnCouplesTable($oldUserId, $replacementUserId) 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,
]);
} }
/** /**

22
tests/Feature/UsersDeletionTest.php

@ -258,19 +258,16 @@ class UsersDeletionTest extends TestCase
public function bugfix_handle_duplicated_couple_on_user_deletion() public function bugfix_handle_duplicated_couple_on_user_deletion()
{ {
$manager = $this->loginAsUser(); $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([ $oldUserCouple = factory(Couple::class)->create([
'husband_id' => $oldUser->id, 'husband_id' => $oldUser->id,
'wife_id' => '999999',
'wife_id' => $singleWife->id,
]); ]);
$duplicatedCouple = factory(Couple::class)->create([ $duplicatedCouple = factory(Couple::class)->create([
'husband_id' => $replacementUser->id, 'husband_id' => $replacementUser->id,
'wife_id' => '999999',
'wife_id' => $singleWife->id,
]); ]);
$this->visit(route('users.edit', [$oldUser, 'action' => 'delete'])); $this->visit(route('users.edit', [$oldUser, 'action' => 'delete']));
@ -280,17 +277,14 @@ class UsersDeletionTest extends TestCase
'replacement_user_id' => $replacementUser->id, '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', [ $this->seeInDatabase('couples', [
'id' => $oldUserCouple->id, 'id' => $oldUserCouple->id,
'husband_id' => $replacementUser->id, 'husband_id' => $replacementUser->id,
'wife_id' => $singleWife->id,
]); ]);
} }
} }
Loading…
Cancel
Save