diff options
-rw-r--r-- | server/models/server/plugin.ts | 19 | ||||
-rw-r--r-- | server/tests/fixtures/peertube-plugin-test-six/main.js | 25 | ||||
-rw-r--r-- | server/tests/fixtures/peertube-plugin-test-six/package.json | 20 | ||||
-rw-r--r-- | server/tests/plugins/index.ts | 1 | ||||
-rw-r--r-- | server/tests/plugins/plugin-storage.ts | 30 |
5 files changed, 85 insertions, 10 deletions
diff --git a/server/models/server/plugin.ts b/server/models/server/plugin.ts index c72846343..53b6227d7 100644 --- a/server/models/server/plugin.ts +++ b/server/models/server/plugin.ts | |||
@@ -1,5 +1,5 @@ | |||
1 | import * as Bluebird from 'bluebird' | 1 | import * as Bluebird from 'bluebird' |
2 | import { FindAndCountOptions, json } from 'sequelize' | 2 | import { FindAndCountOptions, json, QueryTypes } from 'sequelize' |
3 | import { AllowNull, Column, CreatedAt, DataType, DefaultScope, Is, Model, Table, UpdatedAt } from 'sequelize-typescript' | 3 | import { AllowNull, Column, CreatedAt, DataType, DefaultScope, Is, Model, Table, UpdatedAt } from 'sequelize-typescript' |
4 | import { MPlugin, MPluginFormattable } from '@server/typings/models' | 4 | import { MPlugin, MPluginFormattable } from '@server/typings/models' |
5 | import { PeerTubePlugin } from '../../../shared/models/plugins/peertube-plugin.model' | 5 | import { PeerTubePlugin } from '../../../shared/models/plugins/peertube-plugin.model' |
@@ -212,18 +212,17 @@ export class PluginModel extends Model<PluginModel> { | |||
212 | } | 212 | } |
213 | 213 | ||
214 | static storeData (pluginName: string, pluginType: PluginType, key: string, data: any) { | 214 | static storeData (pluginName: string, pluginType: PluginType, key: string, data: any) { |
215 | const query = { | 215 | const query = 'UPDATE "plugin" SET "storage" = jsonb_set(coalesce("storage", \'{}\'), :key, :data::jsonb) ' + |
216 | where: { | 216 | 'WHERE "name" = :pluginName AND "type" = :pluginType' |
217 | name: pluginName, | ||
218 | type: pluginType | ||
219 | } | ||
220 | } | ||
221 | 217 | ||
222 | const toSave = { | 218 | const jsonPath = '{' + key + '}' |
223 | [`storage.${key}`]: data | 219 | |
220 | const options = { | ||
221 | replacements: { pluginName, pluginType, key: jsonPath, data: JSON.stringify(data) }, | ||
222 | type: QueryTypes.UPDATE | ||
224 | } | 223 | } |
225 | 224 | ||
226 | return PluginModel.update(toSave, query) | 225 | return PluginModel.sequelize.query(query, options) |
227 | .then(() => undefined) | 226 | .then(() => undefined) |
228 | } | 227 | } |
229 | 228 | ||
diff --git a/server/tests/fixtures/peertube-plugin-test-six/main.js b/server/tests/fixtures/peertube-plugin-test-six/main.js new file mode 100644 index 000000000..bb9aaffa7 --- /dev/null +++ b/server/tests/fixtures/peertube-plugin-test-six/main.js | |||
@@ -0,0 +1,25 @@ | |||
1 | async function register ({ | ||
2 | storageManager, | ||
3 | peertubeHelpers | ||
4 | }) { | ||
5 | const { logger } = peertubeHelpers | ||
6 | |||
7 | { | ||
8 | await storageManager.storeData('superkey', { value: 'toto' }) | ||
9 | await storageManager.storeData('anotherkey', { value: 'toto2' }) | ||
10 | |||
11 | const result = await storageManager.getData('superkey') | ||
12 | logger.info('superkey stored value is %s', result.value) | ||
13 | } | ||
14 | } | ||
15 | |||
16 | async function unregister () { | ||
17 | return | ||
18 | } | ||
19 | |||
20 | module.exports = { | ||
21 | register, | ||
22 | unregister | ||
23 | } | ||
24 | |||
25 | // ########################################################################### | ||
diff --git a/server/tests/fixtures/peertube-plugin-test-six/package.json b/server/tests/fixtures/peertube-plugin-test-six/package.json new file mode 100644 index 000000000..8c97826b0 --- /dev/null +++ b/server/tests/fixtures/peertube-plugin-test-six/package.json | |||
@@ -0,0 +1,20 @@ | |||
1 | { | ||
2 | "name": "peertube-plugin-test-six", | ||
3 | "version": "0.0.1", | ||
4 | "description": "Plugin test 6", | ||
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 | "translations": {} | ||
20 | } | ||
diff --git a/server/tests/plugins/index.ts b/server/tests/plugins/index.ts index d2bd69131..39c4c958a 100644 --- a/server/tests/plugins/index.ts +++ b/server/tests/plugins/index.ts | |||
@@ -6,3 +6,4 @@ import './translations' | |||
6 | import './video-constants' | 6 | import './video-constants' |
7 | import './plugin-helpers' | 7 | import './plugin-helpers' |
8 | import './plugin-router' | 8 | import './plugin-router' |
9 | import './plugin-storage' | ||
diff --git a/server/tests/plugins/plugin-storage.ts b/server/tests/plugins/plugin-storage.ts new file mode 100644 index 000000000..356692eb9 --- /dev/null +++ b/server/tests/plugins/plugin-storage.ts | |||
@@ -0,0 +1,30 @@ | |||
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ | ||
2 | |||
3 | import 'mocha' | ||
4 | import { getPluginTestPath, installPlugin, setAccessTokensToServers } from '../../../shared/extra-utils' | ||
5 | import { cleanupTests, flushAndRunServer, ServerInfo, waitUntilLog } from '../../../shared/extra-utils/server/servers' | ||
6 | |||
7 | describe('Test plugin storage', function () { | ||
8 | let server: ServerInfo | ||
9 | |||
10 | before(async function () { | ||
11 | this.timeout(30000) | ||
12 | |||
13 | server = await flushAndRunServer(1) | ||
14 | await setAccessTokensToServers([ server ]) | ||
15 | |||
16 | await installPlugin({ | ||
17 | url: server.url, | ||
18 | accessToken: server.accessToken, | ||
19 | path: getPluginTestPath('-six') | ||
20 | }) | ||
21 | }) | ||
22 | |||
23 | it('Should correctly store a subkey', async function () { | ||
24 | await waitUntilLog(server, 'superkey stored value is toto') | ||
25 | }) | ||
26 | |||
27 | after(async function () { | ||
28 | await cleanupTests([ server ]) | ||
29 | }) | ||
30 | }) | ||