From 89e67d14f502803e63394a5fe3e229f3a2e3ce15 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Tue, 27 Jun 2017 12:09:00 +0800 Subject: [PATCH] Add child to a user Added request validation on set mother, father and child --- app/Http/Controllers/FamilyActionsController.php | 30 ++++++++++++++++++++++++ resources/views/home.blade.php | 4 ++-- routes/web.php | 1 + tests/Feature/ManageUserFamiliesTest.php | 27 ++++++++++++++++----- tests/TestCase.php | 4 ++-- 5 files changed, 56 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/FamilyActionsController.php b/app/Http/Controllers/FamilyActionsController.php index 5ee77cf..05fdd38 100644 --- a/app/Http/Controllers/FamilyActionsController.php +++ b/app/Http/Controllers/FamilyActionsController.php @@ -9,6 +9,10 @@ class FamilyActionsController extends Controller { public function setFather(Request $request, User $user) { + $this->validate($request, [ + 'set_father' => 'required|string|max:255', + ]); + $father = new User; $father->nickname = $request->get('set_father'); $father->gender_id = 1; @@ -20,6 +24,10 @@ class FamilyActionsController extends Controller public function setMother(Request $request, User $user) { + $this->validate($request, [ + 'set_mother' => 'required|string|max:255', + ]); + $mother = new User; $mother->nickname = $request->get('set_mother'); $mother->gender_id = 2; @@ -28,4 +36,26 @@ class FamilyActionsController extends Controller return back(); } + + public function addChild(Request $request) + { + $this->validate($request, [ + 'add_child_name' => 'required|string|max:255', + 'add_child_gender_id' => 'required|in:1,2', + ]); + + $child = new User; + $child->nickname = $request->get('add_child_name'); + $child->gender_id = $request->get('add_child_gender_id'); + $child->save(); + + $user = auth()->user(); + + if ($user->gender_id == 1) + $child->setFather($user); + else + $child->setMother($user); + + return back(); + } } diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 42721b3..60c0de0 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -5,7 +5,7 @@
-
Profile
+
Profile : {{ $currentUser->name }}
@@ -68,7 +68,7 @@ @endforeach
  • - {{ Form::open() }} + {{ Form::open(['route' => ['family-actions.add-child', $currentUser->id]]) }}
    {!! FormField::text('add_child_name', ['label' => 'Nama Anak']) !!} diff --git a/routes/web.php b/routes/web.php index 33b513b..f21a91a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -21,3 +21,4 @@ Route::get('/home', 'HomeController@index')->name('home'); Route::get('/profile', 'HomeController@index')->name('profile'); Route::post('family-actions/{user}/set-father', 'FamilyActionsController@setFather')->name('family-actions.set-father'); Route::post('family-actions/{user}/set-mother', 'FamilyActionsController@setMother')->name('family-actions.set-mother'); +Route::post('family-actions/{user}/add-child', 'FamilyActionsController@addChild')->name('family-actions.add-child'); diff --git a/tests/Feature/ManageUserFamiliesTest.php b/tests/Feature/ManageUserFamiliesTest.php index 49b619e..41c3de9 100644 --- a/tests/Feature/ManageUserFamiliesTest.php +++ b/tests/Feature/ManageUserFamiliesTest.php @@ -34,12 +34,6 @@ class ManageUserFamiliesTest extends TestCase $this->visit(route('profile')); $this->seePageIs(route('profile')); - // $this->see($user->nickname); - // $this->seeElement('input', ['name' => 'set_mother']); - $this->seeElement('input', ['name' => 'set_mother']); - // $this->seeElement('input', ['name' => 'add_child_name']); - // $this->seeElement('input', ['name' => 'add_child_gender_id']); - $this->submitForm('set_mother_button', [ 'set_mother' => 'Nama Ibu', ]); @@ -50,4 +44,25 @@ class ManageUserFamiliesTest extends TestCase $this->assertEquals('Nama Ibu', $user->fresh()->mother->nickname); } + + /** @test */ + public function user_can_add_childrens() + { + $user = $this->loginAsUser(['gender_id' => 1]); + $this->visit(route('profile')); + $this->seePageIs(route('profile')); + $this->seeElement('input', ['name' => 'add_child_name']); + $this->seeElement('input', ['name' => 'add_child_gender_id']); + + $this->submitForm('Tambah Anak', [ + 'add_child_name' => 'Nama Anak 1', + 'add_child_gender_id' => 1, + ]); + + $this->seeInDatabase('users', [ + 'nickname' => 'Nama Anak 1', + 'gender_id' => 1, + 'father_id' => $user->id, + ]); + } } diff --git a/tests/TestCase.php b/tests/TestCase.php index f2ee8d3..01e045b 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -11,9 +11,9 @@ abstract class TestCase extends BaseTestCase protected $baseUrl = 'http://localhost'; - protected function loginAsUser() + protected function loginAsUser($overrides = []) { - $user = factory(User::class)->create(); + $user = factory(User::class)->create($overrides); $this->actingAs($user); return $user;