Add tests and fix bugs for video privacy
[oweals/peertube.git] / server / tests / utils / login.ts
1 import * as request from 'supertest'
2
3 import { ServerInfo } from './servers'
4
5 type Client = { id: string, secret: string }
6 type User = { username: string, password: string }
7 type Server = { url: string, client: Client, user: User }
8
9 function login (url: string, client: Client, user: User, expectedStatus = 200) {
10   const path = '/api/v1/users/token'
11
12   const body = {
13     client_id: client.id,
14     client_secret: client.secret,
15     username: user.username,
16     password: user.password,
17     response_type: 'code',
18     grant_type: 'password',
19     scope: 'upload'
20   }
21
22   return request(url)
23           .post(path)
24           .type('form')
25           .send(body)
26           .expect(expectedStatus)
27 }
28
29 async function loginAndGetAccessToken (server: Server) {
30   const res = await login(server.url, server.client, server.user, 200)
31
32   return res.body.access_token as string
33 }
34
35 async function getUserAccessToken (server: Server, user: User) {
36   const res = await login(server.url, server.client, user, 200)
37
38   return res.body.access_token as string
39 }
40
41 function setAccessTokensToServers (servers: ServerInfo[]) {
42   const tasks: Promise<any>[] = []
43
44   for (const server of servers) {
45     const p = loginAndGetAccessToken(server).then(t => server.accessToken = t)
46     tasks.push(p)
47   }
48
49   return Promise.all(tasks)
50 }
51
52 // ---------------------------------------------------------------------------
53
54 export {
55   login,
56   loginAndGetAccessToken,
57   getUserAccessToken,
58   setAccessTokensToServers
59 }