Browse Source

User can accept and reject family connection requests

family_member_connections
Nafies Luthfi 5 years ago
parent
commit
ca9972843c
  1. 27
      app/Http/Controllers/Users/FamilyConnectionRequestController.php
  2. 11
      app/User.php
  3. 7
      resources/views/users/partials/action-buttons.blade.php
  4. 7
      routes/web.php
  5. 53
      tests/Feature/FamilyConnectionRequestTest.php
  6. 17
      tests/Unit/UserTest.php

27
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();
}
}

11
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;
}
}

7
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
</div>

7
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');

53
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,
]);
}
}

17
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));
}
}
Loading…
Cancel
Save