]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - shared/extra-utils/server/plugins.ts
modularize abstract video list header and implement video hotness recommendation...
[github/Chocobozzz/PeerTube.git] / shared / extra-utils / server / plugins.ts
index 2302208a8088e90c86cff0d9d7dae3d9244db9ef..864954ee78f011a2256d2055e1a6d830f8850553 100644 (file)
@@ -1,22 +1,27 @@
-import { makeGetRequest, makePostBodyRequest, makePutBodyRequest } from '../requests/requests'
-import { PluginType } from '../../models/plugins/plugin.type'
-import { PeertubePluginIndexList } from '../../models/plugins/peertube-plugin-index-list.model'
+/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
+
+import { expect } from 'chai'
 import { readJSON, writeJSON } from 'fs-extra'
-import { ServerInfo } from './servers'
-import { root } from '../miscs/miscs'
 import { join } from 'path'
+import { RegisteredServerSettings } from '@shared/models'
+import { PeertubePluginIndexList } from '../../models/plugins/peertube-plugin-index-list.model'
+import { PluginType } from '../../models/plugins/plugin.type'
+import { buildServerDirectory, root } from '../miscs/miscs'
+import { makeGetRequest, makePostBodyRequest, makePutBodyRequest } from '../requests/requests'
+import { ServerInfo } from './servers'
+import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
 
 function listPlugins (parameters: {
-  url: string,
-  accessToken: string,
-  start?: number,
-  count?: number,
-  sort?: string,
-  pluginType?: PluginType,
-  uninstalled?: boolean,
-  expectedStatus?: number
+  url: string
+  accessToken: string
+  start?: number
+  count?: number
+  sort?: string
+  pluginType?: PluginType
+  uninstalled?: boolean
+  expectedStatus?: HttpStatusCode
 }) {
-  const { url, accessToken, start, count, sort, pluginType, uninstalled, expectedStatus = 200 } = parameters
+  const { url, accessToken, start, count, sort, pluginType, uninstalled, expectedStatus = HttpStatusCode.OK_200 } = parameters
   const path = '/api/v1/plugins'
 
   return makeGetRequest({
@@ -35,17 +40,27 @@ function listPlugins (parameters: {
 }
 
 function listAvailablePlugins (parameters: {
-  url: string,
-  accessToken: string,
-  start?: number,
-  count?: number,
-  sort?: string,
-  pluginType?: PluginType,
-  currentPeerTubeEngine?: string,
+  url: string
+  accessToken: string
+  start?: number
+  count?: number
+  sort?: string
+  pluginType?: PluginType
+  currentPeerTubeEngine?: string
   search?: string
-  expectedStatus?: number
+  expectedStatus?: HttpStatusCode
 }) {
-  const { url, accessToken, start, count, sort, pluginType, search, currentPeerTubeEngine, expectedStatus = 200 } = parameters
+  const {
+    url,
+    accessToken,
+    start,
+    count,
+    sort,
+    pluginType,
+    search,
+    currentPeerTubeEngine,
+    expectedStatus = HttpStatusCode.OK_200
+  } = parameters
   const path = '/api/v1/plugins/available'
 
   const query: PeertubePluginIndexList = {
@@ -67,12 +82,12 @@ function listAvailablePlugins (parameters: {
 }
 
 function getPlugin (parameters: {
-  url: string,
-  accessToken: string,
-  npmName: string,
-  expectedStatus?: number
+  url: string
+  accessToken: string
+  npmName: string
+  expectedStatus?: HttpStatusCode
 }) {
-  const { url, accessToken, npmName, expectedStatus = 200 } = parameters
+  const { url, accessToken, npmName, expectedStatus = HttpStatusCode.OK_200 } = parameters
   const path = '/api/v1/plugins/' + npmName
 
   return makeGetRequest({
@@ -84,13 +99,13 @@ function getPlugin (parameters: {
 }
 
 function updatePluginSettings (parameters: {
-  url: string,
-  accessToken: string,
-  npmName: string,
-  settings: any,
-  expectedStatus?: number
+  url: string
+  accessToken: string
+  npmName: string
+  settings: any
+  expectedStatus?: HttpStatusCode
 }) {
-  const { url, accessToken, npmName, settings, expectedStatus = 204 } = parameters
+  const { url, accessToken, npmName, settings, expectedStatus = HttpStatusCode.NO_CONTENT_204 } = parameters
   const path = '/api/v1/plugins/' + npmName + '/settings'
 
   return makePutBodyRequest({
@@ -103,12 +118,12 @@ function updatePluginSettings (parameters: {
 }
 
 function getPluginRegisteredSettings (parameters: {
-  url: string,
-  accessToken: string,
-  npmName: string,
-  expectedStatus?: number
+  url: string
+  accessToken: string
+  npmName: string
+  expectedStatus?: HttpStatusCode
 }) {
-  const { url, accessToken, npmName, expectedStatus = 200 } = parameters
+  const { url, accessToken, npmName, expectedStatus = HttpStatusCode.OK_200 } = parameters
   const path = '/api/v1/plugins/' + npmName + '/registered-settings'
 
   return makeGetRequest({
@@ -119,14 +134,59 @@ function getPluginRegisteredSettings (parameters: {
   })
 }
 
+async function testHelloWorldRegisteredSettings (server: ServerInfo) {
+  const res = await getPluginRegisteredSettings({
+    url: server.url,
+    accessToken: server.accessToken,
+    npmName: 'peertube-plugin-hello-world'
+  })
+
+  const registeredSettings = (res.body as RegisteredServerSettings).registeredSettings
+
+  expect(registeredSettings).to.have.length.at.least(1)
+
+  const adminNameSettings = registeredSettings.find(s => s.name === 'admin-name')
+  expect(adminNameSettings).to.not.be.undefined
+}
+
+function getPublicSettings (parameters: {
+  url: string
+  npmName: string
+  expectedStatus?: HttpStatusCode
+}) {
+  const { url, npmName, expectedStatus = HttpStatusCode.OK_200 } = parameters
+  const path = '/api/v1/plugins/' + npmName + '/public-settings'
+
+  return makeGetRequest({
+    url,
+    path,
+    statusCodeExpected: expectedStatus
+  })
+}
+
+function getPluginTranslations (parameters: {
+  url: string
+  locale: string
+  expectedStatus?: HttpStatusCode
+}) {
+  const { url, locale, expectedStatus = HttpStatusCode.OK_200 } = parameters
+  const path = '/plugins/translations/' + locale + '.json'
+
+  return makeGetRequest({
+    url,
+    path,
+    statusCodeExpected: expectedStatus
+  })
+}
+
 function installPlugin (parameters: {
-  url: string,
-  accessToken: string,
-  path?: string,
+  url: string
+  accessToken: string
+  path?: string
   npmName?: string
-  expectedStatus?: number
+  expectedStatus?: HttpStatusCode
 }) {
-  const { url, accessToken, npmName, path, expectedStatus = 200 } = parameters
+  const { url, accessToken, npmName, path, expectedStatus = HttpStatusCode.OK_200 } = parameters
   const apiPath = '/api/v1/plugins/install'
 
   return makePostBodyRequest({
@@ -139,13 +199,13 @@ function installPlugin (parameters: {
 }
 
 function updatePlugin (parameters: {
-  url: string,
-  accessToken: string,
-  path?: string,
+  url: string
+  accessToken: string
+  path?: string
   npmName?: string
-  expectedStatus?: number
+  expectedStatus?: HttpStatusCode
 }) {
-  const { url, accessToken, npmName, path, expectedStatus = 200 } = parameters
+  const { url, accessToken, npmName, path, expectedStatus = HttpStatusCode.OK_200 } = parameters
   const apiPath = '/api/v1/plugins/update'
 
   return makePostBodyRequest({
@@ -158,12 +218,12 @@ function updatePlugin (parameters: {
 }
 
 function uninstallPlugin (parameters: {
-  url: string,
-  accessToken: string,
+  url: string
+  accessToken: string
   npmName: string
-  expectedStatus?: number
+  expectedStatus?: HttpStatusCode
 }) {
-  const { url, accessToken, npmName, expectedStatus = 204 } = parameters
+  const { url, accessToken, npmName, expectedStatus = HttpStatusCode.NO_CONTENT_204 } = parameters
   const apiPath = '/api/v1/plugins/uninstall'
 
   return makePostBodyRequest({
@@ -181,12 +241,12 @@ function getPluginsCSS (url: string) {
   return makeGetRequest({
     url,
     path,
-    statusCodeExpected: 200
+    statusCodeExpected: HttpStatusCode.OK_200
   })
 }
 
 function getPackageJSONPath (server: ServerInfo, npmName: string) {
-  return join(root(), 'test' + server.internalServerNumber, 'plugins', 'node_modules', npmName, 'package.json')
+  return buildServerDirectory(server, join('plugins', 'node_modules', npmName, 'package.json'))
 }
 
 function updatePluginPackageJSON (server: ServerInfo, npmName: string, json: any) {
@@ -205,18 +265,43 @@ function getPluginTestPath (suffix = '') {
   return join(root(), 'server', 'tests', 'fixtures', 'peertube-plugin-test' + suffix)
 }
 
+function getExternalAuth (options: {
+  url: string
+  npmName: string
+  npmVersion: string
+  authName: string
+  query?: any
+  statusCodeExpected?: HttpStatusCode
+}) {
+  const { url, npmName, npmVersion, authName, statusCodeExpected, query } = options
+
+  const path = '/plugins/' + npmName + '/' + npmVersion + '/auth/' + authName
+
+  return makeGetRequest({
+    url,
+    path,
+    query,
+    statusCodeExpected: statusCodeExpected || HttpStatusCode.OK_200,
+    redirects: 0
+  })
+}
+
 export {
   listPlugins,
   listAvailablePlugins,
   installPlugin,
+  getPluginTranslations,
   getPluginsCSS,
   updatePlugin,
   getPlugin,
   uninstallPlugin,
+  testHelloWorldRegisteredSettings,
   updatePluginSettings,
   getPluginRegisteredSettings,
   getPackageJSONPath,
   updatePluginPackageJSON,
   getPluginPackageJSON,
-  getPluginTestPath
+  getPluginTestPath,
+  getPublicSettings,
+  getExternalAuth
 }