1 /* tslint:disable:no-unused-expression */
3 import * as chai from 'chai'
8 flushAndRunMultipleServers,
10 setAccessTokensToServers,
13 } from '../../../../shared/extra-utils/index'
14 import { follow, getFollowersListPaginationAndSort, getFollowingListPaginationAndSort } from '../../../../shared/extra-utils/server/follows'
15 import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
16 import { ActorFollow } from '../../../../shared/models/actors'
18 const expect = chai.expect
20 async function checkFollow (follower: ServerInfo, following: ServerInfo, exists: boolean) {
22 const res = await getFollowersListPaginationAndSort(following.url, 0, 5, '-createdAt')
23 const follows = res.body.data as ActorFollow[]
25 if (exists === true) {
26 expect(res.body.total).to.equal(1)
28 expect(follows[ 0 ].follower.host).to.equal(follower.host)
29 expect(follows[ 0 ].state).to.equal('accepted')
31 expect(follows.filter(f => f.state === 'accepted')).to.have.lengthOf(0)
36 const res = await getFollowingListPaginationAndSort(follower.url, 0, 5, '-createdAt')
37 const follows = res.body.data as ActorFollow[]
39 if (exists === true) {
40 expect(res.body.total).to.equal(1)
42 expect(follows[ 0 ].following.host).to.equal(following.host)
43 expect(follows[ 0 ].state).to.equal('accepted')
45 expect(follows.filter(f => f.state === 'accepted')).to.have.lengthOf(0)
50 async function server1Follows2 (servers: ServerInfo[]) {
51 await follow(servers[0].url, [ servers[1].host ], servers[0].accessToken)
53 await waitJobs(servers)
56 async function resetFollows (servers: ServerInfo[]) {
58 await unfollow(servers[ 0 ].url, servers[ 0 ].accessToken, servers[ 1 ])
59 await unfollow(servers[ 1 ].url, servers[ 1 ].accessToken, servers[ 0 ])
60 } catch { /* empty */ }
62 await waitJobs(servers)
64 await checkFollow(servers[0], servers[1], false)
65 await checkFollow(servers[1], servers[0], false)
68 describe('Test auto follows', function () {
69 let servers: ServerInfo[] = []
71 before(async function () {
74 servers = await flushAndRunMultipleServers(2)
76 // Get the access tokens
77 await setAccessTokensToServers(servers)
80 describe('Auto follow back', function () {
82 it('Should not auto follow back if the option is not enabled', async function () {
85 await server1Follows2(servers)
87 await checkFollow(servers[0], servers[1], true)
88 await checkFollow(servers[1], servers[0], false)
90 await resetFollows(servers)
93 it('Should auto follow back on auto accept if the option is enabled', async function () {
99 autoFollowBack: { enabled: true }
103 await updateCustomSubConfig(servers[1].url, servers[1].accessToken, config)
105 await server1Follows2(servers)
107 await checkFollow(servers[0], servers[1], true)
108 await checkFollow(servers[1], servers[0], true)
110 await resetFollows(servers)
113 it('Should wait the acceptation before auto follow back', async function () {
119 autoFollowBack: { enabled: true }
128 await updateCustomSubConfig(servers[1].url, servers[1].accessToken, config)
130 await server1Follows2(servers)
132 await checkFollow(servers[0], servers[1], false)
133 await checkFollow(servers[1], servers[0], false)
135 await acceptFollower(servers[1].url, servers[1].accessToken, 'peertube@' + servers[0].host)
136 await waitJobs(servers)
138 await checkFollow(servers[0], servers[1], true)
139 await checkFollow(servers[1], servers[0], true)
141 await resetFollows(servers)
145 after(async function () {
146 await cleanupTests(servers)