]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/tests/utils/users/users.ts
e24e721bdba5604f240c3abef2b10f62fb22b115
[github/Chocobozzz/PeerTube.git] / server / tests / utils / users / users.ts
1 import * as request from 'supertest'
2 import { makePostBodyRequest, makePutBodyRequest, updateAvatarRequest } from '../'
3
4 import { UserRole } from '../../../../shared/index'
5 import { NSFWPolicyType } from '../../../../shared/models/videos/nsfw-policy.type'
6
7 function createUser (
8 url: string,
9 accessToken: string,
10 username: string,
11 password: string,
12 videoQuota = 1000000,
13 role: UserRole = UserRole.USER,
14 specialStatus = 200
15 ) {
16 const path = '/api/v1/users'
17 const body = {
18 username,
19 password,
20 role,
21 email: username + '@example.com',
22 videoQuota
23 }
24
25 return request(url)
26 .post(path)
27 .set('Accept', 'application/json')
28 .set('Authorization', 'Bearer ' + accessToken)
29 .send(body)
30 .expect(specialStatus)
31 }
32
33 function registerUser (url: string, username: string, password: string, specialStatus = 204) {
34 const path = '/api/v1/users/register'
35 const body = {
36 username,
37 password,
38 email: username + '@example.com'
39 }
40
41 return request(url)
42 .post(path)
43 .set('Accept', 'application/json')
44 .send(body)
45 .expect(specialStatus)
46 }
47
48 function getMyUserInformation (url: string, accessToken: string, specialStatus = 200) {
49 const path = '/api/v1/users/me'
50
51 return request(url)
52 .get(path)
53 .set('Accept', 'application/json')
54 .set('Authorization', 'Bearer ' + accessToken)
55 .expect(specialStatus)
56 .expect('Content-Type', /json/)
57 }
58
59 function deleteMe (url: string, accessToken: string, specialStatus = 204) {
60 const path = '/api/v1/users/me'
61
62 return request(url)
63 .delete(path)
64 .set('Accept', 'application/json')
65 .set('Authorization', 'Bearer ' + accessToken)
66 .expect(specialStatus)
67 }
68
69 function getMyUserVideoQuotaUsed (url: string, accessToken: string, specialStatus = 200) {
70 const path = '/api/v1/users/me/video-quota-used'
71
72 return request(url)
73 .get(path)
74 .set('Accept', 'application/json')
75 .set('Authorization', 'Bearer ' + accessToken)
76 .expect(specialStatus)
77 .expect('Content-Type', /json/)
78 }
79
80 function getUserInformation (url: string, accessToken: string, userId: number) {
81 const path = '/api/v1/users/' + userId
82
83 return request(url)
84 .get(path)
85 .set('Accept', 'application/json')
86 .set('Authorization', 'Bearer ' + accessToken)
87 .expect(200)
88 .expect('Content-Type', /json/)
89 }
90
91 function getMyUserVideoRating (url: string, accessToken: string, videoId: number | string, specialStatus = 200) {
92 const path = '/api/v1/users/me/videos/' + videoId + '/rating'
93
94 return request(url)
95 .get(path)
96 .set('Accept', 'application/json')
97 .set('Authorization', 'Bearer ' + accessToken)
98 .expect(specialStatus)
99 .expect('Content-Type', /json/)
100 }
101
102 function getUsersList (url: string, accessToken: string) {
103 const path = '/api/v1/users'
104
105 return request(url)
106 .get(path)
107 .set('Accept', 'application/json')
108 .set('Authorization', 'Bearer ' + accessToken)
109 .expect(200)
110 .expect('Content-Type', /json/)
111 }
112
113 function getUsersListPaginationAndSort (url: string, accessToken: string, start: number, count: number, sort: string) {
114 const path = '/api/v1/users'
115
116 return request(url)
117 .get(path)
118 .query({ start })
119 .query({ count })
120 .query({ sort })
121 .set('Accept', 'application/json')
122 .set('Authorization', 'Bearer ' + accessToken)
123 .expect(200)
124 .expect('Content-Type', /json/)
125 }
126
127 function removeUser (url: string, userId: number | string, accessToken: string, expectedStatus = 204) {
128 const path = '/api/v1/users'
129
130 return request(url)
131 .delete(path + '/' + userId)
132 .set('Accept', 'application/json')
133 .set('Authorization', 'Bearer ' + accessToken)
134 .expect(expectedStatus)
135 }
136
137 function updateMyUser (options: {
138 url: string
139 accessToken: string,
140 newPassword?: string,
141 nsfwPolicy?: NSFWPolicyType,
142 email?: string,
143 autoPlayVideo?: boolean
144 displayName?: string,
145 description?: string
146 }) {
147 const path = '/api/v1/users/me'
148
149 const toSend = {}
150 if (options.newPassword !== undefined && options.newPassword !== null) toSend['password'] = options.newPassword
151 if (options.nsfwPolicy !== undefined && options.nsfwPolicy !== null) toSend['nsfwPolicy'] = options.nsfwPolicy
152 if (options.autoPlayVideo !== undefined && options.autoPlayVideo !== null) toSend['autoPlayVideo'] = options.autoPlayVideo
153 if (options.email !== undefined && options.email !== null) toSend['email'] = options.email
154 if (options.description !== undefined && options.description !== null) toSend['description'] = options.description
155 if (options.displayName !== undefined && options.displayName !== null) toSend['displayName'] = options.displayName
156
157 return makePutBodyRequest({
158 url: options.url,
159 path,
160 token: options.accessToken,
161 fields: toSend,
162 statusCodeExpected: 204
163 })
164 }
165
166 function updateMyAvatar (options: {
167 url: string,
168 accessToken: string,
169 fixture: string
170 }) {
171 const path = '/api/v1/users/me/avatar/pick'
172
173 return updateAvatarRequest(Object.assign(options, { path }))
174 }
175
176 function updateUser (options: {
177 url: string
178 userId: number,
179 accessToken: string,
180 email?: string,
181 videoQuota?: number,
182 role?: UserRole
183 }) {
184 const path = '/api/v1/users/' + options.userId
185
186 const toSend = {}
187 if (options.email !== undefined && options.email !== null) toSend['email'] = options.email
188 if (options.videoQuota !== undefined && options.videoQuota !== null) toSend['videoQuota'] = options.videoQuota
189 if (options.role !== undefined && options.role !== null) toSend['role'] = options.role
190
191 return makePutBodyRequest({
192 url: options.url,
193 path,
194 token: options.accessToken,
195 fields: toSend,
196 statusCodeExpected: 204
197 })
198 }
199
200 function askResetPassword (url: string, email: string) {
201 const path = '/api/v1/users/ask-reset-password'
202
203 return makePostBodyRequest({
204 url,
205 path,
206 fields: { email },
207 statusCodeExpected: 204
208 })
209 }
210
211 function resetPassword (url: string, userId: number, verificationString: string, password: string, statusCodeExpected = 204) {
212 const path = '/api/v1/users/' + userId + '/reset-password'
213
214 return makePostBodyRequest({
215 url,
216 path,
217 fields: { password, verificationString },
218 statusCodeExpected
219 })
220 }
221
222 // ---------------------------------------------------------------------------
223
224 export {
225 createUser,
226 registerUser,
227 getMyUserInformation,
228 getMyUserVideoRating,
229 deleteMe,
230 getMyUserVideoQuotaUsed,
231 getUsersList,
232 getUsersListPaginationAndSort,
233 removeUser,
234 updateUser,
235 updateMyUser,
236 getUserInformation,
237 askResetPassword,
238 resetPassword,
239 updateMyAvatar
240 }