From 89cd12756035a146bbcc4db78cd3cd64f2f3d88d Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 19 Jul 2019 17:30:41 +0200 Subject: Add hook filters tests --- server/lib/plugins/hooks.ts | 19 ++++++++++++++----- server/lib/plugins/plugin-manager.ts | 10 +++++----- server/lib/video-blacklist.ts | 5 +++-- 3 files changed, 22 insertions(+), 12 deletions(-) (limited to 'server/lib') diff --git a/server/lib/plugins/hooks.ts b/server/lib/plugins/hooks.ts index 7bb907e6a..b694d4118 100644 --- a/server/lib/plugins/hooks.ts +++ b/server/lib/plugins/hooks.ts @@ -3,16 +3,25 @@ import { PluginManager } from './plugin-manager' import { logger } from '../../helpers/logger' import * as Bluebird from 'bluebird' +type PromiseFunction = (params: U) => Promise | Bluebird +type RawFunction = (params: U) => T + // Helpers to run hooks const Hooks = { - wrapObject: (obj: T, hookName: U) => { - return PluginManager.Instance.runHook(hookName, obj) as Promise + wrapObject: (result: T, hookName: U) => { + return PluginManager.Instance.runHook(hookName, result) as Promise + }, + + wrapPromiseFun: async (fun: PromiseFunction, params: U, hookName: V) => { + const result = await fun(params) + + return PluginManager.Instance.runHook(hookName, result, params) }, - wrapPromise: async (fun: Promise | Bluebird, hookName: U) => { - const result = await fun + wrapFun: async (fun: RawFunction, params: U, hookName: V) => { + const result = fun(params) - return PluginManager.Instance.runHook(hookName, result) + return PluginManager.Instance.runHook(hookName, result, params) }, runAction: (hookName: U, params?: T) => { diff --git a/server/lib/plugins/plugin-manager.ts b/server/lib/plugins/plugin-manager.ts index 9afda97ea..6485a47c5 100644 --- a/server/lib/plugins/plugin-manager.ts +++ b/server/lib/plugins/plugin-manager.ts @@ -98,15 +98,15 @@ export class PluginManager implements ServerHook { // ###################### Hooks ###################### - async runHook (hookName: ServerHookName, param?: any) { - let result = param - - if (!this.hooks[hookName]) return result + async runHook (hookName: ServerHookName, result?: T, params?: any): Promise { + if (!this.hooks[hookName]) return Promise.resolve(result) const hookType = getHookType(hookName) for (const hook of this.hooks[hookName]) { - result = await internalRunHook(hook.handler, hookType, param, err => { + logger.debug('Running hook %s of plugin %s.', hookName, hook.npmName) + + result = await internalRunHook(hook.handler, hookType, result, params, err => { logger.error('Cannot run hook %s of plugin %s.', hookName, hook.pluginName, { err }) }) } diff --git a/server/lib/video-blacklist.ts b/server/lib/video-blacklist.ts index 32b1a28fa..9bc996f5a 100644 --- a/server/lib/video-blacklist.ts +++ b/server/lib/video-blacklist.ts @@ -9,8 +9,9 @@ import { UserAdminFlag } from '../../shared/models/users/user-flag.model' import { Hooks } from './plugins/hooks' async function autoBlacklistVideoIfNeeded (video: VideoModel, user?: UserModel, transaction?: Transaction) { - const doAutoBlacklist = await Hooks.wrapPromise( - autoBlacklistNeeded({ video, user }), + const doAutoBlacklist = await Hooks.wrapPromiseFun( + autoBlacklistNeeded, + { video, user }, 'filter:video.auto-blacklist.result' ) -- cgit v1.2.3