diff --git a/README.md b/README.md index 7660ecf..a5a34a6 100644 --- a/README.md +++ b/README.md @@ -104,3 +104,13 @@ $user->friendRequestFrom(); ```php $user->friendRequestTo(); ``` + +## Events +This is the list of the events fired by default for each action + +|Event name |Fired | +|----------------------|---------------------------------| +|friendrequest.sent |When a friend request is sent | +|friendrequest.accepted|When a friend request is accepted| +|friendship.deleted |When a friend request is denied | +|friendship.deleted |When a friendship is cancelled | \ No newline at end of file diff --git a/src/Friendable.php b/src/Friendable.php index 238d479..9345ccf 100644 --- a/src/Friendable.php +++ b/src/Friendable.php @@ -2,16 +2,21 @@ namespace Merodiro\Friendships; +use Event; + trait Friendable { - public function addFriend($user) + public function addFriend($recipient) { - $friendshipStatus = $this->checkFriendship($user); + $friendshipStatus = $this->checkFriendship($recipient); if ($friendshipStatus == 'not friends') { + + Event::fire('friendrequest.sent', [$this, $recipient]); + return Friendship::create([ 'requester' => $this->id, - 'user_requested' => $user->id, + 'user_requested' => $recipient->id, ]); } @@ -38,12 +43,14 @@ public function checkFriendship($user) } } - public function acceptFriend($user) + public function acceptFriend($sender) { - $friendshipStatus = $this->checkFriendship($user); + $friendshipStatus = $this->checkFriendship($sender); if ($friendshipStatus == 'pending') { - return $friendship = Friendship::betweenModels($this, $user) + Event::fire('friendrequest.accepted', [$this, $sender]); + + return $friendship = Friendship::betweenModels($this, $sender) ->update([ 'status' => 1, ]); @@ -52,10 +59,9 @@ public function acceptFriend($user) public function deleteFriend($user) { - Friendship::betweenModels($this, $user) + Event::fire('friendship.deleted', [$this, $user]); + return Friendship::betweenModels($this, $user) ->delete(); - - return 1; } public function friends() diff --git a/tests/FriendshipsEventsTest.php b/tests/FriendshipsEventsTest.php new file mode 100644 index 0000000..9f005c9 --- /dev/null +++ b/tests/FriendshipsEventsTest.php @@ -0,0 +1,51 @@ +sender = createUser(); + $this->recipient = createUser(); + } + + public function tearDown() + { + Mockery::close(); + } + + /** @test */ + public function friend_request_is_sent() + { + Event::shouldReceive('fire')->once()->withArgs(['friendrequest.sent', Mockery::any()]); + + $this->sender->addfriend($this->recipient); + } + + /** @test */ + public function friend_request_is_accepted() + { + $this->sender->addfriend($this->recipient); + Event::shouldReceive('fire')->once()->withArgs(['friendrequest.accepted', Mockery::any()]); + + $this->recipient->acceptFriend($this->sender); + } + + /** @test */ + public function friendship_is_cancelled() + { + $this->sender->addfriend($this->recipient); + $this->recipient->acceptFriend($this->sender); + Event::shouldReceive('fire')->once()->withArgs(['friendship.deleted', Mockery::any()]); + + $this->recipient->deleteFriend($this->sender); + } +} \ No newline at end of file