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)); + } }