aboutsummaryrefslogblamecommitdiffhomepage
path: root/server/tests/utils/videos.js
blob: 6e7aabc5df921be2a84d7675a4221fceb6e60373 (plain) (tree)
1
2
3
4
5
6
7
8
9






                                    
                     
                   
                    









                            
              

              



                                                               










                                          










                                        










                                         




                                        
                                 






























                                      





                                                                 

                               










                                       














































                                                            





                                                                                  

                               











                                              



































                                                                                                                  
                                                                                 






                               



                           
               
                
               





                                                            



                                                            

                                                     
                                                   
                                                     
                                             
                                                           
 

                                                    


                   

                                                 
          
                                                                                     






                                   
                                                                             





                                     
                 
 






                                                                       
 






                                                  

 
















                                                                       


                                                                              
'use strict'

const fs = require('fs')
const pathUtils = require('path')
const request = require('supertest')

const videosUtils = {
  getVideoCategories,
  getVideoLicences,
  getVideoLanguages,
  getAllVideosListBy,
  getVideo,
  getVideosList,
  getVideosListPagination,
  getVideosListSort,
  removeVideo,
  searchVideo,
  searchVideoWithPagination,
  searchVideoWithSort,
  testVideoImage,
  uploadVideo,
  updateVideo,
  rateVideo
}

// ---------------------- Export functions --------------------

function getVideoCategories (url, end) {
  const path = '/api/v1/videos/categories'

  request(url)
    .get(path)
    .set('Accept', 'application/json')
    .expect(200)
    .expect('Content-Type', /json/)
    .end(end)
}

function getVideoLicences (url, end) {
  const path = '/api/v1/videos/licences'

  request(url)
    .get(path)
    .set('Accept', 'application/json')
    .expect(200)
    .expect('Content-Type', /json/)
    .end(end)
}

function getVideoLanguages (url, end) {
  const path = '/api/v1/videos/languages'

  request(url)
    .get(path)
    .set('Accept', 'application/json')
    .expect(200)
    .expect('Content-Type', /json/)
    .end(end)
}

function getAllVideosListBy (url, end) {
  const path = '/api/v1/videos'

  request(url)
    .get(path)
    .query({ sort: 'createdAt' })
    .query({ start: 0 })
    .query({ count: 10000 })
    .set('Accept', 'application/json')
    .expect(200)
    .expect('Content-Type', /json/)
    .end(end)
}

function getVideo (url, id, end) {
  const path = '/api/v1/videos/' + id

  request(url)
    .get(path)
    .set('Accept', 'application/json')
    .expect(200)
    .expect('Content-Type', /json/)
    .end(end)
}

function getVideosList (url, end) {
  const path = '/api/v1/videos'

  request(url)
    .get(path)
    .query({ sort: 'name' })
    .set('Accept', 'application/json')
    .expect(200)
    .expect('Content-Type', /json/)
    .end(end)
}

function getVideosListPagination (url, start, count, sort, end) {
  if (!end) {
    end = sort
    sort = null
  }

  const path = '/api/v1/videos'

  const req = request(url)
              .get(path)
              .query({ start: start })
              .query({ count: count })

  if (sort) req.query({ sort })

  req.set('Accept', 'application/json')
     .expect(200)
     .expect('Content-Type', /json/)
     .end(end)
}

function getVideosListSort (url, sort, end) {
  const path = '/api/v1/videos'

  request(url)
    .get(path)
    .query({ sort: sort })
    .set('Accept', 'application/json')
    .expect(200)
    .expect('Content-Type', /json/)
    .end(end)
}

function removeVideo (url, token, id, expectedStatus, end) {
  if (!end) {
    end = expectedStatus
    expectedStatus = 204
  }

  const path = '/api/v1/videos'

  request(url)
    .delete(path + '/' + id)
    .set('Accept', 'application/json')
    .set('Authorization', 'Bearer ' + token)
    .expect(expectedStatus)
    .end(end)
}

function searchVideo (url, search, field, end) {
  if (!end) {
    end = field
    field = null
  }

  const path = '/api/v1/videos'
  const req = request(url)
              .get(path + '/search/' + search)
              .set('Accept', 'application/json')

  if (field) req.query({ field: field })
  req.expect(200)
     .expect('Content-Type', /json/)
     .end(end)
}

