Convert real world tools to typescript
authorChocobozzz <florian.bigard@gmail.com>
Thu, 7 Sep 2017 15:58:09 +0000 (17:58 +0200)
committerChocobozzz <florian.bigard@gmail.com>
Thu, 7 Sep 2017 15:58:09 +0000 (17:58 +0200)
server/tests/cli/index.ts
server/tests/real-world/tools/get-access-token.js [deleted file]
server/tests/real-world/tools/get-access-token.ts [new file with mode: 0644]
server/tests/real-world/tools/upload-directory.js [deleted file]
server/tests/real-world/tools/upload-directory.ts [new file with mode: 0644]
server/tests/real-world/tools/upload.js [deleted file]
server/tests/real-world/tools/upload.ts [new file with mode: 0644]
server/tests/utils/cli.ts
server/tests/utils/clients.ts
server/tests/utils/videos.ts

index e5a19ff10f40c67605058f3da0f6c1c55eaad09a..ecef9bd24f653997c8affd7d3162a256ee632292 100644 (file)
@@ -1,2 +1,3 @@
 // Order of the tests we want to execute
 import './reset-password'
+import './update-host'
diff --git a/server/tests/real-world/tools/get-access-token.js b/server/tests/real-world/tools/get-access-token.js
deleted file mode 100644 (file)
index 483cefa..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-'use strict'
-
-const program = require('commander')
-
-const utilsClient = require('../../utils/clients')
-const utilsLogin = require('../../utils/login')
-
-program
-  .option('-u, --url <url>', 'Server url')
-  .option('-n, --username <username>', 'Username')
-  .option('-p, --password <token>', 'Password')
-  .parse(process.argv)
-
-if (
-  !program.url ||
-  !program.username ||
-  !program.password
-) {
-  throw new Error('All arguments are required.')
-}
-
-const server = {
-  url: program.url,
-  user: {
-    username: program.username,
-    password: program.password
-  },
-  client: {
-    id: null,
-    secret: null
-  }
-}
-
-utilsClient.getClient(program.url, function (err, res) {
-  if (err) throw err
-
-  server.client.id = res.body.client_id
-  server.client.secret = res.body.client_secret
-
-  utilsLogin.loginAndGetAccessToken(server, function (err, accessToken) {
-    if (err) throw err
-
-    console.log(accessToken)
-  })
-})
diff --git a/server/tests/real-world/tools/get-access-token.ts b/server/tests/real-world/tools/get-access-token.ts
new file mode 100644 (file)
index 0000000..a2f0760
--- /dev/null
@@ -0,0 +1,49 @@
+import * as program from 'commander'
+import * as Promise from 'bluebird'
+
+import {
+  getClient,
+  loginAndGetAccessToken
+} from '../../utils'
+
+program
+  .option('-u, --url <url>', 'Server url')
+  .option('-n, --username <username>', 'Username')
+  .option('-p, --password <token>', 'Password')
+  .parse(process.argv)
+
+if (
+  !program['url'] ||
+  !program['username'] ||
+  !program['password']
+) {
+  throw new Error('All arguments are required.')
+}
+
+const server = {
+  url: program['url'],
+  user: {
+    username: program['username'],
+    password: program['password']
+  },
+  client: {
+    id: null,
+    secret: null
+  }
+}
+
+getClient(program.url)
+  .then(res => {
+    server.client.id = res.body.client_id
+    server.client.secret = res.body.client_secret
+
+    return loginAndGetAccessToken(server)
+  })
+  .then(accessToken => {
+    console.log(accessToken)
+    process.exit(0)
+  })
+  .catch(err => {
+    console.error(err)
+    process.exit(-1)
+  })
diff --git a/server/tests/real-world/tools/upload-directory.js b/server/tests/real-world/tools/upload-directory.js
deleted file mode 100644 (file)
index aed7a1f..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-'use strict'
-
-const program = require('commander')
-const eachSeries = require('async/eachSeries')
-const exec = require('child_process').exec
-const fs = require('fs')
-const path = require('path')
-
-program
-  .option('-u, --url <url>', 'Server url')
-  .option('-n, --username <username>', 'Username')
-  .option('-p, --password <token>', 'Password')
-  .option('-i, --directory <directory>', 'Videos directory absolute path')
-  .option('-d, --description <description>', 'Video description')
-  .option('-t, --tags <tags>', 'Video tags', list)
-  .parse(process.argv)
-
-if (
-  !program.url ||
-  !program.username ||
-  !program.password ||
-  !program.directory ||
-  !program.description ||
-  !program.tags
-) {
-  throw new Error('All arguments are required.')
-}
-
-exec('node ./get-access-token -u "' + program.url + '" -n "' + program.username + '" -p "' + program.password + '"', function (err, stdout) {
-  if (err) throw err
-
-  const accessToken = stdout.replace('\n', '')
-
-  fs.readdir(program.directory, function (err, files) {
-    if (err) throw err
-
-    eachSeries(files, function (file, callbackEach) {
-      const video = {
-        tags: program.tags,
-        name: file,
-        description: program.description
-      }
-
-      let command = 'node ./upload'
-      command += ' -u "' + program.url + '"'
-      command += ' -a "' + accessToken + '"'
-      command += ' -n "' + video.name + '"'
-      command += ' -d "' + video.description + '"'
-      command += ' -t "' + video.tags.join(',') + '"'
-      command += ' -f "' + path.join(program.directory, file) + '"'
-
-      exec(command, function (err, stdout) {
-        if (err) console.log(err)
-
-        console.log(stdout)
-
-        return callbackEach()
-      })
-    })
-  })
-})
-
-// ----------------------------------------------------------------------------
-
-function list (val) {
-  return val.split(',')
-}
diff --git a/server/tests/real-world/tools/upload-directory.ts b/server/tests/real-world/tools/upload-directory.ts
new file mode 100644 (file)
index 0000000..a8ab166
--- /dev/null
@@ -0,0 +1,83 @@
+import * as program from 'commander'
+import * as Promise from 'bluebird'
+import { isAbsolute } from 'path'
+import { join } from 'path'
+
+import { readdirPromise } from '../../../helpers/core-utils'
+import { execCLI } from '../../utils'
+
+program
+  .option('-u, --url <url>', 'Server url')
+  .option('-U, --username <username>', 'Username')
+  .option('-p, --password <token>', 'Password')
+  .option('-i, --input <directory>', 'Videos directory absolute path')
+  .option('-d, --description <description>', 'Video descriptions')
+  .option('-c, --category <category>', 'Video categories')
+  .option('-l, --licence <licence>', 'Video licences')
+  .option('-t, --tags <tags>', 'Video tags', list)
+  .parse(process.argv)
+
+if (
+  !program['url'] ||
+  !program['username'] ||
+  !program['password'] ||
+  !program['input'] ||
+  !program['description'] ||
+  !program['category'] ||
+  !program['licence'] ||
+  !program['tags']
+) {
+  throw new Error('All arguments are required.')
+}
+
+if (isAbsolute(program['input']) === false) {
+  throw new Error('Input path should be absolute.')
+}
+
+let command = `npm run ts-node -- ${__dirname}/get-access-token.ts`
+command += ` -u "${program['url']}"`
+command += ` -n "${program['username']}"`
+command += ` -p "${program['password']}"`
+
+execCLI(command)
+  .then(stdout => {
+    const accessToken = stdout.replace('\n', '')
+
+    console.log(accessToken)
+
+    return readdirPromise(program['input']).then(files => ({ accessToken, files }))
+  })
+  .then(({ accessToken, files }) => {
+    return Promise.each(files, file => {
+      const video = {
+        tags: program['tags'],
+        name: file,
+        description: program['description'],
+        category: program['category'],
+        licence: program['licence']
+      }
+
+      let command = `npm run ts-node -- ${__dirname}/upload.ts`
+      command += ` -u "${program['url']}"`
+      command += ` -a "${accessToken}"`
+      command += ` -n "${video.name}"`
+      command += ` -d "${video.description}"`
+      command += ` -c "${video.category}"`
+      command += ` -l "${video.licence}"`
+      command += ` -t "${video.tags.join(',')}"`
+      command += ` -f "${join(program['input'], file)}"`
+
+      return execCLI(command).then(stdout => console.log(stdout))
+    })
+  })
+  .then(() => process.exit(0))
+  .catch(err => {
+    console.error(err)
+    process.exit(-1)
+  })
+
+// ----------------------------------------------------------------------------
+
+function list (val) {
+  return val.split(',')
+}
diff --git a/server/tests/real-world/tools/upload.js b/server/tests/real-world/tools/upload.js
deleted file mode 100644 (file)
index efb91e2..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-'use strict'
-
-const program = require('commander')
-const fs = require('fs')
-
-const utils = require('../../utils/videos')
-
-program
-  .option('-u, --url <url>', 'Server url')
-  .option('-a, --access-token <token>', 'Access token')
-  .option('-n, --name <name>', 'Video name')
-  .option('-x, --nsfw', 'Video is Not Safe For Work')
-  .option('-c, --category <category number>', 'Category number')
-  .option('-l, --licence <licence number>', 'Licence number')
-  .option('-g, --language <language number>', 'Language number')
-  .option('-d, --description <description>', 'Video description')
-  .option('-t, --tags <tags>', 'Video tags', list)
-  .option('-f, --file <file>', 'Video absolute file path')
-  .parse(process.argv)
-
-if (
-  !program.url ||
-  !program.accessToken ||
-  !program.name ||
-  !program.category ||
-  !program.licence ||
-  !program.language ||
-  !program.nsfw ||
-  !program.description ||
-  !program.tags ||
-  !Array.isArray(program.tags) ||
-  program.tags.length === 0 ||
-  !program.file
-) {
-  throw new Error('All arguments are required.')
-}
-
-fs.access(program.file, fs.F_OK, function (err) {
-  if (err) throw err
-
-  upload(
-    program.url,
-    program.accessToken,
-    program.name,
-    program.category,
-    program.licence,
-    program.language,
-    program.nsfw,
-    program.description,
-    program.tags,
-    program.file
-  )
-})
-
-// ----------------------------------------------------------------------------
-
-function list (val) {
-  return val.split(',')
-}
-
-function upload (url, accessToken, name, category, licence, language, nsfw, description, tags, fixture) {
-  console.log('Uploading %s video...', program.name)
-
-  const videoAttributes = {
-    name,
-    category,
-    licence,
-    language,
-    nsfw,
-    description,
-    tags,
-    fixture
-  }
-  utils.uploadVideo(url, accessToken, videoAttributes, function (err) {
-    if (err) throw err
-
-    console.log('Video uploaded.')
-  })
-}
diff --git a/server/tests/real-world/tools/upload.ts b/server/tests/real-world/tools/upload.ts
new file mode 100644 (file)
index 0000000..81bc0d4
--- /dev/null
@@ -0,0 +1,85 @@
+import * as program from 'commander'
+import { access, constants } from 'fs'
+import { isAbsolute } from 'path'
+import { promisify } from 'util'
+
+const accessPromise = promisify(access)
+
+import { uploadVideo } from '../../utils'
+
+program
+  .option('-u, --url <url>', 'Server url')
+  .option('-a, --access-token <token>', 'Access token')
+  .option('-n, --name <name>', 'Video name')
+  .option('-N, --nsfw', 'Video is Not Safe For Work')
+  .option('-c, --category <category number>', 'Category number')
+  .option('-l, --licence <licence number>', 'Licence number')
+  .option('-L, --language <language number>', 'Language number')
+  .option('-d, --description <description>', 'Video description')
+  .option('-t, --tags <tags>', 'Video tags', list)
+  .option('-f, --file <file>', 'Video absolute file path')
+  .parse(process.argv)
+
+if (!program['tags']) program['tags'] = []
+if (!program['nsfw']) program['nsfw'] = false
+
+if (
+  !program['url'] ||
+  !program['accessToken'] ||
+  !program['name'] ||
+  !program['category'] ||
+  !program['licence'] ||
+  !program['description'] ||
+  !program['file']
+) {
+  throw new Error('All arguments but tags, language and nsfw are required.')
+}
+
+if (isAbsolute(program['file']) === false) {
+  throw new Error('File path should be absolute.')
+}
+
+accessPromise(program['file'], constants.F_OK)
+  .then(() => {
+    return upload(
+      program['url'],
+      program['accessToken'],
+      program['name'],
+      program['category'],
+      program['licence'],
+      program['language'],
+      program['nsfw'],
+      program['description'],
+      program['tags'],
+      program['file']
+    )
+  })
+  .then(() => process.exit(0))
+  .catch(err => {
+    console.error(err)
+    process.exit(-1)
+  })
+
+// ----------------------------------------------------------------------------
+
+function list (val) {
+  return val.split(',')
+}
+
+function upload (url, accessToken, name, category, licence, language, nsfw, description, tags, fixture) {
+  console.log('Uploading %s video...', program['name'])
+
+  const videoAttributes = {
+    name,
+    category,
+    licence,
+    language,
+    nsfw,
+    description,
+    tags,
+    fixture
+  }
+  return uploadVideo(url, accessToken, videoAttributes).then(() => {
+    console.log(`Video ${name} uploaded.`)
+  })
+}
index 5f07a832e7bf57f011cb02a4d7e9e454f2e1353e..4098fdf6f7e0ed1d696abfd6b5616264bd723350 100644 (file)
@@ -7,7 +7,7 @@ function getEnvCli (server?: ServerInfo) {
 }
 
 async function execCLI (command: string) {
-  return new Promise((res, rej) => {
+  return new Promise<string>((res, rej) => {
     exec(command, (err, stdout, stderr) => {
       if (err) return rej(err)
 
index 22676bb381a3aac2ab01ac89641b52f145d98d14..a8c5b51c5ce51aed41a6fbcbe1e69f3b7bf8cee5 100644 (file)
@@ -1,7 +1,7 @@
 import * as request from 'supertest'
 
 function getClient (url: string) {
-  const path = '/api/v1/clients/local'
+  const path = '/api/v1/oauth-clients/local'
 
   return request(url)
           .get(path)
index 509a2430a282cb82f96792ff1317a38d908e21a6..83271becabb95ffddcae5dabdb8d4fd44fbbf0b5 100644 (file)
@@ -185,10 +185,13 @@ function uploadVideo (url: string, accessToken: string, videoAttributesArg: Vide
               .field('name', attributes.name)
               .field('category', attributes.category.toString())
               .field('licence', attributes.licence.toString())
-              .field('language', attributes.language.toString())
               .field('nsfw', JSON.stringify(attributes.nsfw))
               .field('description', attributes.description)
 
+  if (attributes.language !== undefined) {
+    req.field('language', attributes.language.toString())
+  }
+
   for (let i = 0; i < attributes.tags.length; i++) {
     req.field('tags[' + i + ']', attributes.tags[i])
   }