Skip to content

Commit 7ae506d

Browse files
imorlandStyleCIBot
andauthored
chore: enable testing (#33)
* enable testing, test forum actor relation * Apply fixes from StyleCI * use all 1.x supported php versions * revert php versions, needed to to gdpr ext compat * test following * Apply fixes from StyleCI * use basic user serializer * Apply fixes from StyleCI * test notification was sent * simplify * test unfollowing, counts * Apply fixes from StyleCI --------- Co-authored-by: StyleCI Bot <[email protected]>
1 parent 1c2ba6f commit 7ae506d

16 files changed

+501
-39
lines changed

.github/workflows/backend.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ jobs:
66
run:
77
uses: flarum/framework/.github/workflows/[email protected]
88
with:
9-
enable_backend_testing: false
9+
enable_backend_testing: true
1010
enable_phpstan: true
1111
php_versions: '["8.0", "8.1", "8.2", "8.3"]'
1212

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
node_modules
22
vendor
33
composer.lock
4+
.phpunit.result.cache

extend.php

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
use Flarum\Api\Serializer\CurrentUserSerializer;
2121
use Flarum\Api\Serializer\DiscussionSerializer;
2222
use Flarum\Api\Serializer\UserSerializer;
23-
use Flarum\Database\AbstractModel;
2423
use Flarum\Discussion\Event as DiscussionEvent;
2524
use Flarum\Discussion\Filter\DiscussionFilterer;
2625
use Flarum\Extend;
@@ -29,7 +28,6 @@
2928
use Flarum\User\Filter\UserFilterer;
3029
use Flarum\User\Search\UserSearcher;
3130
use Flarum\User\User;
32-
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
3331

3432
return [
3533
(new Extend\Frontend('forum'))
@@ -42,14 +40,8 @@
4240
new Extend\Locales(__DIR__.'/resources/locale'),
4341

4442
(new Extend\Model(User::class))
45-
->relationship('followedUsers', function (AbstractModel $model): BelongsToMany {
46-
return $model->belongsToMany(User::class, 'user_followers', 'user_id', 'followed_user_id')
47-
->withPivot('subscription');
48-
})
49-
->relationship('followedBy', function (AbstractModel $model): BelongsToMany {
50-
return $model->belongsToMany(User::class, 'user_followers', 'followed_user_id', 'user_id')
51-
->withPivot('subscription');
52-
}),
43+
->belongsToMany('followedUsers', User::class, 'user_followers', 'user_id', 'followed_user_id')
44+
->belongsToMany('followedBy', User::class, 'user_followers', 'followed_user_id', 'user_id'),
5345

5446
(new Extend\View())
5547
->namespace('ianm-follow-users', __DIR__.'/resources/views'),
@@ -83,10 +75,13 @@
8375
->modelPolicy(User::class, Access\UserPolicy::class),
8476

8577
(new Extend\ApiSerializer(CurrentUserSerializer::class))
86-
->hasMany('followedUsers', UserSerializer::class),
78+
->hasMany('followedUsers', BasicUserSerializer::class),
79+
80+
(new Extend\ApiSerializer(BasicUserSerializer::class))
81+
->attributes(Api\AddBasicUserAttributes::class),
8782

8883
(new Extend\ApiSerializer(UserSerializer::class))
89-
->attributes(AddUserAttributes::class),
84+
->attributes(Api\AddUserAttributes::class),
9085

9186
(new Extend\ApiController(ListUsersController::class))
9287
->prepareDataForSerialization(function (ListUsersController $controller, $data, $request) {
@@ -98,13 +93,7 @@
9893
->addInclude(['followedUsers', 'followedBy']),
9994

10095
(new Extend\ApiController(ShowUserController::class))
101-
->prepareDataForSerialization(function (ShowUserController $controller, User $data, $request) {
102-
$actor = RequestUtil::getActor($request);
103-
$actor->load('followedUsers');
104-
$data->load('followedUsers');
105-
106-
return $data;
107-
})
96+
->prepareDataForSerialization(Api\LoadRelations::class)
10897
->addInclude(['followedUsers', 'followedBy']),
10998

11099
(new Extend\ApiController(ShowForumController::class))

migrations/2021_07_14_000002_migrate_old_subscriptions.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
*
1111
*/
1212

13-
use IanM\FollowUsers\FollowState;
1413
use Illuminate\Database\Schema\Builder;
1514

1615
return [
1716
'up' => function (Builder $schema) {
18-
FollowState::whereNull('subscription')
17+
$schema->getConnection()->table('user_followers')
18+
->whereNull('subscription')
1919
->update(['subscription' => 'follow']);
2020
},
2121

src/AddUserAttributes.php renamed to src/Api/AddBasicUserAttributes.php

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@
1010
*
1111
*/
1212

13-
namespace IanM\FollowUsers;
13+
namespace IanM\FollowUsers\Api;
1414

15-
use Flarum\Api\Serializer\UserSerializer;
15+
use Flarum\Api\Serializer\BasicUserSerializer;
1616
use Flarum\Settings\SettingsRepositoryInterface;
1717
use Flarum\User\User;
18+
use IanM\FollowUsers\FollowState;
1819

19-
class AddUserAttributes
20+
class AddBasicUserAttributes
2021
{
2122
/**
2223
* @var SettingsRepositoryInterface
@@ -28,17 +29,13 @@ public function __construct(SettingsRepositoryInterface $settings)
2829
$this->settings = $settings;
2930
}
3031

31-
public function __invoke(UserSerializer $serializer, User $user, array $attributes): array
32+
public function __invoke(BasicUserSerializer $serializer, User $user, array $attributes): array
3233
{
33-
$actor = $serializer->getActor();
34-
35-
$attributes['followed'] = FollowState::for($actor, $user);
36-
$attributes['canBeFollowed'] = $actor->can('follow', $user);
37-
38-
$attributes['followingCount'] = FollowState::getFollowingCount($user);
34+
$attributes['followed'] = FollowState::for($serializer->getActor(), $user);
3935

4036
if ((bool) $this->settings->get('ianm-follow-users.stats-on-profile')) {
4137
$attributes['followerCount'] = FollowState::getFollowerCount($user);
38+
$attributes['followingCount'] = FollowState::getFollowingCount($user);
4239
}
4340

4441
return $attributes;

src/Api/AddUserAttributes.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
/*
4+
* This file is part of ianm/follow-users
5+
*
6+
* Copyright (c) Ian Morland.
7+
*
8+
* For the full copyright and license information, please view the LICENSE.md
9+
* file that was distributed with this source code.
10+
*
11+
*/
12+
13+
namespace IanM\FollowUsers\Api;
14+
15+
use Flarum\Api\Serializer\UserSerializer;
16+
use Flarum\User\User;
17+
18+
class AddUserAttributes
19+
{
20+
public function __invoke(UserSerializer $serializer, User $user, array $attributes): array
21+
{
22+
$attributes['canBeFollowed'] = $serializer->getActor()->can('follow', $user);
23+
24+
return $attributes;
25+
}
26+
}

src/Api/LoadRelations.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
/*
4+
* This file is part of ianm/follow-users
5+
*
6+
* Copyright (c) Ian Morland.
7+
*
8+
* For the full copyright and license information, please view the LICENSE.md
9+
* file that was distributed with this source code.
10+
*
11+
*/
12+
13+
namespace IanM\FollowUsers\Api;
14+
15+
use Flarum\Api\Controller\AbstractSerializeController;
16+
use Flarum\Http\RequestUtil;
17+
use Flarum\User\User;
18+
use Psr\Http\Message\ServerRequestInterface;
19+
20+
class LoadRelations
21+
{
22+
public function __invoke(AbstractSerializeController $controller, User $data, ServerRequestInterface $request): User
23+
{
24+
RequestUtil::getActor($request)
25+
->load('followedUsers');
26+
27+
$data->load('followedUsers');
28+
29+
return $data;
30+
}
31+
}

src/FollowState.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ class FollowState extends AbstractModel
2929

3030
protected $fillable = ['user_id', 'followed_user_id', 'subscription', 'updated_at'];
3131

32+
protected $casts = [
33+
'created_at' => 'datetime',
34+
'updated_at' => 'datetime',
35+
];
36+
3237
/**
3338
* Get the follow user subscription state for the given User.
3439
*

src/Jobs/SendNotificationWhenDiscussionIsStarted.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ public function handle(NotificationSyncer $notifications)
4141
{
4242
$firstPost = $this->discussion->firstPost ?? $this->discussion->posts()->orderBy('number')->first();
4343

44-
/** @phpstan-ignore-next-line */
4544
if (!$firstPost || null === $this->discussion->user->followedBy) {
4645
return;
4746
}

src/Jobs/SendNotificationWhenFollowerPosted.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ public function __construct(Post $post, int $lastPostNumber)
4141

4242
public function handle(NotificationSyncer $notifications)
4343
{
44-
/** @phpstan-ignore-next-line */
4544
if (!$this->post->exists || null === $this->post->user->followedBy) {
4645
return;
4746
}

0 commit comments

Comments
 (0)