function searchVideoWithPagination (url, search, field, start, count, sort, end) {
  if (!end) {
    end = sort
    sort = null
  }

  const path = '/api/v1/videos'

  const req = request(url)
              .get(path + '/search/' + search)
              .query({ start: start })
              .query({ count: count })
              .query({ field: field })

  if (sort) req.query({ sort })

  req.set('Accept', 'application/json')
     .expect(200)
     .expect('Content-Type', /json/)
     .end(end)
}

function searchVideoWithSort (url, search, sort, end) {
  const path = '/api/v1/videos'

  request(url)
    .get(path + '/search/' + search)
    .query({ sort: sort })
    .set('Accept', 'application/json')
    .expect(200)
    .expect('Content-Type', /json/)
    .end(end)
}

function testVideoImage (url, videoName, imagePath, callback) {
  // Don't test images if the node env is not set
  // Because we need a special ffmpeg version for this test
  if (process.env.NODE_TEST_IMAGE) {
    request(url)
      .get(imagePath)
      .expect(200)
      .end(function (err, res) {
        if (err) return callback(err)

        fs.readFile(pathUtils.join(__dirname, '..', 'api', 'fixtures', videoName + '.jpg'), function (err, data) {
          if (err) return callback(err)

          callback(null, data.equals(res.body))
        })
      })
  } else {
    console.log('Do not test images. Enable it by setting NODE_TEST_IMAGE env variable.')
    callback(null, true)
  }
}

function uploadVideo (url, accessToken, videoAttributesArg, specialStatus, end) {
  if (!end) {
    end = specialStatus
    specialStatus = 204
  }

  const path = '/api/v1/videos'

  // Default attributes
  let attributes = {
    name: 'my super video',
    category: 5,
    licence: 4,
    language: 3,
    nsfw: true,
    description: 'my super description',
    tags: [ 'tag' ],
    fixture: 'video_short.webm'
  }
  attributes = Object.assign(attributes, videoAttributesArg)

  const req = request(url)
              .post(path)
              .set('Accept', 'application/json')
              .set('Authorization', 'Bearer ' + accessToken)
              .field('name', attributes.name)
              .field('category', attributes.category)
              .field('licence', attributes.licence)
              .field('language', attributes.language)
              .field('nsfw', attributes.nsfw)
              .field('description', attributes.description)

  for (let i = 0; i < attributes.tags.length; i++) {
    req.field('tags[' + i + ']', attributes.tags[i])
  }

  let filepath = ''
  if (pathUtils.isAbsolute(attributes.fixture)) {
    filepath = attributes.fixture
  } else {
    filepath = pathUtils.join(__dirname, '..', 'api', 'fixtures', attributes.fixture)
  }

  req.attach('videofile', filepath)
     .expect(specialStatus)
     .end(end)
}

function updateVideo (url, accessToken, id, attributes, specialStatus, end) {
  if (!end) {
    end = specialStatus
    specialStatus = 204
  }

  const path = '/api/v1/videos/' + id
  const body = {}

  if (attributes.name) body.name = attributes.name
  if (attributes.category) body.category = attributes.category
  if (attributes.licence) body.licence = attributes.licence
  if (attributes.language) body.language = attributes.language
  if (attributes.nsfw) body.nsfw = attributes.nsfw
  if (attributes.description) body.description = attributes.description
  if (attributes.tags) body.tags = attributes.tags

  request(url)
    .put(path)
    .send(body)
    .set('Accept', 'application/json')
    .set('Authorization', 'Bearer ' + accessToken)
    .expect(specialStatus)
    .end(end)
}

function rateVideo (url, accessToken, id, rating, specialStatus, end) {
  if (!end) {
    end = specialStatus
    specialStatus = 204
  }

  const path = '/api/v1/videos/' + id + '/rate'

  request(url)
    .put(path)
    .set('Accept', 'application/json')
    .set('Authorization', 'Bearer ' + accessToken)
    .send({ rating })
    .expect(specialStatus)
    .end(end)
}

// ---------------------------------------------------------------------------

module.exports = videosUtils