]>
Commit | Line | Data |
---|---|---|
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ | |
2 | ||
3 | import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination } from '@server/tests/shared' | |
4 | import { HttpStatusCode } from '@shared/models' | |
5 | import { cleanupTests, createSingleServer, makeGetRequest, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands' | |
6 | ||
7 | function updateSearchIndex (server: PeerTubeServer, enabled: boolean, disableLocalSearch = false) { | |
8 | return server.config.updateCustomSubConfig({ | |
9 | newConfig: { | |
10 | search: { | |
11 | searchIndex: { | |
12 | enabled, | |
13 | disableLocalSearch | |
14 | } | |
15 | } | |
16 | } | |
17 | }) | |
18 | } | |
19 | ||
20 | describe('Test videos API validator', function () { | |
21 | let server: PeerTubeServer | |
22 | ||
23 | // --------------------------------------------------------------- | |
24 | ||
25 | before(async function () { | |
26 | this.timeout(30000) | |
27 | ||
28 | server = await createSingleServer(1) | |
29 | await setAccessTokensToServers([ server ]) | |
30 | }) | |
31 | ||
32 | describe('When searching videos', function () { | |
33 | const path = '/api/v1/search/videos/' | |
34 | ||
35 | const query = { | |
36 | search: 'coucou' | |
37 | } | |
38 | ||
39 | it('Should fail with a bad start pagination', async function () { | |
40 | await checkBadStartPagination(server.url, path, null, query) | |
41 | }) | |
42 | ||
43 | it('Should fail with a bad count pagination', async function () { | |
44 | await checkBadCountPagination(server.url, path, null, query) | |
45 | }) | |
46 | ||
47 | it('Should fail with an incorrect sort', async function () { | |
48 | await checkBadSortPagination(server.url, path, null, query) | |
49 | }) | |
50 | ||
51 | it('Should succeed with the correct parameters', async function () { | |
52 | await makeGetRequest({ url: server.url, path, query, expectedStatus: HttpStatusCode.OK_200 }) | |
53 | }) | |
54 | ||
55 | it('Should fail with an invalid category', async function () { | |
56 | const customQuery1 = { ...query, categoryOneOf: [ 'aa', 'b' ] } | |
57 | await makeGetRequest({ url: server.url, path, query: customQuery1, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
58 | ||
59 | const customQuery2 = { ...query, categoryOneOf: 'a' } | |
60 | await makeGetRequest({ url: server.url, path, query: customQuery2, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
61 | }) | |
62 | ||
63 | it('Should succeed with a valid category', async function () { | |
64 | const customQuery1 = { ...query, categoryOneOf: [ 1, 7 ] } | |
65 | await makeGetRequest({ url: server.url, path, query: customQuery1, expectedStatus: HttpStatusCode.OK_200 }) | |
66 | ||
67 | const customQuery2 = { ...query, categoryOneOf: 1 } | |
68 | await makeGetRequest({ url: server.url, path, query: customQuery2, expectedStatus: HttpStatusCode.OK_200 }) | |
69 | }) | |
70 | ||
71 | it('Should fail with an invalid licence', async function () { | |
72 | const customQuery1 = { ...query, licenceOneOf: [ 'aa', 'b' ] } | |
73 | await makeGetRequest({ url: server.url, path, query: customQuery1, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
74 | ||
75 | const customQuery2 = { ...query, licenceOneOf: 'a' } | |
76 | await makeGetRequest({ url: server.url, path, query: customQuery2, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
77 | }) | |
78 | ||
79 | it('Should succeed with a valid licence', async function () { | |
80 | const customQuery1 = { ...query, licenceOneOf: [ 1, 2 ] } | |
81 | await makeGetRequest({ url: server.url, path, query: customQuery1, expectedStatus: HttpStatusCode.OK_200 }) | |
82 | ||
83 | const customQuery2 = { ...query, licenceOneOf: 1 } | |
84 | await makeGetRequest({ url: server.url, path, query: customQuery2, expectedStatus: HttpStatusCode.OK_200 }) | |
85 | }) | |
86 | ||
87 | it('Should succeed with a valid language', async function () { | |
88 | const customQuery1 = { ...query, languageOneOf: [ 'fr', 'en' ] } | |
89 | await makeGetRequest({ url: server.url, path, query: customQuery1, expectedStatus: HttpStatusCode.OK_200 }) | |
90 | ||
91 | const customQuery2 = { ...query, languageOneOf: 'fr' } | |
92 | await makeGetRequest({ url: server.url, path, query: customQuery2, expectedStatus: HttpStatusCode.OK_200 }) | |
93 | }) | |
94 | ||
95 | it('Should succeed with valid tags', async function () { | |
96 | const customQuery1 = { ...query, tagsOneOf: [ 'tag1', 'tag2' ] } | |
97 | await makeGetRequest({ url: server.url, path, query: customQuery1, expectedStatus: HttpStatusCode.OK_200 }) | |
98 | ||
99 | const customQuery2 = { ...query, tagsOneOf: 'tag1' } | |
100 | await makeGetRequest({ url: server.url, path, query: customQuery2, expectedStatus: HttpStatusCode.OK_200 }) | |
101 | ||
102 | const customQuery3 = { ...query, tagsAllOf: [ 'tag1', 'tag2' ] } | |
103 | await makeGetRequest({ url: server.url, path, query: customQuery3, expectedStatus: HttpStatusCode.OK_200 }) | |
104 | ||
105 | const customQuery4 = { ...query, tagsAllOf: 'tag1' } | |
106 | await makeGetRequest({ url: server.url, path, query: customQuery4, expectedStatus: HttpStatusCode.OK_200 }) | |
107 | }) | |
108 | ||
109 | it('Should fail with invalid durations', async function () { | |
110 | const customQuery1 = { ...query, durationMin: 'hello' } | |
111 | await makeGetRequest({ url: server.url, path, query: customQuery1, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
112 | ||
113 | const customQuery2 = { ...query, durationMax: 'hello' } | |
114 | await makeGetRequest({ url: server.url, path, query: customQuery2, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
115 | }) | |
116 | ||
117 | it('Should fail with invalid dates', async function () { | |
118 | const customQuery1 = { ...query, startDate: 'hello' } | |
119 | await makeGetRequest({ url: server.url, path, query: customQuery1, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
120 | ||
121 | const customQuery2 = { ...query, endDate: 'hello' } | |
122 | await makeGetRequest({ url: server.url, path, query: customQuery2, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
123 | ||
124 | const customQuery3 = { ...query, originallyPublishedStartDate: 'hello' } | |
125 | await makeGetRequest({ url: server.url, path, query: customQuery3, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
126 | ||
127 | const customQuery4 = { ...query, originallyPublishedEndDate: 'hello' } | |
128 | await makeGetRequest({ url: server.url, path, query: customQuery4, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
129 | }) | |
130 | ||
131 | it('Should fail with an invalid host', async function () { | |
132 | const customQuery = { ...query, host: '6565' } | |
133 | await makeGetRequest({ url: server.url, path, query: customQuery, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
134 | }) | |
135 | ||
136 | it('Should succeed with a host', async function () { | |
137 | const customQuery = { ...query, host: 'example.com' } | |
138 | await makeGetRequest({ url: server.url, path, query: customQuery, expectedStatus: HttpStatusCode.OK_200 }) | |
139 | }) | |
140 | ||
141 | it('Should fail with invalid uuids', async function () { | |
142 | const customQuery = { ...query, uuids: [ '6565', 'dfd70b83-639f-4980-94af-304a56ab4b35' ] } | |
143 | await makeGetRequest({ url: server.url, path, query: customQuery, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
144 | }) | |
145 | ||
146 | it('Should succeed with valid uuids', async function () { | |
147 | const customQuery = { ...query, uuids: [ 'dfd70b83-639f-4980-94af-304a56ab4b35' ] } | |
148 | await makeGetRequest({ url: server.url, path, query: customQuery, expectedStatus: HttpStatusCode.OK_200 }) | |
149 | }) | |
150 | }) | |
151 | ||
152 | describe('When searching video playlists', function () { | |
153 | const path = '/api/v1/search/video-playlists/' | |
154 | ||
155 | const query = { | |
156 | search: 'coucou', | |
157 | host: 'example.com' | |
158 | } | |
159 | ||
160 | it('Should fail with a bad start pagination', async function () { | |
161 | await checkBadStartPagination(server.url, path, null, query) | |
162 | }) | |
163 | ||
164 | it('Should fail with a bad count pagination', async function () { | |
165 | await checkBadCountPagination(server.url, path, null, query) | |
166 | }) | |
167 | ||
168 | it('Should fail with an incorrect sort', async function () { | |
169 | await checkBadSortPagination(server.url, path, null, query) | |
170 | }) | |
171 | ||
172 | it('Should fail with an invalid host', async function () { | |
173 | await makeGetRequest({ url: server.url, path, query: { ...query, host: '6565' }, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
174 | }) | |
175 | ||
176 | it('Should fail with invalid uuids', async function () { | |
177 | const customQuery = { ...query, uuids: [ '6565', 'dfd70b83-639f-4980-94af-304a56ab4b35' ] } | |
178 | await makeGetRequest({ url: server.url, path, query: customQuery, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
179 | }) | |
180 | ||
181 | it('Should succeed with the correct parameters', async function () { | |
182 | await makeGetRequest({ url: server.url, path, query, expectedStatus: HttpStatusCode.OK_200 }) | |
183 | }) | |
184 | }) | |
185 | ||
186 | describe('When searching video channels', function () { | |
187 | const path = '/api/v1/search/video-channels/' | |
188 | ||
189 | const query = { | |
190 | search: 'coucou', | |
191 | host: 'example.com' | |
192 | } | |
193 | ||
194 | it('Should fail with a bad start pagination', async function () { | |
195 | await checkBadStartPagination(server.url, path, null, query) | |
196 | }) | |
197 | ||
198 | it('Should fail with a bad count pagination', async function () { | |
199 | await checkBadCountPagination(server.url, path, null, query) | |
200 | }) | |
201 | ||
202 | it('Should fail with an incorrect sort', async function () { | |
203 | await checkBadSortPagination(server.url, path, null, query) | |
204 | }) | |
205 | ||
206 | it('Should fail with an invalid host', async function () { | |
207 | await makeGetRequest({ url: server.url, path, query: { ...query, host: '6565' }, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
208 | }) | |
209 | ||
210 | it('Should fail with invalid handles', async function () { | |
211 | await makeGetRequest({ url: server.url, path, query: { ...query, handles: [ '' ] }, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
212 | }) | |
213 | ||
214 | it('Should succeed with the correct parameters', async function () { | |
215 | await makeGetRequest({ url: server.url, path, query, expectedStatus: HttpStatusCode.OK_200 }) | |
216 | }) | |
217 | }) | |
218 | ||
219 | describe('Search target', function () { | |
220 | ||
221 | it('Should fail/succeed depending on the search target', async function () { | |
222 | this.timeout(10000) | |
223 | ||
224 | const query = { search: 'coucou' } | |
225 | const paths = [ | |
226 | '/api/v1/search/video-playlists/', | |
227 | '/api/v1/search/video-channels/', | |
228 | '/api/v1/search/videos/' | |
229 | ] | |
230 | ||
231 | for (const path of paths) { | |
232 | { | |
233 | const customQuery = { ...query, searchTarget: 'hello' } | |
234 | await makeGetRequest({ url: server.url, path, query: customQuery, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
235 | } | |
236 | ||
237 | { | |
238 | const customQuery = { ...query, searchTarget: undefined } | |
239 | await makeGetRequest({ url: server.url, path, query: customQuery, expectedStatus: HttpStatusCode.OK_200 }) | |
240 | } | |
241 | ||
242 | { | |
243 | const customQuery = { ...query, searchTarget: 'local' } | |
244 | await makeGetRequest({ url: server.url, path, query: customQuery, expectedStatus: HttpStatusCode.OK_200 }) | |
245 | } | |
246 | ||
247 | { | |
248 | const customQuery = { ...query, searchTarget: 'search-index' } | |
249 | await makeGetRequest({ url: server.url, path, query: customQuery, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | |
250 | } | |
251 | ||
252 | await updateSearchIndex(server, true, true) | |
253 | ||
254 | { | |
255 | const customQuery = { ...query, searchTarget: 'search-index' } | |
256 | await makeGetRequest({ url: server.url, path, query: customQuery, expectedStatus: HttpStatusCode.OK_200 }) | |
257 | } | |
258 | ||
259 | await updateSearchIndex(server, true, false) | |
260 | ||
261 | { | |
262 | const customQuery = { ...query, searchTarget: 'local' } | |
263 | await makeGetRequest({ url: server.url, path, query: customQuery, expectedStatus: HttpStatusCode.OK_200 }) | |
264 | } | |
265 | ||
266 | await updateSearchIndex(server, false, false) | |
267 | } | |
268 | }) | |
269 | }) | |
270 | ||
271 | after(async function () { | |
272 | await cleanupTests([ server ]) | |
273 | }) | |
274 | }) |