]>
Commit | Line | Data |
---|---|---|
418d092a C |
1 | import { makeDeleteRequest, makeGetRequest, makePostBodyRequest, makePutBodyRequest, makeUploadRequest } from '../requests/requests' |
2 | import { VideoPlaylistCreate } from '../../models/videos/playlist/video-playlist-create.model' | |
3 | import { omit } from 'lodash' | |
4 | import { VideoPlaylistUpdate } from '../../models/videos/playlist/video-playlist-update.model' | |
5 | import { VideoPlaylistElementCreate } from '../../models/videos/playlist/video-playlist-element-create.model' | |
6 | import { VideoPlaylistElementUpdate } from '../../models/videos/playlist/video-playlist-element-update.model' | |
df0b219d C |
7 | import { videoUUIDToId } from './videos' |
8 | import { join } from 'path' | |
9 | import { root } from '..' | |
10 | import { readdir } from 'fs-extra' | |
11 | import { expect } from 'chai' | |
12 | import { VideoPlaylistType } from '../../models/videos/playlist/video-playlist-type.model' | |
09209296 | 13 | |
418d092a C |
14 | function getVideoPlaylistsList (url: string, start: number, count: number, sort?: string) { |
15 | const path = '/api/v1/video-playlists' | |
16 | ||
17 | const query = { | |
18 | start, | |
19 | count, | |
20 | sort | |
21 | } | |
22 | ||
23 | return makeGetRequest({ | |
24 | url, | |
25 | path, | |
df0b219d C |
26 | query, |
27 | statusCodeExpected: 200 | |
28 | }) | |
29 | } | |
30 | ||
31 | function getVideoChannelPlaylistsList (url: string, videoChannelName: string, start: number, count: number, sort?: string) { | |
32 | const path = '/api/v1/video-channels/' + videoChannelName + '/video-playlists' | |
33 | ||
34 | const query = { | |
35 | start, | |
36 | count, | |
37 | sort | |
38 | } | |
39 | ||
40 | return makeGetRequest({ | |
41 | url, | |
42 | path, | |
43 | query, | |
44 | statusCodeExpected: 200 | |
45 | }) | |
46 | } | |
47 | ||
48 | function getAccountPlaylistsList (url: string, accountName: string, start: number, count: number, sort?: string) { | |
49 | const path = '/api/v1/accounts/' + accountName + '/video-playlists' | |
50 | ||
51 | const query = { | |
52 | start, | |
53 | count, | |
54 | sort | |
55 | } | |
56 | ||
57 | return makeGetRequest({ | |
58 | url, | |
59 | path, | |
60 | query, | |
61 | statusCodeExpected: 200 | |
62 | }) | |
63 | } | |
64 | ||
65 | function getAccountPlaylistsListWithToken ( | |
66 | url: string, | |
67 | token: string, | |
68 | accountName: string, | |
69 | start: number, | |
70 | count: number, | |
71 | playlistType?: VideoPlaylistType | |
72 | ) { | |
73 | const path = '/api/v1/accounts/' + accountName + '/video-playlists' | |
74 | ||
75 | const query = { | |
76 | start, | |
77 | count, | |
78 | playlistType | |
79 | } | |
80 | ||
81 | return makeGetRequest({ | |
82 | url, | |
83 | token, | |
84 | path, | |
85 | query, | |
86 | statusCodeExpected: 200 | |
418d092a | 87 | }) |
09209296 C |
88 | } |
89 | ||
418d092a C |
90 | function getVideoPlaylist (url: string, playlistId: number | string, statusCodeExpected = 200) { |
91 | const path = '/api/v1/video-playlists/' + playlistId | |
92 | ||
93 | return makeGetRequest({ | |
94 | url, | |
95 | path, | |
96 | statusCodeExpected | |
97 | }) | |
09209296 C |
98 | } |
99 | ||
df0b219d C |
100 | function getVideoPlaylistWithToken (url: string, token: string, playlistId: number | string, statusCodeExpected = 200) { |
101 | const path = '/api/v1/video-playlists/' + playlistId | |
102 | ||
103 | return makeGetRequest({ | |
104 | url, | |
105 | token, | |
106 | path, | |
107 | statusCodeExpected | |
108 | }) | |
109 | } | |
110 | ||
07b1a18a | 111 | function deleteVideoPlaylist (url: string, token: string, playlistId: number | string, statusCodeExpected = 204) { |
418d092a C |
112 | const path = '/api/v1/video-playlists/' + playlistId |
113 | ||
114 | return makeDeleteRequest({ | |
115 | url, | |
116 | path, | |
117 | token, | |
118 | statusCodeExpected | |
119 | }) | |
09209296 C |
120 | } |
121 | ||
418d092a C |
122 | function createVideoPlaylist (options: { |
123 | url: string, | |
124 | token: string, | |
125 | playlistAttrs: VideoPlaylistCreate, | |
07b1a18a | 126 | expectedStatus?: number |
418d092a C |
127 | }) { |
128 | const path = '/api/v1/video-playlists/' | |
129 | ||
130 | const fields = omit(options.playlistAttrs, 'thumbnailfile') | |
4c280004 | 131 | |
418d092a C |
132 | const attaches = options.playlistAttrs.thumbnailfile |
133 | ? { thumbnailfile: options.playlistAttrs.thumbnailfile } | |
134 | : {} | |
4c280004 | 135 | |
418d092a C |
136 | return makeUploadRequest({ |
137 | method: 'POST', | |
138 | url: options.url, | |
139 | path, | |
140 | token: options.token, | |
141 | fields, | |
142 | attaches, | |
07b1a18a | 143 | statusCodeExpected: options.expectedStatus || 200 |
418d092a C |
144 | }) |
145 | } | |
4c280004 | 146 | |
418d092a C |
147 | function updateVideoPlaylist (options: { |
148 | url: string, | |
149 | token: string, | |
150 | playlistAttrs: VideoPlaylistUpdate, | |
07b1a18a C |
151 | playlistId: number | string, |
152 | expectedStatus?: number | |
418d092a | 153 | }) { |
07b1a18a | 154 | const path = '/api/v1/video-playlists/' + options.playlistId |
4c280004 | 155 | |
418d092a | 156 | const fields = omit(options.playlistAttrs, 'thumbnailfile') |
4c280004 | 157 | |
418d092a C |
158 | const attaches = options.playlistAttrs.thumbnailfile |
159 | ? { thumbnailfile: options.playlistAttrs.thumbnailfile } | |
160 | : {} | |
4c280004 | 161 | |
418d092a C |
162 | return makeUploadRequest({ |
163 | method: 'PUT', | |
164 | url: options.url, | |
165 | path, | |
166 | token: options.token, | |
167 | fields, | |
168 | attaches, | |
07b1a18a | 169 | statusCodeExpected: options.expectedStatus || 204 |
418d092a C |
170 | }) |
171 | } | |
172 | ||
df0b219d | 173 | async function addVideoInPlaylist (options: { |
418d092a C |
174 | url: string, |
175 | token: string, | |
176 | playlistId: number | string, | |
df0b219d | 177 | elementAttrs: VideoPlaylistElementCreate | { videoId: string } |
07b1a18a | 178 | expectedStatus?: number |
418d092a | 179 | }) { |
df0b219d C |
180 | options.elementAttrs.videoId = await videoUUIDToId(options.url, options.elementAttrs.videoId) |
181 | ||
418d092a C |
182 | const path = '/api/v1/video-playlists/' + options.playlistId + '/videos' |
183 | ||
184 | return makePostBodyRequest({ | |
185 | url: options.url, | |
186 | path, | |
187 | token: options.token, | |
188 | fields: options.elementAttrs, | |
07b1a18a | 189 | statusCodeExpected: options.expectedStatus || 200 |
418d092a C |
190 | }) |
191 | } | |
192 | ||
193 | function updateVideoPlaylistElement (options: { | |
194 | url: string, | |
195 | token: string, | |
196 | playlistId: number | string, | |
197 | videoId: number | string, | |
198 | elementAttrs: VideoPlaylistElementUpdate, | |
07b1a18a | 199 | expectedStatus?: number |
418d092a C |
200 | }) { |
201 | const path = '/api/v1/video-playlists/' + options.playlistId + '/videos/' + options.videoId | |
202 | ||
203 | return makePutBodyRequest({ | |
204 | url: options.url, | |
205 | path, | |
206 | token: options.token, | |
207 | fields: options.elementAttrs, | |
07b1a18a | 208 | statusCodeExpected: options.expectedStatus || 204 |
418d092a C |
209 | }) |
210 | } | |
211 | ||
212 | function removeVideoFromPlaylist (options: { | |
213 | url: string, | |
214 | token: string, | |
215 | playlistId: number | string, | |
216 | videoId: number | string, | |
df0b219d | 217 | expectedStatus?: number |
418d092a C |
218 | }) { |
219 | const path = '/api/v1/video-playlists/' + options.playlistId + '/videos/' + options.videoId | |
220 | ||
221 | return makeDeleteRequest({ | |
222 | url: options.url, | |
223 | path, | |
224 | token: options.token, | |
07b1a18a | 225 | statusCodeExpected: options.expectedStatus || 204 |
418d092a C |
226 | }) |
227 | } | |
228 | ||
229 | function reorderVideosPlaylist (options: { | |
230 | url: string, | |
231 | token: string, | |
232 | playlistId: number | string, | |
233 | elementAttrs: { | |
234 | startPosition: number, | |
07b1a18a | 235 | insertAfterPosition: number, |
418d092a C |
236 | reorderLength?: number |
237 | }, | |
df0b219d | 238 | expectedStatus?: number |
418d092a | 239 | }) { |
07b1a18a | 240 | const path = '/api/v1/video-playlists/' + options.playlistId + '/videos/reorder' |
418d092a | 241 | |
07b1a18a | 242 | return makePostBodyRequest({ |
418d092a C |
243 | url: options.url, |
244 | path, | |
245 | token: options.token, | |
246 | fields: options.elementAttrs, | |
df0b219d | 247 | statusCodeExpected: options.expectedStatus || 204 |
418d092a | 248 | }) |
4c280004 C |
249 | } |
250 | ||
df0b219d C |
251 | async function checkPlaylistFilesWereRemoved ( |
252 | playlistUUID: string, | |
253 | serverNumber: number, | |
254 | directories = [ 'thumbnails' ] | |
255 | ) { | |
256 | const testDirectory = 'test' + serverNumber | |
257 | ||
258 | for (const directory of directories) { | |
259 | const directoryPath = join(root(), testDirectory, directory) | |
260 | ||
261 | const files = await readdir(directoryPath) | |
262 | for (const file of files) { | |
263 | expect(file).to.not.contain(playlistUUID) | |
264 | } | |
265 | } | |
266 | } | |
267 | ||
830b4faf C |
268 | function getVideoPlaylistPrivacies (url: string) { |
269 | const path = '/api/v1/video-playlists/privacies' | |
270 | ||
271 | return makeGetRequest({ | |
272 | url, | |
273 | path, | |
274 | statusCodeExpected: 200 | |
275 | }) | |
276 | } | |
277 | ||
0b16f5f2 C |
278 | function doVideosExistInMyPlaylist (url: string, token: string, videoIds: number[]) { |
279 | const path = '/api/v1/users/me/video-playlists/videos-exist' | |
280 | ||
281 | return makeGetRequest({ | |
282 | url, | |
283 | token, | |
284 | path, | |
285 | query: { videoIds }, | |
286 | statusCodeExpected: 200 | |
287 | }) | |
288 | } | |
289 | ||
09209296 C |
290 | // --------------------------------------------------------------------------- |
291 | ||
292 | export { | |
830b4faf C |
293 | getVideoPlaylistPrivacies, |
294 | ||
418d092a | 295 | getVideoPlaylistsList, |
df0b219d C |
296 | getVideoChannelPlaylistsList, |
297 | getAccountPlaylistsList, | |
298 | getAccountPlaylistsListWithToken, | |
299 | ||
418d092a | 300 | getVideoPlaylist, |
df0b219d | 301 | getVideoPlaylistWithToken, |
418d092a C |
302 | |
303 | createVideoPlaylist, | |
304 | updateVideoPlaylist, | |
305 | deleteVideoPlaylist, | |
306 | ||
307 | addVideoInPlaylist, | |
07b1a18a | 308 | updateVideoPlaylistElement, |
418d092a C |
309 | removeVideoFromPlaylist, |
310 | ||
df0b219d C |
311 | reorderVideosPlaylist, |
312 | ||
0b16f5f2 C |
313 | checkPlaylistFilesWereRemoved, |
314 | ||
315 | doVideosExistInMyPlaylist | |
09209296 | 316 | } |