Merge branch 'feature/audio-upload' into develop
[oweals/peertube.git] / server / tests / api / check-params / search.ts
1 /* tslint:disable:no-unused-expression */
2
3 import 'mocha'
4
5 import { cleanupTests, flushAndRunServer, immutableAssign, makeGetRequest, ServerInfo } from '../../../../shared/extra-utils'
6 import {
7   checkBadCountPagination,
8   checkBadSortPagination,
9   checkBadStartPagination
10 } from '../../../../shared/extra-utils/requests/check-api-params'
11
12 describe('Test videos API validator', function () {
13   let server: ServerInfo
14
15   // ---------------------------------------------------------------
16
17   before(async function () {
18     this.timeout(30000)
19
20     server = await flushAndRunServer(1)
21   })
22
23   describe('When searching videos', function () {
24     const path = '/api/v1/search/videos/'
25
26     const query = {
27       search: 'coucou'
28     }
29
30     it('Should fail with a bad start pagination', async function () {
31       await checkBadStartPagination(server.url, path, null, query)
32     })
33
34     it('Should fail with a bad count pagination', async function () {
35       await checkBadCountPagination(server.url, path, null, query)
36     })
37
38     it('Should fail with an incorrect sort', async function () {
39       await checkBadSortPagination(server.url, path, null, query)
40     })
41
42     it('Should success with the correct parameters', async function () {
43       await makeGetRequest({ url: server.url, path, query, statusCodeExpected: 200 })
44     })
45
46     it('Should fail with an invalid category', async function () {
47       const customQuery1 = immutableAssign(query, { categoryOneOf: [ 'aa', 'b' ] })
48       await makeGetRequest({ url: server.url, path, query: customQuery1, statusCodeExpected: 400 })
49
50       const customQuery2 = immutableAssign(query, { categoryOneOf: 'a' })
51       await makeGetRequest({ url: server.url, path, query: customQuery2, statusCodeExpected: 400 })
52     })
53
54     it('Should succeed with a valid category', async function () {
55       const customQuery1 = immutableAssign(query, { categoryOneOf: [ 1, 7 ] })
56       await makeGetRequest({ url: server.url, path, query: customQuery1, statusCodeExpected: 200 })
57
58       const customQuery2 = immutableAssign(query, { categoryOneOf: 1 })
59       await makeGetRequest({ url: server.url, path, query: customQuery2, statusCodeExpected: 200 })
60     })
61
62     it('Should fail with an invalid licence', async function () {
63       const customQuery1 = immutableAssign(query, { licenceOneOf: [ 'aa', 'b' ] })
64       await makeGetRequest({ url: server.url, path, query: customQuery1, statusCodeExpected: 400 })
65
66       const customQuery2 = immutableAssign(query, { licenceOneOf: 'a' })
67       await makeGetRequest({ url: server.url, path, query: customQuery2, statusCodeExpected: 400 })
68     })
69
70     it('Should succeed with a valid licence', async function () {
71       const customQuery1 = immutableAssign(query, { licenceOneOf: [ 1, 2 ] })
72       await makeGetRequest({ url: server.url, path, query: customQuery1, statusCodeExpected: 200 })
73
74       const customQuery2 = immutableAssign(query, { licenceOneOf: 1 })
75       await makeGetRequest({ url: server.url, path, query: customQuery2, statusCodeExpected: 200 })
76     })
77
78     it('Should succeed with a valid language', async function () {
79       const customQuery1 = immutableAssign(query, { languageOneOf: [ 'fr', 'en' ] })
80       await makeGetRequest({ url: server.url, path, query: customQuery1, statusCodeExpected: 200 })
81
82       const customQuery2 = immutableAssign(query, { languageOneOf: 'fr' })
83       await makeGetRequest({ url: server.url, path, query: customQuery2, statusCodeExpected: 200 })
84     })
85
86     it('Should succeed with valid tags', async function () {
87       const customQuery1 = immutableAssign(query, { tagsOneOf: [ 'tag1', 'tag2' ] })
88       await makeGetRequest({ url: server.url, path, query: customQuery1, statusCodeExpected: 200 })
89
90       const customQuery2 = immutableAssign(query, { tagsOneOf: 'tag1' })
91       await makeGetRequest({ url: server.url, path, query: customQuery2, statusCodeExpected: 200 })
92
93       const customQuery3 = immutableAssign(query, { tagsAllOf: [ 'tag1', 'tag2' ] })
94       await makeGetRequest({ url: server.url, path, query: customQuery3, statusCodeExpected: 200 })
95
96       const customQuery4 = immutableAssign(query, { tagsAllOf: 'tag1' })
97       await makeGetRequest({ url: server.url, path, query: customQuery4, statusCodeExpected: 200 })
98     })
99
100     it('Should fail with invalid durations', async function () {
101       const customQuery1 = immutableAssign(query, { durationMin: 'hello' })
102       await makeGetRequest({ url: server.url, path, query: customQuery1, statusCodeExpected: 400 })
103
104       const customQuery2 = immutableAssign(query, { durationMax: 'hello' })
105       await makeGetRequest({ url: server.url, path, query: customQuery2, statusCodeExpected: 400 })
106     })
107
108     it('Should fail with invalid dates', async function () {
109       const customQuery1 = immutableAssign(query, { startDate: 'hello' })
110       await makeGetRequest({ url: server.url, path, query: customQuery1, statusCodeExpected: 400 })
111
112       const customQuery2 = immutableAssign(query, { endDate: 'hello' })
113       await makeGetRequest({ url: server.url, path, query: customQuery2, statusCodeExpected: 400 })
114
115       const customQuery3 = immutableAssign(query, { originallyPublishedStartDate: 'hello' })
116       await makeGetRequest({ url: server.url, path, query: customQuery3, statusCodeExpected: 400 })
117
118       const customQuery4 = immutableAssign(query, { originallyPublishedEndDate: 'hello' })
119       await makeGetRequest({ url: server.url, path, query: customQuery4, statusCodeExpected: 400 })
120     })
121   })
122
123   describe('When searching video channels', function () {
124     const path = '/api/v1/search/video-channels/'
125
126     const query = {
127       search: 'coucou'
128     }
129
130     it('Should fail with a bad start pagination', async function () {
131       await checkBadStartPagination(server.url, path, null, query)
132     })
133
134     it('Should fail with a bad count pagination', async function () {
135       await checkBadCountPagination(server.url, path, null, query)
136     })
137
138     it('Should fail with an incorrect sort', async function () {
139       await checkBadSortPagination(server.url, path, null, query)
140     })
141
142     it('Should success with the correct parameters', async function () {
143       await makeGetRequest({ url: server.url, path, query, statusCodeExpected: 200 })
144     })
145   })
146
147   after(async function () {
148     await cleanupTests([ server ])
149   })
150 })