033c6a719828f5f026451d1c895ad9eb6456b5f1
[oweals/peertube.git] / server / tests / utils / follows.ts
1 import * as request from 'supertest'
2 import { wait } from './miscs'
3 import { ServerInfo } from './servers'
4
5 function getFollowersListPaginationAndSort (url: string, start: number, count: number, sort: string) {
6   const path = '/api/v1/server/followers'
7
8   return request(url)
9     .get(path)
10     .query({ start })
11     .query({ count })
12     .query({ sort })
13     .set('Accept', 'application/json')
14     .expect(200)
15     .expect('Content-Type', /json/)
16 }
17
18 function getFollowingListPaginationAndSort (url: string, start: number, count: number, sort: string) {
19   const path = '/api/v1/server/following'
20
21   return request(url)
22     .get(path)
23     .query({ start })
24     .query({ count })
25     .query({ sort })
26     .set('Accept', 'application/json')
27     .expect(200)
28     .expect('Content-Type', /json/)
29 }
30
31 async function follow (follower: string, following: string[], accessToken: string, expectedStatus = 204) {
32   const path = '/api/v1/server/following'
33
34   const followingHosts = following.map(f => f.replace(/^http:\/\//, ''))
35   const res = await request(follower)
36     .post(path)
37     .set('Accept', 'application/json')
38     .set('Authorization', 'Bearer ' + accessToken)
39     .send({ 'hosts': followingHosts })
40     .expect(expectedStatus)
41
42   return res
43 }
44
45 async function unfollow (url: string, accessToken: string, id: number, expectedStatus = 204) {
46   const path = '/api/v1/server/following/' + id
47
48   const res = await request(url)
49     .delete(path)
50     .set('Accept', 'application/json')
51     .set('Authorization', 'Bearer ' + accessToken)
52     .expect(expectedStatus)
53
54   return res
55 }
56
57 async function doubleFollow (server1: ServerInfo, server2: ServerInfo) {
58   await Promise.all([
59     follow(server1.url, [ server2.url ], server1.accessToken),
60     follow(server2.url, [ server1.url ], server2.accessToken)
61   ])
62
63   // Wait request propagation
64   await wait(10000)
65
66   return true
67 }
68
69 // ---------------------------------------------------------------------------
70
71 export {
72   getFollowersListPaginationAndSort,
73   getFollowingListPaginationAndSort,
74   unfollow,
75   follow,
76   doubleFollow
77 }