diff --git a/server/models/activitypub/actor-follow.ts b/server/models/activitypub/actor-follow.ts index 0833b9a93..8498692f0 100644 --- a/server/models/activitypub/actor-follow.ts +++ b/server/models/activitypub/actor-follow.ts @@ -439,13 +439,13 @@ export class ActorFollowModel extends Model { const followerId = (await getServerActor()).id const query = { - attributes: [], + attributes: [ 'id' ], where: { actorId: followerId }, include: [ { - attributes: [ ], + attributes: [ 'id' ], model: ActorModel.unscoped(), required: true, as: 'ActorFollowing', @@ -469,7 +469,7 @@ export class ActorFollowModel extends Model { } const res = await ActorFollowModel.findAll(query) - const followedHosts = res.map(res => res.ActorFollowing.Server.host) + const followedHosts = res.map(row => row.ActorFollowing.Server.host) return difference(hosts, followedHosts) } diff --git a/server/tests/api/notifications/user-notifications.ts b/server/tests/api/notifications/user-notifications.ts index 62b797b47..15a34f5aa 100644 --- a/server/tests/api/notifications/user-notifications.ts +++ b/server/tests/api/notifications/user-notifications.ts @@ -14,10 +14,13 @@ import { getVideoCommentThreads, getVideoThreadComments, immutableAssign, + MockInstancesIndex, registerUser, removeVideoFromBlacklist, - reportVideoAbuse, unfollow, - updateCustomConfig, updateCustomSubConfig, + reportVideoAbuse, + unfollow, + updateCustomConfig, + updateCustomSubConfig, updateMyUser, updateVideo, updateVideoChannel, @@ -29,6 +32,7 @@ import { setAccessTokensToServers } from '../../../../shared/extra-utils/users/l import { waitJobs } from '../../../../shared/extra-utils/server/jobs' import { getUserNotificationSocket } from '../../../../shared/extra-utils/socket/socket-io' import { + checkAutoInstanceFollowing, checkCommentMention, CheckerBaseParams, checkMyVideoImportIsFinished, @@ -45,8 +49,7 @@ import { getUserNotifications, markAsReadAllNotifications, markAsReadNotifications, - updateMyNotificationSettings, - checkAutoInstanceFollowing + updateMyNotificationSettings } from '../../../../shared/extra-utils/users/user-notifications' import { User, @@ -875,7 +878,18 @@ describe('Test users notifications', function () { }) }) - describe('New instance follower', function () { + describe('New instance follows', function () { + const instanceIndexServer = new MockInstancesIndex() + const config = { + followings: { + instance: { + autoFollowIndex: { + indexUrl: 'http://localhost:42100', + enabled: true + } + } + } + } let baseParams: CheckerBaseParams before(async () => { @@ -885,6 +899,9 @@ describe('Test users notifications', function () { socketNotifications: adminNotifications, token: servers[0].accessToken } + + await instanceIndexServer.initialize() + instanceIndexServer.addInstance(servers[1].host) }) it('Should send a notification only to admin when there is a new instance follower', async function () { @@ -928,6 +945,26 @@ describe('Test users notifications', function () { config.followings.instance.autoFollowBack.enabled = false await updateCustomSubConfig(servers[0].url, servers[0].accessToken, config) + await unfollow(servers[0].url, servers[0].accessToken, servers[2]) + await unfollow(servers[2].url, servers[2].accessToken, servers[0]) + }) + + it('Should send a notification on auto instances index follow', async function () { + this.timeout(30000) + await unfollow(servers[0].url, servers[0].accessToken, servers[1]) + + await updateCustomSubConfig(servers[0].url, servers[0].accessToken, config) + + await wait(5000) + await waitJobs(servers) + + const followerHost = servers[0].host + const followingHost = servers[1].host + await checkAutoInstanceFollowing(baseParams, followerHost, followingHost, 'presence') + + config.followings.instance.autoFollowIndex.enabled = false + await updateCustomSubConfig(servers[0].url, servers[0].accessToken, config) + await unfollow(servers[0].url, servers[0].accessToken, servers[1]) }) }) diff --git a/server/typings/utils.ts b/server/typings/utils.ts index 1abb4f73e..24d43b258 100644 --- a/server/typings/utils.ts +++ b/server/typings/utils.ts @@ -19,4 +19,4 @@ export type DeepPartial = { : T[P] extends ReadonlyArray ? ReadonlyArray> : DeepPartial -}; +}