From 792dbaf07f83fbe3f1d209cd9edf190442c7d2f3 Mon Sep 17 00:00:00 2001
From: Green-Star <Green-Star@users.noreply.github.com>
Date: Fri, 22 Sep 2017 09:13:43 +0200
Subject: Handle blacklist (#84)

* Client: Add list blacklist feature

* Server: Add list blacklist feature

* Client: Add videoId column

* Server: Add some video infos in the REST api

* Client: Add video information in the blacklist list

* Fix sortable columns :)

* Client: Add removeFromBlacklist feature

* Server: Add removeFromBlacklist feature

* Move to TypeScript

* Move to TypeScript and Promises

* Server: Fix blacklist list sort

* Server: Fetch videos informations

* Use common shared interface for client and server

* Add check-params remove blacklisted video tests

* Add check-params list blacklisted videos tests

* Add list blacklist tests

* Add remove from blacklist tests

* Add video blacklist management tests

* Fix rebase onto develop issues

* Server: Add sort on blacklist id column

* Server: Add blacklists library

* Add blacklist id sort test

* Add check-params tests for blacklist list pagination, count and sort

* Fix coding style

* Increase Remote API tests timeout

* Increase Request scheduler API tests timeout

* Fix typo

* Increase video transcoding API tests timeout

* Move tests to Typescript

* Use lodash orderBy method

* Fix typos

* Client: Remove optional tests in blacklist model attributes

* Move blacklist routes from 'blacklists' to 'blacklist'

* CLient: Remove blacklist-list.component.scss

* Rename 'blacklists' files to 'blacklist'

* Use only BlacklistedVideo interface

* Server: Use getFormattedObjects method in listBlacklist method

* Client: Use new coding style

* Server: Use new sort validator methods

* Server: Use new checkParams methods

* Client: Fix sortable columns
---
 server/tests/api/check-params/index.ts             |   2 +-
 server/tests/api/check-params/remotes.ts           |   2 +-
 .../tests/api/check-params/request-schedulers.ts   |   2 +-
 server/tests/api/check-params/video-blacklist.ts   | 195 +++++++++++++++++++++
 server/tests/api/check-params/video-blacklists.ts  |  90 ----------
 5 files changed, 198 insertions(+), 93 deletions(-)
 create mode 100644 server/tests/api/check-params/video-blacklist.ts
 delete mode 100644 server/tests/api/check-params/video-blacklists.ts

(limited to 'server/tests/api/check-params')

diff --git a/server/tests/api/check-params/index.ts b/server/tests/api/check-params/index.ts
index 97f2a19d7..399a05bc3 100644
--- a/server/tests/api/check-params/index.ts
+++ b/server/tests/api/check-params/index.ts
@@ -5,4 +5,4 @@ import './users'
 import './request-schedulers'
 import './videos'
 import './video-abuses'
