diff options
Diffstat (limited to 'server/tests')
-rw-r--r-- | server/tests/cli/plugins.ts | 8 | ||||
-rw-r--r-- | server/tests/fixtures/peertube-plugin-test-two/main.js | 21 | ||||
-rw-r--r-- | server/tests/fixtures/peertube-plugin-test-two/package.json | 19 | ||||
-rw-r--r-- | server/tests/fixtures/peertube-plugin-test/main.js | 62 | ||||
-rw-r--r-- | server/tests/plugins/action-hooks.ts | 91 | ||||
-rw-r--r-- | server/tests/plugins/filter-hooks.ts | 69 |
6 files changed, 232 insertions, 38 deletions
diff --git a/server/tests/cli/plugins.ts b/server/tests/cli/plugins.ts index d7bf8a690..a5257d671 100644 --- a/server/tests/cli/plugins.ts +++ b/server/tests/cli/plugins.ts | |||
@@ -6,13 +6,13 @@ import { | |||
6 | execCLI, | 6 | execCLI, |
7 | flushAndRunServer, | 7 | flushAndRunServer, |
8 | getConfig, | 8 | getConfig, |
9 | getEnvCli, killallServers, | 9 | getEnvCli, |
10 | getPluginTestPath, | ||
11 | killallServers, | ||
10 | reRunServer, | 12 | reRunServer, |
11 | root, | ||
12 | ServerInfo, | 13 | ServerInfo, |
13 | setAccessTokensToServers | 14 | setAccessTokensToServers |
14 | } from '../../../shared/extra-utils' | 15 | } from '../../../shared/extra-utils' |
15 | import { join } from 'path' | ||
16 | import { ServerConfig } from '../../../shared/models/server' | 16 | import { ServerConfig } from '../../../shared/models/server' |
17 | import { expect } from 'chai' | 17 | import { expect } from 'chai' |
18 | 18 | ||
@@ -29,7 +29,7 @@ describe('Test plugin scripts', function () { | |||
29 | it('Should install a plugin from stateless CLI', async function () { | 29 | it('Should install a plugin from stateless CLI', async function () { |
30 | this.timeout(60000) | 30 | this.timeout(60000) |
31 | 31 | ||
32 | const packagePath = join(root(), 'server', 'tests', 'fixtures', 'peertube-plugin-test') | 32 | const packagePath = getPluginTestPath() |
33 | 33 | ||
34 | const env = getEnvCli(server) | 34 | const env = getEnvCli(server) |
35 | await execCLI(`${env} npm run plugin:install -- --plugin-path ${packagePath}`) | 35 | await execCLI(`${env} npm run plugin:install -- --plugin-path ${packagePath}`) |
diff --git a/server/tests/fixtures/peertube-plugin-test-two/main.js b/server/tests/fixtures/peertube-plugin-test-two/main.js new file mode 100644 index 000000000..71c11b2ba --- /dev/null +++ b/server/tests/fixtures/peertube-plugin-test-two/main.js | |||
@@ -0,0 +1,21 @@ | |||
1 | async function register ({ registerHook, registerSetting, settingsManager, storageManager, peertubeHelpers }) { | ||
2 | registerHook({ | ||
3 | target: 'filter:api.videos.list.params', | ||
4 | handler: obj => addToCount(obj) | ||
5 | }) | ||
6 | } | ||
7 | |||
8 | async function unregister () { | ||
9 | return | ||
10 | } | ||
11 | |||
12 | module.exports = { | ||
13 | register, | ||
14 | unregister | ||
15 | } | ||
16 | |||
17 | // ############################################################################ | ||
18 | |||
19 | function addToCount (obj) { | ||
20 | return Object.assign({}, obj, { count: obj.count + 1 }) | ||
21 | } | ||
diff --git a/server/tests/fixtures/peertube-plugin-test-two/package.json b/server/tests/fixtures/peertube-plugin-test-two/package.json new file mode 100644 index 000000000..52ebb5ac1 --- /dev/null +++ b/server/tests/fixtures/peertube-plugin-test-two/package.json | |||
@@ -0,0 +1,19 @@ | |||
1 | { | ||
2 | "name": "peertube-plugin-test-two", | ||
3 | "version": "0.0.1", | ||
4 | "description": "Plugin test 2", | ||
5 | "engine": { | ||
6 | "peertube": ">=1.3.0" | ||
7 | }, | ||
8 | "keywords": [ | ||
9 | "peertube", | ||
10 | "plugin" | ||
11 | ], | ||
12 | "homepage": "https://github.com/Chocobozzz/PeerTube", | ||
13 | "author": "Chocobozzz", | ||
14 | "bugs": "https://github.com/Chocobozzz/PeerTube/issues", | ||
15 | "library": "./main.js", | ||
16 | "staticDirs": {}, | ||
17 | "css": [], | ||
18 | "clientScripts": [] | ||
19 | } | ||
diff --git a/server/tests/fixtures/peertube-plugin-test/main.js b/server/tests/fixtures/peertube-plugin-test/main.js index fae0ef948..c5317ab41 100644 --- a/server/tests/fixtures/peertube-plugin-test/main.js +++ b/server/tests/fixtures/peertube-plugin-test/main.js | |||
@@ -1,23 +1,52 @@ | |||
1 | async function register ({ registerHook, registerSetting, settingsManager, storageManager }) { | 1 | async function register ({ registerHook, registerSetting, settingsManager, storageManager, peertubeHelpers }) { |
2 | const defaultAdmin = 'PeerTube admin' | 2 | const actionHooks = [ |
3 | 'action:application.listening', | ||
4 | |||
5 | 'action:api.video.updated', | ||
6 | 'action:api.video.deleted', | ||
7 | 'action:api.video.uploaded', | ||
8 | 'action:api.video.viewed', | ||
9 | |||
10 | 'action:api.video-thread.created', | ||
11 | 'action:api.video-comment-reply.created', | ||
12 | 'action:api.video-comment.deleted' | ||
13 | ] | ||
14 | |||
15 | for (const h of actionHooks) { | ||
16 | registerHook({ | ||
17 | target: h, | ||
18 | handler: () => peertubeHelpers.logger.debug('Run hook %s.', h) | ||
19 | }) | ||
20 | } | ||
3 | 21 | ||
4 | registerHook({ | 22 | registerHook({ |
5 | target: 'action:application.listening', | 23 | target: 'filter:api.videos.list.params', |
6 | handler: () => displayHelloWorld(settingsManager, defaultAdmin) | 24 | handler: obj => addToCount(obj) |
7 | }) | 25 | }) |
8 | 26 | ||
9 | registerSetting({ | 27 | registerHook({ |
10 | name: 'admin-name', | 28 | target: 'filter:api.videos.list.result', |
11 | label: 'Admin name', | 29 | handler: obj => ({ data: obj.data, total: obj.total + 1 }) |
12 | type: 'input', | ||
13 | default: defaultAdmin | ||
14 | }) | 30 | }) |
15 | 31 | ||
16 | const value = await storageManager.getData('toto') | 32 | registerHook({ |
17 | console.log(value) | 33 | target: 'filter:api.video.get.result', |
18 | console.log(value.coucou) | 34 | handler: video => { |
35 | video.name += ' <3' | ||
19 | 36 | ||
20 | await storageManager.storeData('toto', { coucou: 'hello' + new Date() }) | 37 | return video |
38 | } | ||
39 | }) | ||
40 | |||
41 | registerHook({ | ||
42 | target: 'filter:api.video.upload.accept.result', | ||
43 | handler: ({ accepted }, { videoBody }) => { | ||
44 | if (accepted !== false) return { accepted: true } | ||
45 | if (videoBody.name.indexOf('bad word') !== -1) return { accepted: false, errorMessage: 'bad word '} | ||
46 | |||
47 | return { accepted: true } | ||
48 | } | ||
49 | }) | ||
21 | } | 50 | } |
22 | 51 | ||
23 | async function unregister () { | 52 | async function unregister () { |
@@ -31,9 +60,6 @@ module.exports = { | |||
31 | 60 | ||
32 | // ############################################################################ | 61 | // ############################################################################ |
33 | 62 | ||
34 | async function displayHelloWorld (settingsManager, defaultAdmin) { | 63 | function addToCount (obj) { |
35 | let value = await settingsManager.getSetting('admin-name') | 64 | return Object.assign({}, obj, { count: obj.count + 1 }) |
36 | if (!value) value = defaultAdmin | ||
37 | |||
38 | console.log('hello world ' + value) | ||
39 | } | 65 | } |
diff --git a/server/tests/plugins/action-hooks.ts b/server/tests/plugins/action-hooks.ts index 93dc57d09..2a941148a 100644 --- a/server/tests/plugins/action-hooks.ts +++ b/server/tests/plugins/action-hooks.ts | |||
@@ -2,26 +2,101 @@ | |||
2 | 2 | ||
3 | import * as chai from 'chai' | 3 | import * as chai from 'chai' |
4 | import 'mocha' | 4 | import 'mocha' |
5 | import { cleanupTests, flushAndRunServer, ServerInfo } from '../../../shared/extra-utils/server/servers' | 5 | import { |
6 | import { setAccessTokensToServers } from '../../../shared/extra-utils' | 6 | cleanupTests, |
7 | flushAndRunMultipleServers, | ||
8 | flushAndRunServer, killallServers, reRunServer, | ||
9 | ServerInfo, | ||
10 | waitUntilLog | ||
11 | } from '../../../shared/extra-utils/server/servers' | ||
12 | import { | ||
13 | addVideoCommentReply, | ||
14 | addVideoCommentThread, deleteVideoComment, | ||
15 | getPluginTestPath, | ||
16 | installPlugin, removeVideo, | ||
17 | setAccessTokensToServers, | ||
18 | updateVideo, | ||
19 | uploadVideo, | ||
20 | viewVideo | ||
21 | } from '../../../shared/extra-utils' | ||
7 | 22 | ||
8 | const expect = chai.expect | 23 | const expect = chai.expect |
9 | 24 | ||
10 | describe('Test plugin action hooks', function () { | 25 | describe('Test plugin action hooks', function () { |
11 | let server: ServerInfo | 26 | let servers: ServerInfo[] |
27 | let videoUUID: string | ||
28 | let threadId: number | ||
29 | |||
30 | function checkHook (hook: string) { | ||
31 | return waitUntilLog(servers[0], 'Run hook ' + hook) | ||
32 | } | ||
12 | 33 | ||
13 | before(async function () { | 34 | before(async function () { |
14 | this.timeout(30000) | 35 | this.timeout(30000) |
15 | server = await flushAndRunServer(1) | ||
16 | 36 | ||
17 | await setAccessTokensToServers([ server ]) | 37 | servers = await flushAndRunMultipleServers(2) |
38 | await setAccessTokensToServers(servers) | ||
39 | |||
40 | await installPlugin({ | ||
41 | url: servers[0].url, | ||
42 | accessToken: servers[0].accessToken, | ||
43 | path: getPluginTestPath() | ||
44 | }) | ||
45 | |||
46 | await killallServers([ servers[0] ]) | ||
47 | |||
48 | await reRunServer(servers[0]) | ||
18 | }) | 49 | }) |
19 | 50 | ||
20 | it('Should execute ', async function () { | 51 | it('Should run action:application.listening', async function () { |
21 | // empty | 52 | await checkHook('action:application.listening') |
53 | }) | ||
54 | |||
55 | it('Should run action:api.video.uploaded', async function () { | ||
56 | const res = await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'video' }) | ||
57 | videoUUID = res.body.video.uuid | ||
58 | |||
59 | await checkHook('action:api.video.uploaded') | ||
60 | }) | ||
61 | |||
62 | it('Should run action:api.video.updated', async function () { | ||
63 | await updateVideo(servers[0].url, servers[0].accessToken, videoUUID, { name: 'video updated' }) | ||
64 | |||
65 | await checkHook('action:api.video.updated') | ||
66 | }) | ||
67 | |||
68 | it('Should run action:api.video.viewed', async function () { | ||
69 | await viewVideo(servers[0].url, videoUUID) | ||
70 | |||
71 | await checkHook('action:api.video.viewed') | ||
72 | }) | ||
73 | |||
74 | it('Should run action:api.video-thread.created', async function () { | ||
75 | const res = await addVideoCommentThread(servers[0].url, servers[0].accessToken, videoUUID, 'thread') | ||
76 | threadId = res.body.comment.id | ||
77 | |||
78 | await checkHook('action:api.video-thread.created') | ||
79 | }) | ||
80 | |||
81 | it('Should run action:api.video-comment-reply.created', async function () { | ||
82 | await addVideoCommentReply(servers[0].url, servers[0].accessToken, videoUUID, threadId, 'reply') | ||
83 | |||
84 | await checkHook('action:api.video-comment-reply.created') | ||
85 | }) | ||
86 | |||
87 | it('Should run action:api.video-comment.deleted', async function () { | ||
88 | await deleteVideoComment(servers[0].url, servers[0].accessToken, videoUUID, threadId) | ||
89 | |||
90 | await checkHook('action:api.video-comment.deleted') | ||
91 | }) | ||
92 | |||
93 | it('Should run action:api.video.deleted', async function () { | ||
94 | await removeVideo(servers[0].url, servers[0].accessToken, videoUUID) | ||
95 | |||
96 | await checkHook('action:api.video.deleted') | ||
22 | }) | 97 | }) |
23 | 98 | ||
24 | after(async function () { | 99 | after(async function () { |
25 | await cleanupTests([ server ]) | 100 | await cleanupTests(servers) |
26 | }) | 101 | }) |
27 | }) | 102 | }) |
diff --git a/server/tests/plugins/filter-hooks.ts b/server/tests/plugins/filter-hooks.ts index 500728712..4fc2c437b 100644 --- a/server/tests/plugins/filter-hooks.ts +++ b/server/tests/plugins/filter-hooks.ts | |||
@@ -2,26 +2,79 @@ | |||
2 | 2 | ||
3 | import * as chai from 'chai' | 3 | import * as chai from 'chai' |
4 | import 'mocha' | 4 | import 'mocha' |
5 | import { cleanupTests, flushAndRunServer, ServerInfo } from '../../../shared/extra-utils/server/servers' | 5 | import { |
6 | import { setAccessTokensToServers } from '../../../shared/extra-utils' | 6 | cleanupTests, |
7 | flushAndRunMultipleServers, | ||
8 | flushAndRunServer, killallServers, reRunServer, | ||
9 | ServerInfo, | ||
10 | waitUntilLog | ||
11 | } from '../../../shared/extra-utils/server/servers' | ||
12 | import { | ||
13 | addVideoCommentReply, | ||
14 | addVideoCommentThread, deleteVideoComment, | ||
15 | getPluginTestPath, getVideosList, | ||
16 | installPlugin, removeVideo, | ||
17 | setAccessTokensToServers, | ||
18 | updateVideo, | ||
19 | uploadVideo, | ||
20 | viewVideo, | ||
21 | getVideosListPagination, getVideo | ||
22 | } from '../../../shared/extra-utils' | ||
7 | 23 | ||
8 | const expect = chai.expect | 24 | const expect = chai.expect |
9 | 25 | ||
10 | describe('Test plugin filter hooks', function () { | 26 | describe('Test plugin filter hooks', function () { |
11 | let server: ServerInfo | 27 | let servers: ServerInfo[] |
28 | let videoUUID: string | ||
29 | let threadId: number | ||
12 | 30 | ||
13 | before(async function () { | 31 | before(async function () { |
14 | this.timeout(30000) | 32 | this.timeout(30000) |
15 | server = await flushAndRunServer(1) | ||
16 | 33 | ||
17 | await setAccessTokensToServers([ server ]) | 34 | servers = await flushAndRunMultipleServers(2) |
35 | await setAccessTokensToServers(servers) | ||
36 | |||
37 | await installPlugin({ | ||
38 | url: servers[0].url, | ||
39 | accessToken: servers[0].accessToken, | ||
40 | path: getPluginTestPath() | ||
41 | }) | ||
42 | |||
43 | await installPlugin({ | ||
44 | url: servers[0].url, | ||
45 | accessToken: servers[0].accessToken, | ||
46 | path: getPluginTestPath('-two') | ||
47 | }) | ||
48 | |||
49 | for (let i = 0; i < 10; i++) { | ||
50 | await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'default video ' + i }) | ||
51 | } | ||
52 | |||
53 | const res = await getVideosList(servers[0].url) | ||
54 | videoUUID = res.body.data[0].uuid | ||
18 | }) | 55 | }) |
19 | 56 | ||
20 | it('Should execute ', async function () { | 57 | it('Should run filter:api.videos.list.params hook', async function () { |
21 | // empty | 58 | const res = await getVideosListPagination(servers[0].url, 0, 2) |
59 | |||
60 | // 2 plugins do +1 to the count parameter | ||
61 | expect(res.body.data).to.have.lengthOf(4) | ||
62 | }) | ||
63 | |||
64 | it('Should run filter:api.videos.list.result', async function () { | ||
65 | const res = await getVideosListPagination(servers[0].url, 0, 0) | ||
66 | |||
67 | // Plugin do +1 to the total result | ||
68 | expect(res.body.total).to.equal(11) | ||
69 | }) | ||
70 | |||
71 | it('Should run filter:api.video.get.result', async function () { | ||
72 | const res = await getVideo(servers[0].url, videoUUID) | ||
73 | |||
74 | expect(res.body.name).to.contain('<3') | ||
22 | }) | 75 | }) |
23 | 76 | ||
24 | after(async function () { | 77 | after(async function () { |
25 | await cleanupTests([ server ]) | 78 | await cleanupTests(servers) |
26 | }) | 79 | }) |
27 | }) | 80 | }) |