Skip to content

Commit c22f116

Browse files
BobbyBorisovjoedixon
authored andcommitted
like vue component and few tests
1 parent ea92bd3 commit c22f116

File tree

6 files changed

+65
-8
lines changed

6 files changed

+65
-8
lines changed

app/Helpers/HasLikes.php

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
11
<?php
2-
/**
3-
* Created by PhpStorm.
4-
* User: bobbyborisov
5-
* Date: 12/3/17
6-
* Time: 1:51 PM
7-
*/
82

93
namespace App\Helpers;
104

@@ -27,7 +21,7 @@ public function likedBy(User $user)
2721

2822
public function dislikedBy(User $user)
2923
{
30-
$this->likes()->where('user_id', $user->id)->get()->first()->delete();
24+
optional($this->likes()->where('user_id', $user->id)->get()->first())->delete();
3125
}
3226

3327
public function likes()
@@ -37,6 +31,7 @@ public function likes()
3731

3832
public function isLikedBy(User $user)
3933
{
34+
if ($user == null) return false;
4035
return $this->likes()->where('user_id', $user->id)->exists();
4136
}
4237

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<template>
2+
<div>
3+
<span style="margin-right:3px">{{count}}</span><i class="fa" :class="classes" @click="toggle"></i>
4+
</div>
5+
</template>
6+
7+
<script>
8+
export default {
9+
data(){
10+
return {
11+
count:0,
12+
isLiked: false
13+
}
14+
},
15+
computed:{
16+
classes(){
17+
return this.isLiked ? 'fa-thumbs-down text-danger' : 'fa-thumbs-up text-success';
18+
}
19+
},
20+
methods:{
21+
toggle(){
22+
return this.isLiked ? this.dislike() : this.like();
23+
},
24+
like(){
25+
//axios call
26+
console.log('like');
27+
this.count++;
28+
this.isLiked = true;
29+
},
30+
dislike(){
31+
//axios call
32+
console.log('dislike');
33+
this.count--;
34+
this.isLiked = false;
35+
}
36+
}
37+
}
38+
</script>

resources/views/forum/threads/show.blade.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,12 @@
122122
{{ Form::close() }}
123123
@endif
124124
</div>
125+
@endcan
126+
@auth
127+
<div class="thread-info-likes">
128+
<like></like>
129+
</div>
130+
@endauth
125131
</div>
126132

127133
@include('_partials._delete_modal', [

tests/Components/Jobs/DeleteThreadTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@ class DeleteThreadTest extends TestCase
1616
public function we_can_delete_a_thread_and_its_replies()
1717
{
1818
$thread = factory(Thread::class)->create();
19-
factory(Reply::class)->create(['replyable_id' => $thread->id()]);
19+
$reply = factory(Reply::class)->create(['replyable_id' => $thread->id()]);
2020

2121
$this->dispatch(new DeleteThread($thread));
2222

2323
$this->assertDatabaseMissing('threads', ['id' => $thread->id()]);
2424
$this->assertDatabaseMissing('replies', ['replyable_id' => $thread->id()]);
25+
$this->assertDatabaseMissing('likes', ['liked_type' => get_class($reply), 'liked_id' => $reply->id()]);
2526
}
2627
}

tests/Components/Jobs/DislikeReplyTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,20 @@ public function we_can_dislike_a_reply()
2525

2626
$this->assertFalse($reply->fresh()->isLikedBy($user));
2727
}
28+
29+
/** @test */
30+
public function we_cannot_dislike_a_reply()
31+
{
32+
$user = factory(User::class)->create();
33+
$reply = factory(Reply::class)->create();
34+
35+
$reply->likedBy($user);
36+
$this->assertTrue($reply->fresh()->isLikedBy($user));
37+
38+
$this->dispatch(new DislikeReply($reply, $user));
39+
40+
$this->dispatch(new DislikeReply($reply, $user));
41+
42+
//$this->assertFalse($reply->fresh()->isLikedBy($user));
43+
}
2844
}

tests/Components/Jobs/LikeReplyTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public function we_cannot_like_a_reply_twice()
3535
$this->assertTrue($reply->fresh()->isLikedBy($user));
3636

3737
$this->expectException(CannotLikeReplyTwice::class);
38+
3839
$this->dispatch(new LikeReply($reply, $user));
3940
}
4041
}

0 commit comments

Comments
 (0)