aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--server/controllers/api/video-playlist.ts3
-rw-r--r--server/tests/fixtures/peertube-plugin-test/main.js4
-rw-r--r--server/tests/plugins/action-hooks.ts40
-rw-r--r--shared/models/plugins/server/server-hook.model.ts5
4 files changed, 49 insertions, 3 deletions
diff --git a/server/controllers/api/video-playlist.ts b/server/controllers/api/video-playlist.ts
index c25aed20b..5c4aa50ac 100644
--- a/server/controllers/api/video-playlist.ts
+++ b/server/controllers/api/video-playlist.ts
@@ -43,6 +43,7 @@ import {
43import { AccountModel } from '../../models/account/account' 43import { AccountModel } from '../../models/account/account'
44import { VideoPlaylistModel } from '../../models/video/video-playlist' 44import { VideoPlaylistModel } from '../../models/video/video-playlist'
45import { VideoPlaylistElementModel } from '../../models/video/video-playlist-element' 45import { VideoPlaylistElementModel } from '../../models/video/video-playlist-element'
46import { Hooks } from '@server/lib/plugins/hooks'
46 47
47const reqThumbnailFile = createReqFiles([ 'thumbnailfile' ], MIMETYPES.IMAGE.MIMETYPE_EXT, { thumbnailfile: CONFIG.STORAGE.TMP_DIR }) 48const reqThumbnailFile = createReqFiles([ 'thumbnailfile' ], MIMETYPES.IMAGE.MIMETYPE_EXT, { thumbnailfile: CONFIG.STORAGE.TMP_DIR })
48 49
@@ -330,6 +331,8 @@ async function addVideoInPlaylist (req: express.Request, res: express.Response)
330 331
331 logger.info('Video added in playlist %s at position %d.', videoPlaylist.uuid, playlistElement.position) 332 logger.info('Video added in playlist %s at position %d.', videoPlaylist.uuid, playlistElement.position)
332 333
334 Hooks.runAction('action:api.video-playlist-element.created', { playlistElement })
335
333 return res.json({ 336 return res.json({
334 videoPlaylistElement: { 337 videoPlaylistElement: {
335 id: playlistElement.id 338 id: playlistElement.id
diff --git a/server/tests/fixtures/peertube-plugin-test/main.js b/server/tests/fixtures/peertube-plugin-test/main.js
index 5e922ad1f..f8e6f0b98 100644
--- a/server/tests/fixtures/peertube-plugin-test/main.js
+++ b/server/tests/fixtures/peertube-plugin-test/main.js
@@ -19,7 +19,9 @@ async function register ({ registerHook, registerSetting, settingsManager, stora
19 'action:api.user.created', 19 'action:api.user.created',
20 'action:api.user.deleted', 20 'action:api.user.deleted',
21 'action:api.user.updated', 21 'action:api.user.updated',
22 'action:api.user.oauth2-got-token' 22 'action:api.user.oauth2-got-token',
23
24 'action:api.video-playlist-element.created'
23 ] 25 ]
24 26
25 for (const h of actionHooks) { 27 for (const h of actionHooks) {
diff --git a/server/tests/plugins/action-hooks.ts b/server/tests/plugins/action-hooks.ts
index ac9f2cea5..0f57ef7fe 100644
--- a/server/tests/plugins/action-hooks.ts
+++ b/server/tests/plugins/action-hooks.ts
@@ -1,13 +1,15 @@
1/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ 1/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
2 2
3import 'mocha' 3import 'mocha'
4import { ServerHookName, VideoPrivacy } from '@shared/models' 4import { ServerHookName, VideoPlaylistPrivacy, VideoPrivacy } from '@shared/models'
5import { 5import {
6 addVideoCommentReply, 6 addVideoCommentReply,
7 addVideoCommentThread, 7 addVideoCommentThread,
8 addVideoInPlaylist,
8 blockUser, 9 blockUser,
9 createLive, 10 createLive,
10 createUser, 11 createUser,
12 createVideoPlaylist,
11 deleteVideoComment, 13 deleteVideoComment,
12 getPluginTestPath, 14 getPluginTestPath,
13 installPlugin, 15 installPlugin,
@@ -69,6 +71,7 @@ describe('Test plugin action hooks', function () {
69 }) 71 })
70 72
71 describe('Videos hooks', function () { 73 describe('Videos hooks', function () {
74
72 it('Should run action:api.video.uploaded', async function () { 75 it('Should run action:api.video.uploaded', async function () {
73 const res = await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'video' }) 76 const res = await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'video' })
74 videoUUID = res.body.video.uuid 77 videoUUID = res.body.video.uuid
@@ -177,6 +180,41 @@ describe('Test plugin action hooks', function () {
177 }) 180 })
178 }) 181 })
179 182
183 describe('Playlist hooks', function () {
184 let playlistId: number
185 let videoId: number
186
187 before(async function () {
188 {
189 const res = await createVideoPlaylist({
190 url: servers[0].url,
191 token: servers[0].accessToken,
192 playlistAttrs: {
193 displayName: 'My playlist',
194 privacy: VideoPlaylistPrivacy.PRIVATE
195 }
196 })
197 playlistId = res.body.videoPlaylist.id
198 }
199
200 {
201 const res = await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'my super name' })
202 videoId = res.body.video.id
203 }
204 })
205
206 it('Should run action:api.video-playlist-element.created', async function () {
207 await addVideoInPlaylist({
208 url: servers[0].url,
209 token: servers[0].accessToken,
210 playlistId,
211 elementAttrs: { videoId }
212 })
213
214 await checkHook('action:api.video-playlist-element.created')
215 })
216 })
217
180 after(async function () { 218 after(async function () {
181 await cleanupTests(servers) 219 await cleanupTests(servers)
182 }) 220 })
diff --git a/shared/models/plugins/server/server-hook.model.ts b/shared/models/plugins/server/server-hook.model.ts
index dae243dbf..5f29534b5 100644
--- a/shared/models/plugins/server/server-hook.model.ts
+++ b/shared/models/plugins/server/server-hook.model.ts
@@ -114,7 +114,10 @@ export const serverActionHookObject = {
114 'action:api.user.updated': true, 114 'action:api.user.updated': true,
115 115
116 // Fired when a user got a new oauth2 token 116 // Fired when a user got a new oauth2 token
117 'action:api.user.oauth2-got-token': true 117 'action:api.user.oauth2-got-token': true,
118
119 // Fired when a video is added to a playlist
120 'action:api.video-playlist-element.created': true
118} 121}
119 122
120export type ServerActionHookName = keyof typeof serverActionHookObject 123export type ServerActionHookName = keyof typeof serverActionHookObject