1 /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
9 makeDeleteRequest, makeGetRequest,
12 setAccessTokensToServers,
14 } from '../../../../shared/extra-utils'
16 checkBadCountPagination,
17 checkBadSortPagination,
18 checkBadStartPagination
19 } from '../../../../shared/extra-utils/requests/check-api-params'
20 import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
22 describe('Test server follows API validators', function () {
23 let server: ServerInfo
25 // ---------------------------------------------------------------
27 before(async function () {
30 server = await flushAndRunServer(1)
32 await setAccessTokensToServers([ server ])
35 describe('When managing following', function () {
36 let userAccessToken = null
38 before(async function () {
44 await createUser({ url: server.url, accessToken: server.accessToken, username: user.username, password: user.password })
45 userAccessToken = await userLogin(server, user)
48 describe('When adding follows', function () {
49 const path = '/api/v1/server/following'
51 it('Should fail without hosts', async function () {
52 await makePostBodyRequest({
55 token: server.accessToken,
56 statusCodeExpected: HttpStatusCode.BAD_REQUEST_400
60 it('Should fail if hosts is not an array', async function () {
61 await makePostBodyRequest({
64 token: server.accessToken,
65 fields: { hosts: 'localhost:9002' },
66 statusCodeExpected: HttpStatusCode.BAD_REQUEST_400
70 it('Should fail if the array is not composed by hosts', async function () {
71 await makePostBodyRequest({
74 fields: { hosts: [ 'localhost:9002', 'localhost:coucou' ] },
75 token: server.accessToken,
76 statusCodeExpected: HttpStatusCode.BAD_REQUEST_400
80 it('Should fail if the array is composed with http schemes', async function () {
81 await makePostBodyRequest({
84 fields: { hosts: [ 'localhost:9002', 'http://localhost:9003' ] },
85 token: server.accessToken,
86 statusCodeExpected: HttpStatusCode.BAD_REQUEST_400
90 it('Should fail if hosts are not unique', async function () {
91 await makePostBodyRequest({
94 fields: { urls: [ 'localhost:9002', 'localhost:9002' ] },
95 token: server.accessToken,
96 statusCodeExpected: HttpStatusCode.BAD_REQUEST_400
100 it('Should fail with an invalid token', async function () {
101 await makePostBodyRequest({
104 fields: { hosts: [ 'localhost:9002' ] },
106 statusCodeExpected: HttpStatusCode.UNAUTHORIZED_401
110 it('Should fail if the user is not an administrator', async function () {
111 await makePostBodyRequest({
114 fields: { hosts: [ 'localhost:9002' ] },
115 token: userAccessToken,
116 statusCodeExpected: HttpStatusCode.FORBIDDEN_403
121 describe('When listing followings', function () {
122 const path = '/api/v1/server/following'
124 it('Should fail with a bad start pagination', async function () {
125 await checkBadStartPagination(server.url, path)
128 it('Should fail with a bad count pagination', async function () {
129 await checkBadCountPagination(server.url, path)
132 it('Should fail with an incorrect sort', async function () {
133 await checkBadSortPagination(server.url, path)
136 it('Should fail with an incorrect state', async function () {
137 await makeGetRequest({
146 it('Should fail with an incorrect actor type', async function () {
147 await makeGetRequest({
156 it('Should fail succeed with the correct params', async function () {
157 await makeGetRequest({
160 statusCodeExpected: HttpStatusCode.OK_200,
163 actorType: 'Application'
169 describe('When listing followers', function () {
170 const path = '/api/v1/server/followers'
172 it('Should fail with a bad start pagination', async function () {
173 await checkBadStartPagination(server.url, path)
176 it('Should fail with a bad count pagination', async function () {
177 await checkBadCountPagination(server.url, path)
180 it('Should fail with an incorrect sort', async function () {
181 await checkBadSortPagination(server.url, path)
184 it('Should fail with an incorrect actor type', async function () {
185 await makeGetRequest({
194 it('Should fail with an incorrect state', async function () {
195 await makeGetRequest({
200 actorType: 'Application'
205 it('Should fail succeed with the correct params', async function () {
206 await makeGetRequest({
209 statusCodeExpected: HttpStatusCode.OK_200,
217 describe('When removing a follower', function () {
218 const path = '/api/v1/server/followers'
220 it('Should fail with an invalid token', async function () {
221 await makeDeleteRequest({
223 path: path + '/toto@localhost:9002',
225 statusCodeExpected: HttpStatusCode.UNAUTHORIZED_401
229 it('Should fail if the user is not an administrator', async function () {
230 await makeDeleteRequest({
232 path: path + '/toto@localhost:9002',
233 token: userAccessToken,
234 statusCodeExpected: HttpStatusCode.FORBIDDEN_403
238 it('Should fail with an invalid follower', async function () {
239 await makeDeleteRequest({
241 path: path + '/toto',
242 token: server.accessToken,
243 statusCodeExpected: HttpStatusCode.BAD_REQUEST_400
247 it('Should fail with an unknown follower', async function () {
248 await makeDeleteRequest({
250 path: path + '/toto@localhost:9003',
251 token: server.accessToken,
252 statusCodeExpected: HttpStatusCode.NOT_FOUND_404
257 describe('When accepting a follower', function () {
258 const path = '/api/v1/server/followers'
260 it('Should fail with an invalid token', async function () {
261 await makePostBodyRequest({
263 path: path + '/toto@localhost:9002/accept',
265 statusCodeExpected: HttpStatusCode.UNAUTHORIZED_401
269 it('Should fail if the user is not an administrator', async function () {
270 await makePostBodyRequest({
272 path: path + '/toto@localhost:9002/accept',
273 token: userAccessToken,
274 statusCodeExpected: HttpStatusCode.FORBIDDEN_403
278 it('Should fail with an invalid follower', async function () {
279 await makePostBodyRequest({
281 path: path + '/toto/accept',
282 token: server.accessToken,
283 statusCodeExpected: HttpStatusCode.BAD_REQUEST_400
287 it('Should fail with an unknown follower', async function () {
288 await makePostBodyRequest({
290 path: path + '/toto@localhost:9003/accept',
291 token: server.accessToken,
292 statusCodeExpected: HttpStatusCode.NOT_FOUND_404
297 describe('When rejecting a follower', function () {
298 const path = '/api/v1/server/followers'
300 it('Should fail with an invalid token', async function () {
301 await makePostBodyRequest({
303 path: path + '/toto@localhost:9002/reject',
305 statusCodeExpected: HttpStatusCode.UNAUTHORIZED_401
309 it('Should fail if the user is not an administrator', async function () {
310 await makePostBodyRequest({
312 path: path + '/toto@localhost:9002/reject',
313 token: userAccessToken,
314 statusCodeExpected: HttpStatusCode.FORBIDDEN_403
318 it('Should fail with an invalid follower', async function () {
319 await makePostBodyRequest({
321 path: path + '/toto/reject',
322 token: server.accessToken,
323 statusCodeExpected: HttpStatusCode.BAD_REQUEST_400
327 it('Should fail with an unknown follower', async function () {
328 await makePostBodyRequest({
330 path: path + '/toto@localhost:9003/reject',
331 token: server.accessToken,
332 statusCodeExpected: HttpStatusCode.NOT_FOUND_404
337 describe('When removing following', function () {
338 const path = '/api/v1/server/following'
340 it('Should fail with an invalid token', async function () {
341 await makeDeleteRequest({
343 path: path + '/localhost:9002',
345 statusCodeExpected: HttpStatusCode.UNAUTHORIZED_401
349 it('Should fail if the user is not an administrator', async function () {
350 await makeDeleteRequest({
352 path: path + '/localhost:9002',
353 token: userAccessToken,
354 statusCodeExpected: HttpStatusCode.FORBIDDEN_403
358 it('Should fail if we do not follow this server', async function () {
359 await makeDeleteRequest({
361 path: path + '/example.com',
362 token: server.accessToken,
363 statusCodeExpected: HttpStatusCode.NOT_FOUND_404
369 after(async function () {
370 await cleanupTests([ server ])