Skip to content

Commit 1eb33ac

Browse files
Merge pull request #43 from lara-zeus/feat/add-missing-like-indicators
feat(like): add missing indicators
2 parents 38790bd + 62f2a42 commit 1eb33ac

File tree

4 files changed

+161
-1
lines changed

4 files changed

+161
-1
lines changed

src/Traits/Like/Markable/Indicators.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@
66

77
trait Indicators
88
{
9+
public function isLikedOrDislikedBy(Model $marker): bool
10+
{
11+
return $this->likes()
12+
->whereBelongsTo($marker, 'marker')
13+
->exists();
14+
}
15+
916
public function isLikedBy(Model $marker): bool
1017
{
1118
return $this->likes()

src/Traits/Like/Marker/Indicators.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,18 @@
66

77
trait Indicators
88
{
9-
public function hasLiked(Model $model): bool
9+
public function hasLikedOrDisliked(Model $model): bool
1010
{
1111
return $this->likes()->whereMorphedTo('markable', $model)->exists();
1212
}
13+
14+
public function hasLiked(Model $model): bool
15+
{
16+
return $this->likes()->whereMorphedTo('markable', $model)->where('value', true)->exists();
17+
}
18+
19+
public function hasDisliked(Model $model): bool
20+
{
21+
return $this->likes()->whereMorphedTo('markable', $model)->where('value', false)->exists();
22+
}
1323
}

tests/Feature/Like/HasLikesTest.php

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,54 @@
99
use LaraZeus\Mark\Tests\Models\Marker;
1010

1111
describe('indicator', function () {
12+
describe('hasLikedOrDisliked', function () {
13+
test('it has correct signature', function () {
14+
$reflection = new ReflectionClass(Marker::class);
15+
16+
expect($reflection->hasMethod('hasLikedOrDisliked'))->toBeTrue();
17+
18+
$method = $reflection->getMethod('hasLikedOrDisliked');
19+
20+
$parameters = $method->getParameters();
21+
expect(count($parameters))->toBe(1);
22+
23+
$param = $parameters[0];
24+
$paramType = $param->getType();
25+
26+
expect($paramType)->not->toBeNull();
27+
expect($paramType->getName())->toBe(Model::class);
28+
expect($paramType->isBuiltin())->toBeFalse();
29+
30+
$returnType = $method->getReturnType();
31+
32+
expect($returnType)->not->toBeNull();
33+
expect($returnType->getName())->toBe('bool');
34+
expect($returnType->allowsNull())->toBeFalse();
35+
});
36+
37+
it('returns true if the marker has marked the markable', function () {
38+
$marker = Marker::factory()->create();
39+
$markable = Markable::factory()->create();
40+
41+
$marker->likes()->create([
42+
'markable_id' => $markable->getKey(),
43+
'markable_type' => $markable->getMorphClass(),
44+
'value' => true,
45+
]);
46+
47+
expect($marker->hasLikedOrDisliked($markable))->toBeTrue();
48+
})
49+
->depends('it has correct signature');
50+
51+
it('returns false if the marker has not marked the markable', function () {
52+
$marker = Marker::factory()->create();
53+
$markable = Markable::factory()->create();
54+
55+
expect($marker->hasLikedOrDisliked($markable))->toBeFalse();
56+
})
57+
->depends('it has correct signature');
58+
});
59+
1260
describe('hasLiked', function () {
1361
test('it has correct signature', function () {
1462
$reflection = new ReflectionClass(Marker::class);
@@ -56,6 +104,54 @@
56104
})
57105
->depends('it has correct signature');
58106
});
107+
108+
describe('hasDisliked', function () {
109+
test('it has correct signature', function () {
110+
$reflection = new ReflectionClass(Marker::class);
111+
112+
expect($reflection->hasMethod('hasDisliked'))->toBeTrue();
113+
114+
$method = $reflection->getMethod('hasDisliked');
115+
116+
$parameters = $method->getParameters();
117+
expect(count($parameters))->toBe(1);
118+
119+
$param = $parameters[0];
120+
$paramType = $param->getType();
121+
122+
expect($paramType)->not->toBeNull();
123+
expect($paramType->getName())->toBe(Model::class);
124+
expect($paramType->isBuiltin())->toBeFalse();
125+
126+
$returnType = $method->getReturnType();
127+
128+
expect($returnType)->not->toBeNull();
129+
expect($returnType->getName())->toBe('bool');
130+
expect($returnType->allowsNull())->toBeFalse();
131+
});
132+
133+
it('returns true if the marker has marked the markable', function () {
134+
$marker = Marker::factory()->create();
135+
$markable = Markable::factory()->create();
136+
137+
$marker->likes()->create([
138+
'markable_id' => $markable->getKey(),
139+
'markable_type' => $markable->getMorphClass(),
140+
'value' => false,
141+
]);
142+
143+
expect($marker->hasDisliked($markable))->toBeTrue();
144+
})
145+
->depends('it has correct signature');
146+
147+
it('returns false if the marker has not marked the markable', function () {
148+
$marker = Marker::factory()->create();
149+
$markable = Markable::factory()->create();
150+
151+
expect($marker->hasDisliked($markable))->toBeFalse();
152+
})
153+
->depends('it has correct signature');
154+
});
59155
});
60156

61157
describe('relation', function () {

tests/Feature/Like/LikeableTest.php

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,53 @@
1111
use LaraZeus\Mark\Tests\Models\Marker;
1212

1313
describe('indicator', function () {
14+
describe('isLikedOrDislikedBy', function () {
15+
test('it has correct signature', function () {
16+
$reflection = new ReflectionClass(Markable::class);
17+
18+
expect($reflection->hasMethod('isLikedOrDislikedBy'))->toBeTrue();
19+
20+
$method = $reflection->getMethod('isLikedOrDislikedBy');
21+
22+
$parameters = $method->getParameters();
23+
expect(count($parameters))->toBe(1);
24+
25+
$param = $parameters[0];
26+
$paramType = $param->getType();
27+
28+
expect($paramType)->not->toBeNull();
29+
expect($paramType->getName())->toBe(Model::class);
30+
expect($paramType->isBuiltin())->toBeFalse();
31+
32+
$returnType = $method->getReturnType();
33+
34+
expect($returnType)->not->toBeNull();
35+
expect($returnType->getName())->toBe('bool');
36+
expect($returnType->allowsNull())->toBeFalse();
37+
});
38+
39+
test('it returns true if the marker has marked the markable', function () {
40+
$marker = Marker::factory()->create();
41+
$markable = Markable::factory()->create();
42+
43+
$markable->likes()->create([
44+
'marker_id' => $marker->getKey(),
45+
'value' => true,
46+
]);
47+
48+
expect($markable->isLikedOrDislikedBy($marker))->toBeTrue();
49+
})
50+
->depends('it has correct signature');
51+
52+
test('it returns false if the marker has not marked the markable', function () {
53+
$marker = Marker::factory()->create();
54+
$markable = Markable::factory()->create();
55+
56+
expect($markable->isLikedOrDislikedBy($marker))->toBeFalse();
57+
})
58+
->depends('it has correct signature');
59+
});
60+
1461
describe('isLikedBy', function () {
1562
test('it has correct signature', function () {
1663
$reflection = new ReflectionClass(Markable::class);

0 commit comments

Comments
 (0)