Browse Source

Prepare test for user deletion bug

pull/65/head
Nafies Luthfi 6 years ago
parent
commit
1fedc20176
  1. 21
      app/Http/Controllers/UsersController.php
  2. 44
      tests/Feature/UsersDeletionTest.php

21
app/Http/Controllers/UsersController.php

@ -2,12 +2,12 @@
namespace App\Http\Controllers;
use DB;
use Storage;
use App\User;
use App\Couple;
use Illuminate\Http\Request;
use App\Http\Requests\Users\UpdateRequest;
use App\User;
use DB;
use Illuminate\Http\Request;
use Storage;
class UsersController extends Controller
{
@ -216,11 +216,24 @@ 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,
]);
}
}
}
/**
* Get User list based on gender.

44
tests/Feature/UsersDeletionTest.php

@ -2,10 +2,10 @@
namespace Tests\Feature;
use App\User;
use App\Couple;
use Tests\TestCase;
use App\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class UsersDeletionTest extends TestCase
{
@ -253,4 +253,44 @@ class UsersDeletionTest extends TestCase
$this->seeElement('option', ['value' => $replacementMaleUser->id]);
$this->dontSeeElement('option', ['value' => $femaleUser->id]);
}
/** @test */
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,
]);
$oldUserCouple = factory(Couple::class)->create([
'husband_id' => $oldUser->id,
'wife_id' => '999999',
]);
$duplicatedCouple = factory(Couple::class)->create([
'husband_id' => $replacementUser->id,
'wife_id' => '999999',
]);
$this->visit(route('users.edit', [$oldUser, 'action' => 'delete']));
$this->see(__('user.replace_delete_text'));
$this->submitForm(__('user.replace_delete_button'), [
'replacement_user_id' => $replacementUser->id,
]);
$this->dontSeeInDatabase('users', [
'id' => $oldUser->id,
]);
$this->dontSeeInDatabase('couples', [
'husband_id' => $oldUser->id,
]);
$this->seeInDatabase('couples', [
'id' => $oldUserCouple->id,
'husband_id' => $replacementUser->id,
]);
}
}
Loading…
Cancel
Save