Add ability to login with email
[oweals/peertube.git] / server / tests / api / check-params / config.ts
1 /* tslint:disable:no-unused-expression */
2
3 import { omit } from 'lodash'
4 import 'mocha'
5 import { CustomConfig } from '../../../../shared/models/config/custom-config.model'
6
7 import {
8   createUser, flushTests, killallServers, makeDeleteRequest, makeGetRequest, makePutBodyRequest, runServer, ServerInfo,
9   setAccessTokensToServers, userLogin
10 } from '../../utils'
11
12 describe('Test config API validators', function () {
13   const path = '/api/v1/config/custom'
14   let server: ServerInfo
15   let userAccessToken: string
16   const updateParams: CustomConfig = {
17     cache: {
18       previews: {
19         size: 2
20       }
21     },
22     signup: {
23       enabled: false,
24       limit: 5
25     },
26     admin: {
27       email: 'superadmin1@example.com'
28     },
29     user: {
30       videoQuota: 5242881
31     },
32     transcoding: {
33       enabled: true,
34       threads: 1,
35       resolutions: {
36         '240p': false,
37         '360p': true,
38         '480p': true,
39         '720p': false,
40         '1080p': false
41       }
42     }
43   }
44
45   // ---------------------------------------------------------------
46
47   before(async function () {
48     this.timeout(30000)
49
50     await flushTests()
51     server = await runServer(1)
52
53     await setAccessTokensToServers([ server ])
54
55     const user = {
56       username: 'user1',
57       password: 'password'
58     }
59     await createUser(server.url, server.accessToken, user.username, user.password)
60     userAccessToken = await userLogin(server, user)
61   })
62
63   describe('When getting the configuration', function () {
64     it('Should fail without token', async function () {
65       await makeGetRequest({
66         url: server.url,
67         path,
68         statusCodeExpected: 401
69       })
70     })
71
72     it('Should fail if the user is not an administrator', async function () {
73       await makeGetRequest({
74         url: server.url,
75         path,
76         token: userAccessToken,
77         statusCodeExpected: 403
78       })
79     })
80   })
81
82   describe('When updating the configuration', function () {
83     it('Should fail without token', async function () {
84       await makePutBodyRequest({
85         url: server.url,
86         path,
87         fields: updateParams,
88         statusCodeExpected: 401
89       })
90     })
91
92     it('Should fail if the user is not an administrator', async function () {
93       await makePutBodyRequest({
94         url: server.url,
95         path,
96         fields: updateParams,
97         token: userAccessToken,
98         statusCodeExpected: 403
99       })
100     })
101
102     it('Should fail if it misses a key', async function () {
103       const newUpdateParams = omit(updateParams, 'admin.email')
104
105       await makePutBodyRequest({
106         url: server.url,
107         path,
108         fields: newUpdateParams,
109         token: server.accessToken,
110         statusCodeExpected: 400
111       })
112     })
113
114     it('Should success with the correct parameters', async function () {
115       await makePutBodyRequest({
116         url: server.url,
117         path,
118         fields: updateParams,
119         token: server.accessToken,
120         statusCodeExpected: 200
121       })
122     })
123   })
124
125   describe('When deleting the configuration', function () {
126     it('Should fail without token', async function () {
127       await makeDeleteRequest({
128         url: server.url,
129         path,
130         statusCodeExpected: 401
131       })
132     })
133
134     it('Should fail if the user is not an administrator', async function () {
135       await makeDeleteRequest({
136         url: server.url,
137         path,
138         token: userAccessToken,
139         statusCodeExpected: 403
140       })
141     })
142   })
143
144   after(async function () {
145     killallServers([ server ])
146
147     // Keep the logs if the test failed
148     if (this['ok']) {
149       await flushTests()
150     }
151   })
152 })