From d2eb94c257313986109a959a26501ad0ce0d0b55 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sat, 27 Mar 2021 22:12:22 +0800 Subject: [PATCH 01/11] Draft a test --- tests/Feature/ManageUserFamiliesTest.php | 46 ++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/tests/Feature/ManageUserFamiliesTest.php b/tests/Feature/ManageUserFamiliesTest.php index 47f1f3f..9aa16cc 100644 --- a/tests/Feature/ManageUserFamiliesTest.php +++ b/tests/Feature/ManageUserFamiliesTest.php @@ -30,6 +30,11 @@ class ManageUserFamiliesTest extends TestCase ]); $this->assertEquals('Nama Ayah', $user->fresh()->father->nickname); + + $this->seeInDatabase('family_member_connections', [ + 'requester_id' => $user->id, + 'requested_id' => $user->fresh()->father->id, + ]); } /** @test */ @@ -53,6 +58,11 @@ class ManageUserFamiliesTest extends TestCase ]); $this->assertEquals('Nama Ibu', $user->fresh()->mother->nickname); + + $this->seeInDatabase('family_member_connections', [ + 'requester_id' => $user->id, + 'requested_id' => $user->fresh()->mother->id, + ]); } /** @test */ @@ -80,6 +90,12 @@ class ManageUserFamiliesTest extends TestCase 'parent_id' => null, 'manager_id' => $user->id, ]); + $child = User::where('name', 'Nama Anak 1')->first(); + + $this->seeInDatabase('family_member_connections', [ + 'requester_id' => $user->id, + 'requested_id' => $child->id, + ]); } /** @test */ @@ -170,6 +186,11 @@ class ManageUserFamiliesTest extends TestCase 'marriage_date' => '2010-01-01', 'manager_id' => $user->id, ]); + + $this->seeInDatabase('family_member_connections', [ + 'requester_id' => $user->id, + 'requested_id' => $wife->id, + ]); } /** @test */ @@ -203,6 +224,11 @@ class ManageUserFamiliesTest extends TestCase 'marriage_date' => '2010-03-03', 'manager_id' => $user->id, ]); + + $this->seeInDatabase('family_member_connections', [ + 'requester_id' => $user->id, + 'requested_id' => $husband->id, + ]); } /** @test */ @@ -225,6 +251,11 @@ class ManageUserFamiliesTest extends TestCase ]); $this->assertEquals($father->nickname, $user->fresh()->father->nickname); + + $this->seeInDatabase('family_member_connections', [ + 'requester_id' => $user->id, + 'requested_id' => $father->id, + ]); } /** @test */ @@ -247,6 +278,11 @@ class ManageUserFamiliesTest extends TestCase ]); $this->assertEquals($mother->nickname, $user->fresh()->mother->nickname); + + $this->seeInDatabase('family_member_connections', [ + 'requester_id' => $user->id, + 'requested_id' => $mother->id, + ]); } /** @test */ @@ -273,6 +309,11 @@ class ManageUserFamiliesTest extends TestCase 'marriage_date' => '2010-01-01', 'manager_id' => $user->id, ]); + + $this->seeInDatabase('family_member_connections', [ + 'requester_id' => $user->id, + 'requested_id' => $wife->id, + ]); } /** @test */ @@ -299,6 +340,11 @@ class ManageUserFamiliesTest extends TestCase 'marriage_date' => '2010-03-03', 'manager_id' => $user->id, ]); + + $this->seeInDatabase('family_member_connections', [ + 'requester_id' => $user->id, + 'requested_id' => $husband->id, + ]); } /** @test */ From 23c82bfbf5165b9dc358d9a51f407ecad8304569 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 28 Mar 2021 11:54:47 +0800 Subject: [PATCH 02/11] Make test passed for family_member_connections entries --- app/Http/Controllers/FamilyActionsController.php | 17 +++++++++-- app/User.php | 27 +++++++++++++++++ ...1809_create_family_member_connections_table.php | 35 ++++++++++++++++++++++ tests/Feature/ManageUserFamiliesTest.php | 4 +-- 4 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 database/migrations/2021_03_28_091809_create_family_member_connections_table.php diff --git a/app/Http/Controllers/FamilyActionsController.php b/app/Http/Controllers/FamilyActionsController.php index edee17f..47277ae 100644 --- a/app/Http/Controllers/FamilyActionsController.php +++ b/app/Http/Controllers/FamilyActionsController.php @@ -2,10 +2,11 @@ namespace App\Http\Controllers; -use App\User; use App\Couple; -use Ramsey\Uuid\Uuid; +use App\User; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; +use Ramsey\Uuid\Uuid; class FamilyActionsController extends Controller { @@ -26,6 +27,12 @@ class FamilyActionsController extends Controller if ($request->get('set_father_id')) { $user->father_id = $request->get('set_father_id'); $user->save(); + + DB::table('family_member_connections')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $user->id, + 'requested_id' => $request->get('set_father_id'), + ]); } else { $father = new User; $father->id = Uuid::uuid4()->toString(); @@ -57,6 +64,12 @@ class FamilyActionsController extends Controller if ($request->get('set_mother_id')) { $user->mother_id = $request->get('set_mother_id'); $user->save(); + + DB::table('family_member_connections')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $user->id, + 'requested_id' => $request->get('set_mother_id'), + ]); } else { $mother = new User; $mother->id = Uuid::uuid4()->toString(); diff --git a/app/User.php b/app/User.php index 26bafb6..a069885 100644 --- a/app/User.php +++ b/app/User.php @@ -5,6 +5,7 @@ namespace App; use Carbon\Carbon; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; +use Illuminate\Support\Facades\DB; use Ramsey\Uuid\Uuid; class User extends Authenticatable @@ -76,6 +77,12 @@ class User extends Authenticatable $this->father_id = $father->id; $this->save(); + DB::table('family_member_connections')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $this->id, + 'requested_id' => $father->id, + ]); + return $father; } @@ -93,6 +100,12 @@ class User extends Authenticatable $this->mother_id = $mother->id; $this->save(); + DB::table('family_member_connections')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $this->id, + 'requested_id' => $mother->id, + ]); + return $mother; } @@ -147,6 +160,13 @@ class User extends Authenticatable 'marriage_date' => $marriageDate, 'manager_id' => auth()->id(), ]); + + DB::table('family_member_connections')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $this->id, + 'requested_id' => $wife->id, + ]); + return $wife; } @@ -166,6 +186,13 @@ class User extends Authenticatable 'marriage_date' => $marriageDate, 'manager_id' => auth()->id(), ]); + + DB::table('family_member_connections')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $this->id, + 'requested_id' => $husband->id, + ]); + return $husband; } diff --git a/database/migrations/2021_03_28_091809_create_family_member_connections_table.php b/database/migrations/2021_03_28_091809_create_family_member_connections_table.php new file mode 100644 index 0000000..fc01627 --- /dev/null +++ b/database/migrations/2021_03_28_091809_create_family_member_connections_table.php @@ -0,0 +1,35 @@ +uuid('id')->primary(); + $table->uuid('requester_id'); + $table->uuid('requested_id'); + $table->timestamps(); + + $table->unique(['requester_id', 'requested_id']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('family_member_connections'); + } +} diff --git a/tests/Feature/ManageUserFamiliesTest.php b/tests/Feature/ManageUserFamiliesTest.php index 9aa16cc..77e4cae 100644 --- a/tests/Feature/ManageUserFamiliesTest.php +++ b/tests/Feature/ManageUserFamiliesTest.php @@ -93,8 +93,8 @@ class ManageUserFamiliesTest extends TestCase $child = User::where('name', 'Nama Anak 1')->first(); $this->seeInDatabase('family_member_connections', [ - 'requester_id' => $user->id, - 'requested_id' => $child->id, + 'requester_id' => $child->id, + 'requested_id' => $user->id, ]); } From 3912055b37cba7d0aa16170cf55897f1bf67b2fa Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 28 Mar 2021 12:00:49 +0800 Subject: [PATCH 03/11] Move family_member_connections entry to controller --- app/Http/Controllers/FamilyActionsController.php | 36 ++++++++++++++++++++++++ app/User.php | 25 ---------------- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/app/Http/Controllers/FamilyActionsController.php b/app/Http/Controllers/FamilyActionsController.php index 47277ae..d59db6d 100644 --- a/app/Http/Controllers/FamilyActionsController.php +++ b/app/Http/Controllers/FamilyActionsController.php @@ -42,6 +42,12 @@ class FamilyActionsController extends Controller $father->manager_id = auth()->id(); $user->setFather($father); + + DB::table('family_member_connections')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $user->id, + 'requested_id' => $father->id, + ]); } return back(); @@ -79,6 +85,12 @@ class FamilyActionsController extends Controller $mother->manager_id = auth()->id(); $user->setMother($mother); + + DB::table('family_member_connections')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $user->id, + 'requested_id' => $mother->id, + ]); } return back(); @@ -120,8 +132,20 @@ class FamilyActionsController extends Controller } else { if ($user->gender_id == 1) { $child->setFather($user); + + DB::table('family_member_connections')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $child->id, + 'requested_id' => $user->id, + ]); } else { $child->setMother($user); + + DB::table('family_member_connections')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $child->id, + 'requested_id' => $user->id, + ]); } } @@ -159,6 +183,12 @@ class FamilyActionsController extends Controller $user->addWife($wife, $request->get('marriage_date')); + DB::table('family_member_connections')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $user->id, + 'requested_id' => $wife->id, + ]); + return back(); } @@ -190,6 +220,12 @@ class FamilyActionsController extends Controller $user->addHusband($husband, $request->get('marriage_date')); + DB::table('family_member_connections')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $user->id, + 'requested_id' => $husband->id, + ]); + return back(); } diff --git a/app/User.php b/app/User.php index a069885..3ce5271 100644 --- a/app/User.php +++ b/app/User.php @@ -5,7 +5,6 @@ namespace App; use Carbon\Carbon; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; -use Illuminate\Support\Facades\DB; use Ramsey\Uuid\Uuid; class User extends Authenticatable @@ -77,12 +76,6 @@ class User extends Authenticatable $this->father_id = $father->id; $this->save(); - DB::table('family_member_connections')->insert([ - 'id' => Uuid::uuid4()->toString(), - 'requester_id' => $this->id, - 'requested_id' => $father->id, - ]); - return $father; } @@ -100,12 +93,6 @@ class User extends Authenticatable $this->mother_id = $mother->id; $this->save(); - DB::table('family_member_connections')->insert([ - 'id' => Uuid::uuid4()->toString(), - 'requester_id' => $this->id, - 'requested_id' => $mother->id, - ]); - return $mother; } @@ -161,12 +148,6 @@ class User extends Authenticatable 'manager_id' => auth()->id(), ]); - DB::table('family_member_connections')->insert([ - 'id' => Uuid::uuid4()->toString(), - 'requester_id' => $this->id, - 'requested_id' => $wife->id, - ]); - return $wife; } @@ -187,12 +168,6 @@ class User extends Authenticatable 'manager_id' => auth()->id(), ]); - DB::table('family_member_connections')->insert([ - 'id' => Uuid::uuid4()->toString(), - 'requester_id' => $this->id, - 'requested_id' => $husband->id, - ]); - return $husband; } From c8ea7a0bf4711ff746287c8e8b813ffc988c6e94 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 28 Mar 2021 12:02:28 +0800 Subject: [PATCH 04/11] Swap requester and requested id for adding childs --- app/Http/Controllers/FamilyActionsController.php | 8 ++++---- tests/Feature/ManageUserFamiliesTest.php | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/FamilyActionsController.php b/app/Http/Controllers/FamilyActionsController.php index d59db6d..095553b 100644 --- a/app/Http/Controllers/FamilyActionsController.php +++ b/app/Http/Controllers/FamilyActionsController.php @@ -135,16 +135,16 @@ class FamilyActionsController extends Controller DB::table('family_member_connections')->insert([ 'id' => Uuid::uuid4()->toString(), - 'requester_id' => $child->id, - 'requested_id' => $user->id, + 'requester_id' => $user->id, + 'requested_id' => $child->id, ]); } else { $child->setMother($user); DB::table('family_member_connections')->insert([ 'id' => Uuid::uuid4()->toString(), - 'requester_id' => $child->id, - 'requested_id' => $user->id, + 'requester_id' => $user->id, + 'requested_id' => $child->id, ]); } diff --git a/tests/Feature/ManageUserFamiliesTest.php b/tests/Feature/ManageUserFamiliesTest.php index 77e4cae..9aa16cc 100644 --- a/tests/Feature/ManageUserFamiliesTest.php +++ b/tests/Feature/ManageUserFamiliesTest.php @@ -93,8 +93,8 @@ class ManageUserFamiliesTest extends TestCase $child = User::where('name', 'Nama Anak 1')->first(); $this->seeInDatabase('family_member_connections', [ - 'requester_id' => $child->id, - 'requested_id' => $user->id, + 'requester_id' => $user->id, + 'requested_id' => $child->id, ]); } From d1846431e98352e3a892bacc9ba0124b78298083 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 28 Mar 2021 12:07:31 +0800 Subject: [PATCH 05/11] Add model for family_member_connections table --- app/FamilyMemberConnection.php | 16 ++++++++++++++++ app/Http/Controllers/FamilyActionsController.php | 17 +++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 app/FamilyMemberConnection.php diff --git a/app/FamilyMemberConnection.php b/app/FamilyMemberConnection.php new file mode 100644 index 0000000..fea8846 --- /dev/null +++ b/app/FamilyMemberConnection.php @@ -0,0 +1,16 @@ +father_id = $request->get('set_father_id'); $user->save(); - DB::table('family_member_connections')->insert([ + FamilyMemberConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $request->get('set_father_id'), @@ -43,7 +44,7 @@ class FamilyActionsController extends Controller $user->setFather($father); - DB::table('family_member_connections')->insert([ + FamilyMemberConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $father->id, @@ -71,7 +72,7 @@ class FamilyActionsController extends Controller $user->mother_id = $request->get('set_mother_id'); $user->save(); - DB::table('family_member_connections')->insert([ + FamilyMemberConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $request->get('set_mother_id'), @@ -86,7 +87,7 @@ class FamilyActionsController extends Controller $user->setMother($mother); - DB::table('family_member_connections')->insert([ + FamilyMemberConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $mother->id, @@ -133,7 +134,7 @@ class FamilyActionsController extends Controller if ($user->gender_id == 1) { $child->setFather($user); - DB::table('family_member_connections')->insert([ + FamilyMemberConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $child->id, @@ -141,7 +142,7 @@ class FamilyActionsController extends Controller } else { $child->setMother($user); - DB::table('family_member_connections')->insert([ + FamilyMemberConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $child->id, @@ -183,7 +184,7 @@ class FamilyActionsController extends Controller $user->addWife($wife, $request->get('marriage_date')); - DB::table('family_member_connections')->insert([ + FamilyMemberConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $wife->id, @@ -220,7 +221,7 @@ class FamilyActionsController extends Controller $user->addHusband($husband, $request->get('marriage_date')); - DB::table('family_member_connections')->insert([ + FamilyMemberConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $husband->id, From e425e07c897399b4507e6ca8e74eca4b9231dadd Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 28 Mar 2021 17:57:31 +0800 Subject: [PATCH 06/11] Add family member connection status_id column --- app/FamilyMemberConnection.php | 5 ++++- app/Http/Controllers/FamilyActionsController.php | 8 ++++++++ ...021_03_28_091809_create_family_member_connections_table.php | 1 + tests/Feature/ManageUserFamiliesTest.php | 10 ++++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/app/FamilyMemberConnection.php b/app/FamilyMemberConnection.php index fea8846..10876b5 100644 --- a/app/FamilyMemberConnection.php +++ b/app/FamilyMemberConnection.php @@ -6,8 +6,11 @@ use Illuminate\Database\Eloquent\Model; class FamilyMemberConnection extends Model { + const STATUS_WAITING = 0; + const STATUS_APPROVED = 1; + protected $fillable = [ - 'id', 'requester_id', 'requested_id', + 'id', 'requester_id', 'requested_id', 'status_id', ]; public $incrementing = false; diff --git a/app/Http/Controllers/FamilyActionsController.php b/app/Http/Controllers/FamilyActionsController.php index f8ef39f..822b0a9 100644 --- a/app/Http/Controllers/FamilyActionsController.php +++ b/app/Http/Controllers/FamilyActionsController.php @@ -33,6 +33,7 @@ class FamilyActionsController extends Controller 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $request->get('set_father_id'), + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); } else { $father = new User; @@ -48,6 +49,7 @@ class FamilyActionsController extends Controller 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $father->id, + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); } @@ -76,6 +78,7 @@ class FamilyActionsController extends Controller 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $request->get('set_mother_id'), + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); } else { $mother = new User; @@ -91,6 +94,7 @@ class FamilyActionsController extends Controller 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $mother->id, + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); } @@ -138,6 +142,7 @@ class FamilyActionsController extends Controller 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $child->id, + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); } else { $child->setMother($user); @@ -146,6 +151,7 @@ class FamilyActionsController extends Controller 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $child->id, + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); } @@ -188,6 +194,7 @@ class FamilyActionsController extends Controller 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $wife->id, + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); return back(); @@ -225,6 +232,7 @@ class FamilyActionsController extends Controller 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $husband->id, + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); return back(); diff --git a/database/migrations/2021_03_28_091809_create_family_member_connections_table.php b/database/migrations/2021_03_28_091809_create_family_member_connections_table.php index fc01627..275cbff 100644 --- a/database/migrations/2021_03_28_091809_create_family_member_connections_table.php +++ b/database/migrations/2021_03_28_091809_create_family_member_connections_table.php @@ -17,6 +17,7 @@ class CreateFamilyMemberConnectionsTable extends Migration $table->uuid('id')->primary(); $table->uuid('requester_id'); $table->uuid('requested_id'); + $table->unsignedTinyInteger('status_id')->default(0); $table->timestamps(); $table->unique(['requester_id', 'requested_id']); diff --git a/tests/Feature/ManageUserFamiliesTest.php b/tests/Feature/ManageUserFamiliesTest.php index 9aa16cc..8e3940b 100644 --- a/tests/Feature/ManageUserFamiliesTest.php +++ b/tests/Feature/ManageUserFamiliesTest.php @@ -2,6 +2,7 @@ namespace Tests\Feature; +use App\FamilyMemberConnection; use App\User; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; @@ -34,6 +35,7 @@ class ManageUserFamiliesTest extends TestCase $this->seeInDatabase('family_member_connections', [ 'requester_id' => $user->id, 'requested_id' => $user->fresh()->father->id, + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); } @@ -62,6 +64,7 @@ class ManageUserFamiliesTest extends TestCase $this->seeInDatabase('family_member_connections', [ 'requester_id' => $user->id, 'requested_id' => $user->fresh()->mother->id, + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); } @@ -95,6 +98,7 @@ class ManageUserFamiliesTest extends TestCase $this->seeInDatabase('family_member_connections', [ 'requester_id' => $user->id, 'requested_id' => $child->id, + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); } @@ -190,6 +194,7 @@ class ManageUserFamiliesTest extends TestCase $this->seeInDatabase('family_member_connections', [ 'requester_id' => $user->id, 'requested_id' => $wife->id, + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); } @@ -228,6 +233,7 @@ class ManageUserFamiliesTest extends TestCase $this->seeInDatabase('family_member_connections', [ 'requester_id' => $user->id, 'requested_id' => $husband->id, + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); } @@ -255,6 +261,7 @@ class ManageUserFamiliesTest extends TestCase $this->seeInDatabase('family_member_connections', [ 'requester_id' => $user->id, 'requested_id' => $father->id, + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); } @@ -282,6 +289,7 @@ class ManageUserFamiliesTest extends TestCase $this->seeInDatabase('family_member_connections', [ 'requester_id' => $user->id, 'requested_id' => $mother->id, + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); } @@ -313,6 +321,7 @@ class ManageUserFamiliesTest extends TestCase $this->seeInDatabase('family_member_connections', [ 'requester_id' => $user->id, 'requested_id' => $wife->id, + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); } @@ -344,6 +353,7 @@ class ManageUserFamiliesTest extends TestCase $this->seeInDatabase('family_member_connections', [ 'requester_id' => $user->id, 'requested_id' => $husband->id, + 'status_id' => FamilyMemberConnection::STATUS_APPROVED, ]); } From be6eac814b25eb463cbfb52ddfb578fa2dddff75 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 28 Mar 2021 18:28:25 +0800 Subject: [PATCH 07/11] User can send family connetion request to other person --- .../Users/FamilyConnectionRequestController.php | 24 +++++++++++++++ .../views/users/partials/action-buttons.blade.php | 5 +++- routes/web.php | 3 ++ tests/Feature/FamilyConnectionRequestTest.php | 34 ++++++++++++++++++++++ 4 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 app/Http/Controllers/Users/FamilyConnectionRequestController.php create mode 100644 tests/Feature/FamilyConnectionRequestTest.php diff --git a/app/Http/Controllers/Users/FamilyConnectionRequestController.php b/app/Http/Controllers/Users/FamilyConnectionRequestController.php new file mode 100644 index 0000000..cfb8f9f --- /dev/null +++ b/app/Http/Controllers/Users/FamilyConnectionRequestController.php @@ -0,0 +1,24 @@ + Uuid::uuid4()->toString(), + 'requester_id' => auth()->id(), + 'requested_id' => $user->id, + 'status_id' => FamilyMemberConnection::STATUS_WAITING, + ]); + + return back(); + } +} diff --git a/resources/views/users/partials/action-buttons.blade.php b/resources/views/users/partials/action-buttons.blade.php index 4b78ac1..3059486 100644 --- a/resources/views/users/partials/action-buttons.blade.php +++ b/resources/views/users/partials/action-buttons.blade.php @@ -6,4 +6,7 @@ {{ link_to_route('users.chart', trans('app.show_family_chart'), [$user->id], ['class' => Request::segment(3) == 'chart' ? 'btn btn-default active' : 'btn btn-default']) }} {{ link_to_route('users.tree', trans('app.show_family_tree'), [$user->id], ['class' => Request::segment(3) == 'tree' ? 'btn btn-default active' : 'btn btn-default']) }} {{ link_to_route('users.marriages', trans('app.show_marriages'), [$user->id], ['class' => Request::segment(3) == 'marriages' ? 'btn btn-default active' : 'btn btn-default']) }} - \ No newline at end of file + @auth + {!! FormField::formButton(['route' => ['users.family_connection_requests.store', $user->id]], __('family_connection.send_request'), ['class' => 'btn btn-success', 'id' => 'send_family_connection_request']) !!} + @endauth + diff --git a/routes/web.php b/routes/web.php index 7403c45..807608c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -18,6 +18,9 @@ Auth::routes(); Route::group(['middleware' => 'auth'], function () { Route::get('password/change', 'Auth\ChangePasswordController@show')->name('password.change'); Route::post('password/change', 'Auth\ChangePasswordController@update')->name('password.change'); + + Route::post('users/{user}/send_family_connection_request', 'Users\FamilyConnectionRequestController@store') + ->name('users.family_connection_requests.store'); }); Route::get('home', 'HomeController@index')->name('home'); diff --git a/tests/Feature/FamilyConnectionRequestTest.php b/tests/Feature/FamilyConnectionRequestTest.php new file mode 100644 index 0000000..a0d754c --- /dev/null +++ b/tests/Feature/FamilyConnectionRequestTest.php @@ -0,0 +1,34 @@ +loginAsUser(); + $otherPerson = factory(User::class)->create(); + + $this->dontSeeInDatabase('family_member_connections', [ + 'requester_id' => $user->id, + 'requested_id' => $otherPerson->id, + ]); + + $this->visitRoute('users.show', $otherPerson); + $this->seeElement('button', ['id' => 'send_family_connection_request']); + $this->press('send_family_connection_request'); + $this->seeRouteIs('users.show', $otherPerson); + + $this->seeInDatabase('family_member_connections', [ + 'requester_id' => $user->id, + 'requested_id' => $otherPerson->id, + ]); + } +} From f0b1e8ebb9ed26def25544cc1cea733dcfee0eb7 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 28 Mar 2021 18:33:24 +0800 Subject: [PATCH 08/11] Change entities from FamilyMemberConnection to FamilyConnection --- ...lyMemberConnection.php => FamilyConnection.php} | 2 +- app/Http/Controllers/FamilyActionsController.php | 34 +++++++++---------- .../Users/FamilyConnectionRequestController.php | 6 ++-- ..._28_091809_create_family_connections_table.php} | 4 +-- tests/Feature/FamilyConnectionRequestTest.php | 4 +-- tests/Feature/ManageUserFamiliesTest.php | 38 +++++++++++----------- 6 files changed, 44 insertions(+), 44 deletions(-) rename app/{FamilyMemberConnection.php => FamilyConnection.php} (87%) rename database/migrations/{2021_03_28_091809_create_family_member_connections_table.php => 2021_03_28_091809_create_family_connections_table.php} (83%) diff --git a/app/FamilyMemberConnection.php b/app/FamilyConnection.php similarity index 87% rename from app/FamilyMemberConnection.php rename to app/FamilyConnection.php index 10876b5..6763c19 100644 --- a/app/FamilyMemberConnection.php +++ b/app/FamilyConnection.php @@ -4,7 +4,7 @@ namespace App; use Illuminate\Database\Eloquent\Model; -class FamilyMemberConnection extends Model +class FamilyConnection extends Model { const STATUS_WAITING = 0; const STATUS_APPROVED = 1; diff --git a/app/Http/Controllers/FamilyActionsController.php b/app/Http/Controllers/FamilyActionsController.php index 822b0a9..a7bf7d8 100644 --- a/app/Http/Controllers/FamilyActionsController.php +++ b/app/Http/Controllers/FamilyActionsController.php @@ -3,7 +3,7 @@ namespace App\Http\Controllers; use App\Couple; -use App\FamilyMemberConnection; +use App\FamilyConnection; use App\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; @@ -29,11 +29,11 @@ class FamilyActionsController extends Controller $user->father_id = $request->get('set_father_id'); $user->save(); - FamilyMemberConnection::create([ + FamilyConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $request->get('set_father_id'), - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); } else { $father = new User; @@ -45,11 +45,11 @@ class FamilyActionsController extends Controller $user->setFather($father); - FamilyMemberConnection::create([ + FamilyConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $father->id, - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); } @@ -74,11 +74,11 @@ class FamilyActionsController extends Controller $user->mother_id = $request->get('set_mother_id'); $user->save(); - FamilyMemberConnection::create([ + FamilyConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $request->get('set_mother_id'), - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); } else { $mother = new User; @@ -90,11 +90,11 @@ class FamilyActionsController extends Controller $user->setMother($mother); - FamilyMemberConnection::create([ + FamilyConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $mother->id, - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); } @@ -138,20 +138,20 @@ class FamilyActionsController extends Controller if ($user->gender_id == 1) { $child->setFather($user); - FamilyMemberConnection::create([ + FamilyConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $child->id, - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); } else { $child->setMother($user); - FamilyMemberConnection::create([ + FamilyConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $child->id, - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); } @@ -190,11 +190,11 @@ class FamilyActionsController extends Controller $user->addWife($wife, $request->get('marriage_date')); - FamilyMemberConnection::create([ + FamilyConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $wife->id, - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); return back(); @@ -228,11 +228,11 @@ class FamilyActionsController extends Controller $user->addHusband($husband, $request->get('marriage_date')); - FamilyMemberConnection::create([ + FamilyConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => $user->id, 'requested_id' => $husband->id, - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); return back(); diff --git a/app/Http/Controllers/Users/FamilyConnectionRequestController.php b/app/Http/Controllers/Users/FamilyConnectionRequestController.php index cfb8f9f..5cf654a 100644 --- a/app/Http/Controllers/Users/FamilyConnectionRequestController.php +++ b/app/Http/Controllers/Users/FamilyConnectionRequestController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers\Users; -use App\FamilyMemberConnection; +use App\FamilyConnection; use App\Http\Controllers\Controller; use App\User; use Illuminate\Http\Request; @@ -12,11 +12,11 @@ class FamilyConnectionRequestController extends Controller { public function store(Request $request, User $user) { - FamilyMemberConnection::create([ + FamilyConnection::create([ 'id' => Uuid::uuid4()->toString(), 'requester_id' => auth()->id(), 'requested_id' => $user->id, - 'status_id' => FamilyMemberConnection::STATUS_WAITING, + 'status_id' => FamilyConnection::STATUS_WAITING, ]); return back(); diff --git a/database/migrations/2021_03_28_091809_create_family_member_connections_table.php b/database/migrations/2021_03_28_091809_create_family_connections_table.php similarity index 83% rename from database/migrations/2021_03_28_091809_create_family_member_connections_table.php rename to database/migrations/2021_03_28_091809_create_family_connections_table.php index 275cbff..ff26a90 100644 --- a/database/migrations/2021_03_28_091809_create_family_member_connections_table.php +++ b/database/migrations/2021_03_28_091809_create_family_connections_table.php @@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -class CreateFamilyMemberConnectionsTable extends Migration +class CreateFamilyConnectionsTable extends Migration { /** * Run the migrations. @@ -13,7 +13,7 @@ class CreateFamilyMemberConnectionsTable extends Migration */ public function up() { - Schema::create('family_member_connections', function (Blueprint $table) { + Schema::create('family_connections', function (Blueprint $table) { $table->uuid('id')->primary(); $table->uuid('requester_id'); $table->uuid('requested_id'); diff --git a/tests/Feature/FamilyConnectionRequestTest.php b/tests/Feature/FamilyConnectionRequestTest.php index a0d754c..8f32e84 100644 --- a/tests/Feature/FamilyConnectionRequestTest.php +++ b/tests/Feature/FamilyConnectionRequestTest.php @@ -16,7 +16,7 @@ class FamilyConnectionRequestTest extends TestCase $user = $this->loginAsUser(); $otherPerson = factory(User::class)->create(); - $this->dontSeeInDatabase('family_member_connections', [ + $this->dontSeeInDatabase('family_connections', [ 'requester_id' => $user->id, 'requested_id' => $otherPerson->id, ]); @@ -26,7 +26,7 @@ class FamilyConnectionRequestTest extends TestCase $this->press('send_family_connection_request'); $this->seeRouteIs('users.show', $otherPerson); - $this->seeInDatabase('family_member_connections', [ + $this->seeInDatabase('family_connections', [ 'requester_id' => $user->id, 'requested_id' => $otherPerson->id, ]); diff --git a/tests/Feature/ManageUserFamiliesTest.php b/tests/Feature/ManageUserFamiliesTest.php index 8e3940b..c038c69 100644 --- a/tests/Feature/ManageUserFamiliesTest.php +++ b/tests/Feature/ManageUserFamiliesTest.php @@ -2,7 +2,7 @@ namespace Tests\Feature; -use App\FamilyMemberConnection; +use App\FamilyConnection; use App\User; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; @@ -32,10 +32,10 @@ class ManageUserFamiliesTest extends TestCase $this->assertEquals('Nama Ayah', $user->fresh()->father->nickname); - $this->seeInDatabase('family_member_connections', [ + $this->seeInDatabase('family_connections', [ 'requester_id' => $user->id, 'requested_id' => $user->fresh()->father->id, - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); } @@ -61,10 +61,10 @@ class ManageUserFamiliesTest extends TestCase $this->assertEquals('Nama Ibu', $user->fresh()->mother->nickname); - $this->seeInDatabase('family_member_connections', [ + $this->seeInDatabase('family_connections', [ 'requester_id' => $user->id, 'requested_id' => $user->fresh()->mother->id, - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); } @@ -95,10 +95,10 @@ class ManageUserFamiliesTest extends TestCase ]); $child = User::where('name', 'Nama Anak 1')->first(); - $this->seeInDatabase('family_member_connections', [ + $this->seeInDatabase('family_connections', [ 'requester_id' => $user->id, 'requested_id' => $child->id, - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); } @@ -191,10 +191,10 @@ class ManageUserFamiliesTest extends TestCase 'manager_id' => $user->id, ]); - $this->seeInDatabase('family_member_connections', [ + $this->seeInDatabase('family_connections', [ 'requester_id' => $user->id, 'requested_id' => $wife->id, - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); } @@ -230,10 +230,10 @@ class ManageUserFamiliesTest extends TestCase 'manager_id' => $user->id, ]); - $this->seeInDatabase('family_member_connections', [ + $this->seeInDatabase('family_connections', [ 'requester_id' => $user->id, 'requested_id' => $husband->id, - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); } @@ -258,10 +258,10 @@ class ManageUserFamiliesTest extends TestCase $this->assertEquals($father->nickname, $user->fresh()->father->nickname); - $this->seeInDatabase('family_member_connections', [ + $this->seeInDatabase('family_connections', [ 'requester_id' => $user->id, 'requested_id' => $father->id, - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); } @@ -286,10 +286,10 @@ class ManageUserFamiliesTest extends TestCase $this->assertEquals($mother->nickname, $user->fresh()->mother->nickname); - $this->seeInDatabase('family_member_connections', [ + $this->seeInDatabase('family_connections', [ 'requester_id' => $user->id, 'requested_id' => $mother->id, - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); } @@ -318,10 +318,10 @@ class ManageUserFamiliesTest extends TestCase 'manager_id' => $user->id, ]); - $this->seeInDatabase('family_member_connections', [ + $this->seeInDatabase('family_connections', [ 'requester_id' => $user->id, 'requested_id' => $wife->id, - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); } @@ -350,10 +350,10 @@ class ManageUserFamiliesTest extends TestCase 'manager_id' => $user->id, ]); - $this->seeInDatabase('family_member_connections', [ + $this->seeInDatabase('family_connections', [ 'requester_id' => $user->id, 'requested_id' => $husband->id, - 'status_id' => FamilyMemberConnection::STATUS_APPROVED, + 'status_id' => FamilyConnection::STATUS_APPROVED, ]); } From a1ab5424077867542a06b7a67145626ec45f4879 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 28 Mar 2021 20:50:49 +0800 Subject: [PATCH 09/11] Add cancel family connection request button --- app/User.php | 11 +++++++++++ .../views/users/partials/action-buttons.blade.php | 6 +++++- routes/web.php | 3 +++ tests/Feature/FamilyConnectionRequestTest.php | 1 + tests/Unit/UserTest.php | 19 +++++++++++++++++++ 5 files changed, 39 insertions(+), 1 deletion(-) diff --git a/app/User.php b/app/User.php index 3ce5271..5bf29c3 100644 --- a/app/User.php +++ b/app/User.php @@ -316,4 +316,15 @@ class User extends Authenticatable return Carbon::now()->diffInDays($this->birthday, false); } } + + public function hasFamilyConnectionRequestTo(User $user) + { + $familyConnetction = FamilyConnection::where([ + 'requester_id' => $this->id, + 'requested_id' => $user->id, + 'status_id' => 0, + ])->count(); + + return !!$familyConnetction; + } } diff --git a/resources/views/users/partials/action-buttons.blade.php b/resources/views/users/partials/action-buttons.blade.php index 3059486..f061cac 100644 --- a/resources/views/users/partials/action-buttons.blade.php +++ b/resources/views/users/partials/action-buttons.blade.php @@ -7,6 +7,10 @@ {{ link_to_route('users.tree', trans('app.show_family_tree'), [$user->id], ['class' => Request::segment(3) == 'tree' ? 'btn btn-default active' : 'btn btn-default']) }} {{ link_to_route('users.marriages', trans('app.show_marriages'), [$user->id], ['class' => Request::segment(3) == 'marriages' ? 'btn btn-default active' : 'btn btn-default']) }} @auth - {!! FormField::formButton(['route' => ['users.family_connection_requests.store', $user->id]], __('family_connection.send_request'), ['class' => 'btn btn-success', 'id' => 'send_family_connection_request']) !!} + @if (auth()->user()->hasFamilyConnectionRequestTo($user)) + {!! FormField::formButton(['route' => ['users.family_connection_requests.delete', $user->id]], __('family_connection.cancel_request'), ['class' => 'btn btn-warning', 'id' => 'cancel_family_connection_request']) !!} + @else + {!! FormField::formButton(['route' => ['users.family_connection_requests.store', $user->id]], __('family_connection.send_request'), ['class' => 'btn btn-success', 'id' => 'send_family_connection_request']) !!} + @endif @endauth diff --git a/routes/web.php b/routes/web.php index 807608c..d640868 100644 --- a/routes/web.php +++ b/routes/web.php @@ -21,6 +21,9 @@ Route::group(['middleware' => 'auth'], function () { Route::post('users/{user}/send_family_connection_request', 'Users\FamilyConnectionRequestController@store') ->name('users.family_connection_requests.store'); + + Route::delete('users/{user}/cancel_family_connection_request', 'Users\FamilyConnectionRequestController@store') + ->name('users.family_connection_requests.delete'); }); Route::get('home', 'HomeController@index')->name('home'); diff --git a/tests/Feature/FamilyConnectionRequestTest.php b/tests/Feature/FamilyConnectionRequestTest.php index 8f32e84..2ed5c2a 100644 --- a/tests/Feature/FamilyConnectionRequestTest.php +++ b/tests/Feature/FamilyConnectionRequestTest.php @@ -25,6 +25,7 @@ class FamilyConnectionRequestTest extends TestCase $this->seeElement('button', ['id' => 'send_family_connection_request']); $this->press('send_family_connection_request'); $this->seeRouteIs('users.show', $otherPerson); + $this->seeElement('button', ['id' => 'cancel_family_connection_request']); $this->seeInDatabase('family_connections', [ 'requester_id' => $user->id, diff --git a/tests/Unit/UserTest.php b/tests/Unit/UserTest.php index 000dba1..b6b2267 100644 --- a/tests/Unit/UserTest.php +++ b/tests/Unit/UserTest.php @@ -3,10 +3,12 @@ namespace Tests\Unit; use App\Couple; +use App\FamilyConnection; use App\User; use Carbon\Carbon; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Collection; +use Ramsey\Uuid\Uuid; use Tests\TestCase; class UserTest extends TestCase @@ -266,4 +268,21 @@ class UserTest extends TestCase $customer->birthday_remaining ); } + + /** @test */ + public function a_user_model_has_method_has_family_connection_request_to() + { + $john = factory(User::class)->create(); + $jane = factory(User::class)->create(); + + $this->assertFalse($john->hasFamilyConnectionRequestTo($jane)); + + FamilyConnection::create([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $john->id, + 'requested_id' => $jane->id, + ]); + + $this->assertTrue($john->hasFamilyConnectionRequestTo($jane)); + } } From ca9972843cadd6393b137f66635a2f35f02df8ea Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 28 Mar 2021 21:23:09 +0800 Subject: [PATCH 10/11] User can accept and reject family connection requests --- .../Users/FamilyConnectionRequestController.php | 27 +++++++++++ app/User.php | 11 +++++ .../views/users/partials/action-buttons.blade.php | 7 ++- routes/web.php | 7 ++- tests/Feature/FamilyConnectionRequestTest.php | 53 ++++++++++++++++++++++ tests/Unit/UserTest.php | 17 +++++++ 6 files changed, 119 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Users/FamilyConnectionRequestController.php b/app/Http/Controllers/Users/FamilyConnectionRequestController.php index 5cf654a..180ddba 100644 --- a/app/Http/Controllers/Users/FamilyConnectionRequestController.php +++ b/app/Http/Controllers/Users/FamilyConnectionRequestController.php @@ -21,4 +21,31 @@ class FamilyConnectionRequestController extends Controller return back(); } + + public function update(Request $request, User $user) + { + $familyConnection = FamilyConnection::where([ + 'requester_id' => $user->id, + 'requested_id' => auth()->id(), + 'status_id' => FamilyConnection::STATUS_WAITING, + ])->first(); + + $familyConnection->status_id = FamilyConnection::STATUS_APPROVED; + $familyConnection->save(); + + return back(); + } + + public function destroy(Request $request, User $user) + { + $familyConnection = FamilyConnection::where([ + 'requester_id' => $user->id, + 'requested_id' => auth()->id(), + 'status_id' => FamilyConnection::STATUS_WAITING, + ])->first(); + + $familyConnection->delete(); + + return back(); + } } diff --git a/app/User.php b/app/User.php index 5bf29c3..ec6b1de 100644 --- a/app/User.php +++ b/app/User.php @@ -327,4 +327,15 @@ class User extends Authenticatable return !!$familyConnetction; } + + public function hasPendingFamilyConnectionRequestFrom(User $user) + { + $familyConnetction = FamilyConnection::where([ + 'requester_id' => $user->id, + 'requested_id' => $this->id, + 'status_id' => 0, + ])->count(); + + return !!$familyConnetction; + } } diff --git a/resources/views/users/partials/action-buttons.blade.php b/resources/views/users/partials/action-buttons.blade.php index f061cac..60668e8 100644 --- a/resources/views/users/partials/action-buttons.blade.php +++ b/resources/views/users/partials/action-buttons.blade.php @@ -8,9 +8,14 @@ {{ link_to_route('users.marriages', trans('app.show_marriages'), [$user->id], ['class' => Request::segment(3) == 'marriages' ? 'btn btn-default active' : 'btn btn-default']) }} @auth @if (auth()->user()->hasFamilyConnectionRequestTo($user)) - {!! FormField::formButton(['route' => ['users.family_connection_requests.delete', $user->id]], __('family_connection.cancel_request'), ['class' => 'btn btn-warning', 'id' => 'cancel_family_connection_request']) !!} + {!! FormField::formButton(['route' => ['users.family_connection_requests.destroy', $user->id]], __('family_connection.cancel_request'), ['class' => 'btn btn-warning', 'id' => 'cancel_family_connection_request']) !!} @else {!! FormField::formButton(['route' => ['users.family_connection_requests.store', $user->id]], __('family_connection.send_request'), ['class' => 'btn btn-success', 'id' => 'send_family_connection_request']) !!} @endif + + @if (auth()->user()->hasPendingFamilyConnectionRequestFrom($user)) + {!! FormField::formButton(['route' => ['users.family_connection_requests.update', $user->id], 'method' => 'patch'], __('family_connection.accept_request'), ['class' => 'btn btn-success', 'id' => 'accept_family_connection_request']) !!} + {!! FormField::delete(['route' => ['users.family_connection_requests.destroy', $user->id]], __('family_connection.reject_request'), ['class' => 'btn btn-danger', 'id' => 'reject_family_connection_request']) !!} + @endif @endauth diff --git a/routes/web.php b/routes/web.php index d640868..5e985c2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -22,8 +22,11 @@ Route::group(['middleware' => 'auth'], function () { Route::post('users/{user}/send_family_connection_request', 'Users\FamilyConnectionRequestController@store') ->name('users.family_connection_requests.store'); - Route::delete('users/{user}/cancel_family_connection_request', 'Users\FamilyConnectionRequestController@store') - ->name('users.family_connection_requests.delete'); + Route::patch('users/{user}/accept_family_connection_request', 'Users\FamilyConnectionRequestController@update') + ->name('users.family_connection_requests.update'); + + Route::delete('users/{user}/cancel_family_connection_request', 'Users\FamilyConnectionRequestController@destroy') + ->name('users.family_connection_requests.destroy'); }); Route::get('home', 'HomeController@index')->name('home'); diff --git a/tests/Feature/FamilyConnectionRequestTest.php b/tests/Feature/FamilyConnectionRequestTest.php index 2ed5c2a..6a68441 100644 --- a/tests/Feature/FamilyConnectionRequestTest.php +++ b/tests/Feature/FamilyConnectionRequestTest.php @@ -2,8 +2,10 @@ namespace Tests\Feature; +use App\FamilyConnection; use App\User; use Illuminate\Foundation\Testing\RefreshDatabase; +use Ramsey\Uuid\Uuid; use Tests\TestCase; class FamilyConnectionRequestTest extends TestCase @@ -32,4 +34,55 @@ class FamilyConnectionRequestTest extends TestCase 'requested_id' => $otherPerson->id, ]); } + + /** @test */ + public function user_can_accept_family_connection_request_from_other_user() + { + $user = $this->loginAsUser(); + $otherPerson = factory(User::class)->create(); + + FamilyConnection::create([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $otherPerson->id, + 'requested_id' => $user->id, + ]); + + $this->visitRoute('users.show', $otherPerson); + $this->seeElement('button', ['id' => 'accept_family_connection_request']); + $this->press('accept_family_connection_request'); + + $this->seeRouteIs('users.show', $otherPerson); + $this->seeInDatabase('family_connections', [ + 'requester_id' => $otherPerson->id, + 'requested_id' => $user->id, + 'status_id' => FamilyConnection::STATUS_APPROVED, + ]); + } + + /** @test */ + public function user_can_reject_family_connection_request_from_other_user() + { + $user = $this->loginAsUser(); + $otherPerson = factory(User::class)->create(); + + FamilyConnection::create([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $otherPerson->id, + 'requested_id' => $user->id, + ]); + $this->seeInDatabase('family_connections', [ + 'requester_id' => $otherPerson->id, + 'requested_id' => $user->id, + ]); + + $this->visitRoute('users.show', $otherPerson); + $this->seeElement('button', ['id' => 'reject_family_connection_request']); + $this->press('reject_family_connection_request'); + + $this->seeRouteIs('users.show', $otherPerson); + $this->dontSeeInDatabase('family_connections', [ + 'requester_id' => $otherPerson->id, + 'requested_id' => $user->id, + ]); + } } diff --git a/tests/Unit/UserTest.php b/tests/Unit/UserTest.php index b6b2267..e94fdd6 100644 --- a/tests/Unit/UserTest.php +++ b/tests/Unit/UserTest.php @@ -285,4 +285,21 @@ class UserTest extends TestCase $this->assertTrue($john->hasFamilyConnectionRequestTo($jane)); } + + /** @test */ + public function a_user_model_has_method_has_pending_family_connection_request_from() + { + $john = factory(User::class)->create(); + $jane = factory(User::class)->create(); + + $this->assertFalse($jane->hasPendingFamilyConnectionRequestFrom($john)); + + FamilyConnection::create([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $john->id, + 'requested_id' => $jane->id, + ]); + + $this->assertTrue($jane->hasPendingFamilyConnectionRequestFrom($john)); + } } From be449bb0a498d61fc23953b9412f4e1023db7b0b Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 28 Mar 2021 21:31:52 +0800 Subject: [PATCH 11/11] User can cancel family connection request --- .../Users/FamilyConnectionRequestController.php | 4 ++++ .../views/users/partials/action-buttons.blade.php | 2 +- tests/Feature/FamilyConnectionRequestTest.php | 22 ++++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Users/FamilyConnectionRequestController.php b/app/Http/Controllers/Users/FamilyConnectionRequestController.php index 180ddba..3a07dd2 100644 --- a/app/Http/Controllers/Users/FamilyConnectionRequestController.php +++ b/app/Http/Controllers/Users/FamilyConnectionRequestController.php @@ -42,6 +42,10 @@ class FamilyConnectionRequestController extends Controller 'requester_id' => $user->id, 'requested_id' => auth()->id(), 'status_id' => FamilyConnection::STATUS_WAITING, + ])->orWhere([ + 'requester_id' => auth()->id(), + 'requested_id' => $user->id, + 'status_id' => FamilyConnection::STATUS_WAITING, ])->first(); $familyConnection->delete(); diff --git a/resources/views/users/partials/action-buttons.blade.php b/resources/views/users/partials/action-buttons.blade.php index 60668e8..7ab4d64 100644 --- a/resources/views/users/partials/action-buttons.blade.php +++ b/resources/views/users/partials/action-buttons.blade.php @@ -8,7 +8,7 @@ {{ link_to_route('users.marriages', trans('app.show_marriages'), [$user->id], ['class' => Request::segment(3) == 'marriages' ? 'btn btn-default active' : 'btn btn-default']) }} @auth @if (auth()->user()->hasFamilyConnectionRequestTo($user)) - {!! FormField::formButton(['route' => ['users.family_connection_requests.destroy', $user->id]], __('family_connection.cancel_request'), ['class' => 'btn btn-warning', 'id' => 'cancel_family_connection_request']) !!} + {!! FormField::delete(['route' => ['users.family_connection_requests.destroy', $user->id]], __('family_connection.cancel_request'), ['class' => 'btn btn-warning', 'id' => 'cancel_family_connection_request']) !!} @else {!! FormField::formButton(['route' => ['users.family_connection_requests.store', $user->id]], __('family_connection.send_request'), ['class' => 'btn btn-success', 'id' => 'send_family_connection_request']) !!} @endif diff --git a/tests/Feature/FamilyConnectionRequestTest.php b/tests/Feature/FamilyConnectionRequestTest.php index 6a68441..81e20f0 100644 --- a/tests/Feature/FamilyConnectionRequestTest.php +++ b/tests/Feature/FamilyConnectionRequestTest.php @@ -36,6 +36,28 @@ class FamilyConnectionRequestTest extends TestCase } /** @test */ + public function user_can_cancel_family_connection_request_to_other_user() + { + $user = $this->loginAsUser(); + $otherPerson = factory(User::class)->create(); + + FamilyConnection::create([ + 'id' => Uuid::uuid4()->toString(), + 'requester_id' => $user->id, + 'requested_id' => $otherPerson->id, + ]); + + $this->visitRoute('users.show', $otherPerson); + $this->seeElement('button', ['id' => 'cancel_family_connection_request']); + $this->press('cancel_family_connection_request'); + + $this->dontSeeInDatabase('family_connections', [ + 'requester_id' => $otherPerson->id, + 'requested_id' => $user->id, + ]); + } + + /** @test */ public function user_can_accept_family_connection_request_from_other_user() { $user = $this->loginAsUser();