1 /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
4 import * as chai from 'chai'
10 setAccessTokensToServers,
13 } from '@shared/extra-utils'
15 const expect = chai.expect
17 async function checkFollow (follower: PeerTubeServer, following: PeerTubeServer, exists: boolean) {
19 const body = await following.follows.getFollowers({ start: 0, count: 5, sort: '-createdAt' })
20 const follow = body.data.find(f => f.follower.host === follower.host && f.state === 'accepted')
22 if (exists === true) expect(follow).to.exist
23 else expect(follow).to.be.undefined
27 const body = await follower.follows.getFollowings({ start: 0, count: 5, sort: '-createdAt' })
28 const follow = body.data.find(f => f.following.host === following.host && f.state === 'accepted')
30 if (exists === true) expect(follow).to.exist
31 else expect(follow).to.be.undefined
35 async function server1Follows2 (servers: PeerTubeServer[]) {
36 await servers[0].follows.follow({ hosts: [ servers[1].host ] })
38 await waitJobs(servers)
41 async function resetFollows (servers: PeerTubeServer[]) {
43 await servers[0].follows.unfollow({ target: servers[1] })
44 await servers[1].follows.unfollow({ target: servers[0] })
48 await waitJobs(servers)
50 await checkFollow(servers[0], servers[1], false)
51 await checkFollow(servers[1], servers[0], false)
54 describe('Test auto follows', function () {
55 let servers: PeerTubeServer[] = []
57 before(async function () {
60 servers = await createMultipleServers(3)
62 // Get the access tokens
63 await setAccessTokensToServers(servers)
66 describe('Auto follow back', function () {
68 it('Should not auto follow back if the option is not enabled', async function () {
71 await server1Follows2(servers)
73 await checkFollow(servers[0], servers[1], true)
74 await checkFollow(servers[1], servers[0], false)
76 await resetFollows(servers)
79 it('Should auto follow back on auto accept if the option is enabled', async function () {
85 autoFollowBack: { enabled: true }
89 await servers[1].config.updateCustomSubConfig({ newConfig: config })
91 await server1Follows2(servers)
93 await checkFollow(servers[0], servers[1], true)
94 await checkFollow(servers[1], servers[0], true)
96 await resetFollows(servers)
99 it('Should wait the acceptation before auto follow back', async function () {
105 autoFollowBack: { enabled: true }
114 await servers[1].config.updateCustomSubConfig({ newConfig: config })
116 await server1Follows2(servers)
118 await checkFollow(servers[0], servers[1], false)
119 await checkFollow(servers[1], servers[0], false)
121 await servers[1].follows.acceptFollower({ follower: 'peertube@' + servers[0].host })
122 await waitJobs(servers)
124 await checkFollow(servers[0], servers[1], true)
125 await checkFollow(servers[1], servers[0], true)
127 await resetFollows(servers)
129 config.followings.instance.autoFollowBack.enabled = false
130 config.followers.instance.manualApproval = false
131 await servers[1].config.updateCustomSubConfig({ newConfig: config })
135 describe('Auto follow index', function () {
136 const instanceIndexServer = new MockInstancesIndex()
140 port = await instanceIndexServer.initialize()
143 it('Should not auto follow index if the option is not enabled', async function () {
147 await waitJobs(servers)
149 await checkFollow(servers[0], servers[1], false)
150 await checkFollow(servers[1], servers[0], false)
153 it('Should auto follow the index', async function () {
156 instanceIndexServer.addInstance(servers[1].host)
162 indexUrl: `http://localhost:${port}/api/v1/instances/hosts`,
168 await servers[0].config.updateCustomSubConfig({ newConfig: config })
171 await waitJobs(servers)
173 await checkFollow(servers[0], servers[1], true)
175 await resetFollows(servers)
178 it('Should follow new added instances in the index but not old ones', async function () {
181 instanceIndexServer.addInstance(servers[2].host)
184 await waitJobs(servers)
186 await checkFollow(servers[0], servers[1], false)
187 await checkFollow(servers[0], servers[2], true)
191 after(async function () {
192 await cleanupTests(servers)