-import './video-blacklists'
+import './video-blacklist'
diff --git a/server/tests/api/check-params/remotes.ts b/server/tests/api/check-params/remotes.ts
index b36f1c08b..9456ae665 100644
--- a/server/tests/api/check-params/remotes.ts
+++ b/server/tests/api/check-params/remotes.ts
@@ -14,7 +14,7 @@ describe('Test remote videos API validators', function () {
   // ---------------------------------------------------------------
 
   before(async function () {
-    this.timeout(20000)
+    this.timeout(60000)
 
     await flushTests()
 
diff --git a/server/tests/api/check-params/request-schedulers.ts b/server/tests/api/check-params/request-schedulers.ts
index c39f5947b..01a54ffa1 100644
--- a/server/tests/api/check-params/request-schedulers.ts
+++ b/server/tests/api/check-params/request-schedulers.ts
@@ -20,7 +20,7 @@ describe('Test request schedulers stats API validators', function () {
   // ---------------------------------------------------------------
 
   before(async function () {
-    this.timeout(20000)
+    this.timeout(60000)
 
     await flushTests()
 
diff --git a/server/tests/api/check-params/video-blacklist.ts b/server/tests/api/check-params/video-blacklist.ts
new file mode 100644
index 000000000..80e6f8011
--- /dev/null
+++ b/server/tests/api/check-params/video-blacklist.ts
@@ -0,0 +1,195 @@
+/* tslint:disable:no-unused-expression */
+
+import 'mocha'
+import * as request from 'supertest'
+
+import {
+  ServerInfo,
+  flushTests,
+  runServer,
+  uploadVideo,
+  getVideosList,
+  createUser,
+  setAccessTokensToServers,
+  killallServers,
+  makePostBodyRequest,
+  getUserAccessToken
+} from '../../utils'
+
+describe('Test video blacklist API validators', function () {
+  let server: ServerInfo
+  let userAccessToken = ''
+
+  // ---------------------------------------------------------------
+
+  before(async function () {
+    this.timeout(120000)
+
+    await flushTests()
+
+    server = await runServer(1)
+
+    await setAccessTokensToServers([ server ])
+
+    const username = 'user1'
+    const password = 'my super password'
+    await createUser(server.url, server.accessToken, username, password)
+    userAccessToken = await getUserAccessToken(server, { username, password })
+
+    // Upload a video
+    const videoAttributes = {}
+    await uploadVideo(server.url, server.accessToken, videoAttributes)
+
+    const res = await getVideosList(server.url)
+
+    const videos = res.body.data
+    server.video = videos[0]
+  })
+
+  describe('When adding a video in blacklist', function () {
+    const basePath = '/api/v1/videos/'
+
+    it('Should fail with nothing', async function () {
+      const path = basePath + server.video + '/blacklist'
+      const fields = {}
+      await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
+    })
+
+    it('Should fail with a wrong video', async function () {
+      const wrongPath = '/api/v1/videos/blabla/blacklist'
+      const fields = {}
+      await makePostBodyRequest({ url: server.url, path: wrongPath, token: server.accessToken, fields })
+    })
+
+    it('Should fail with a non authenticated user', async function () {
+      const fields = {}
+      const path = basePath + server.video + '/blacklist'
+      await makePostBodyRequest({ url: server.url, path, token: 'hello', fields, statusCodeExpected: 401 })
+    })
+
+    it('Should fail with a non admin user', async function () {
+      const fields = {}
+      const path = basePath + server.video + '/blacklist'
+      await makePostBodyRequest({ url: server.url, path, token: userAccessToken, fields, statusCodeExpected: 403 })
+    })
+
+    it('Should fail with a local video', async function () {
+      const fields = {}
+      const path = basePath + server.video.id + '/blacklist'
+      await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields, statusCodeExpected: 403 })
+    })
+  })
+
+  describe('When removing a video in blacklist', function () {
+    const basePath = '/api/v1/blacklist/'
+
+    it('Should fail with a non authenticated user', async function () {
+      const path = basePath + server.video.id
+
+      await request(server.url)
+              .delete(path)
+              .set('Authorization', 'Bearer ' + 'fake token')
+              .set('Accept', 'application/json')
+              .expect(401)
+    })
+
+    it('Should fail with a non admin user', async function () {
+      const path = basePath + server.video.id
+
+      await request(server.url)
+              .delete(path)
+              .set('Authorization', 'Bearer ' + userAccessToken)
+              .set('Accept', 'application/json')
+              .expect(403)
+    })
+
+    it('Should fail with an incorrect id', async function () {
+      const path = basePath + 'foobar'
+
+      await request(server.url)
+              .delete(path)
+              .set('Authorization', 'Bearer ' + server.accessToken)
+              .set('Accept', 'application/json')
+              .expect(400)
+    })
+
+    it('Should fail with a not blacklisted video', async function () {
+      // The video was not added to the blacklist so it should fail
+      const path = basePath + server.video.id
+
+      await request(server.url)
+              .delete(path)
+              .set('Authorization', 'Bearer ' + server.accessToken)
+              .set('Accept', 'application/json')
+              .expect(404)
+    })
+  })
+
+  describe('When listing videos in blacklist', function () {
+    const basePath = '/api/v1/blacklist/'
+
+    it('Should fail with a non authenticated user', async function () {
+      const path = basePath
+
+      await request(server.url)
+              .get(path)
+              .query({ sort: 'createdAt' })
+              .set('Accept', 'application/json')
+              .set('Authorization', 'Bearer ' + 'fake token')
+              .expect(401)
+    })
+
+    it('Should fail with a non admin user', async function () {
+      const path = basePath
+
+      await request(server.url)
+              .get(path)
+              .query({ sort: 'createdAt' })
+              .set('Authorization', 'Bearer ' + userAccessToken)
+              .set('Accept', 'application/json')
+              .expect(403)
+    })
+
+    it('Should fail with a bad start pagination', async function () {
+      const path = basePath
+
+      await request(server.url)
+              .get(path)
+              .query({ start: 'foobar' })
+              .set('Accept', 'application/json')
+              .set('Authorization', 'Bearer ' + server.accessToken)
+              .expect(400)
+    })
+
+    it('Should fail with a bad count pagination', async function () {
+      const path = basePath
+
+      await request(server.url)
+              .get(path)
+              .query({ count: 'foobar' })
+              .set('Accept', 'application/json')
+              .set('Authorization', 'Bearer ' + server.accessToken)
+              .expect(400)
+    })
+
+    it('Should fail with an incorrect sort', async function () {
+      const path = basePath
+
+      await request(server.url)
+              .get(path)
+              .query({ sort: 'foobar' })
+              .set('Accept', 'application/json')
+              .set('Authorization', 'Bearer ' + server.accessToken)
+              .expect(400)
+    })
+  })
+
+  after(async function () {
+    killallServers([ server ])
+
+    // Keep the logs if the test failed
+    if (this['ok']) {
+      await flushTests()
+    }
+  })
+})
diff --git a/server/tests/api/check-params/video-blacklists.ts b/server/tests/api/check-params/video-blacklists.ts
deleted file mode 100644
index d0ad78ff1..000000000
--- a/server/tests/api/check-params/video-blacklists.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-/* tslint:disable:no-unused-expression */
-
-import 'mocha'
-
-import {
-  ServerInfo,
-  flushTests,
-  runServer,
-  uploadVideo,
-  getVideosList,
-  createUser,
-  setAccessTokensToServers,
-  killallServers,
-  makePostBodyRequest,
-  getUserAccessToken
-} from '../../utils'
-
-describe('Test video blacklists API validators', function () {
-  let server: ServerInfo
-  let userAccessToken = ''
-
-  // ---------------------------------------------------------------
-
-  before(async function () {
-    this.timeout(120000)
-
-    await flushTests()
-
-    server = await runServer(1)
-
-    await setAccessTokensToServers([ server ])
-
-    const username = 'user1'
-    const password = 'my super password'
-    await createUser(server.url, server.accessToken, username, password)
-    userAccessToken = await getUserAccessToken(server, { username, password })
-
-    // Upload a video
-    const videoAttributes = {}
-    await uploadVideo(server.url, server.accessToken, videoAttributes)
-
-    const res = await getVideosList(server.url)
-
-    const videos = res.body.data
-    server.video = videos[0]
-  })
-
-  describe('When adding a video in blacklist', function () {
-    const basePath = '/api/v1/videos/'
-
-    it('Should fail with nothing', async function () {
-      const path = basePath + server.video + '/blacklist'
-      const fields = {}
-      await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
-    })
-
-    it('Should fail with a wrong video', async function () {
-      const wrongPath = '/api/v1/videos/blabla/blacklist'
-      const fields = {}
-      await makePostBodyRequest({ url: server.url, path: wrongPath, token: server.accessToken, fields })
-    })
-
-    it('Should fail with a non authenticated user', async function () {
-      const fields = {}
-      const path = basePath + server.video + '/blacklist'
-      await makePostBodyRequest({ url: server.url, path, token: 'hello', fields, statusCodeExpected: 401 })
-    })
-
-    it('Should fail with a non admin user', async function () {
-      const fields = {}
-      const path = basePath + server.video + '/blacklist'
-      await makePostBodyRequest({ url: server.url, path, token: userAccessToken, fields, statusCodeExpected: 403 })
-    })
-
-    it('Should fail with a local video', async function () {
-      const fields = {}
-      const path = basePath + server.video.id + '/blacklist'
-      await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields, statusCodeExpected: 403 })
-    })
-  })
-
-  after(async function () {
-    killallServers([ server ])
-
-    // Keep the logs if the test failed
-    if (this['ok']) {
-      await flushTests()
-    }
-  })
-})
-- 
cgit v1.2.3