mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			185 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
import * as request from 'supertest'
 | 
						|
import { buildAbsoluteFixturePath, root } from '../miscs/miscs'
 | 
						|
import { isAbsolute, join } from 'path'
 | 
						|
import { parse } from 'url'
 | 
						|
 | 
						|
function get4KFileUrl () {
 | 
						|
  return 'https://download.cpy.re/peertube/4k_file.txt'
 | 
						|
}
 | 
						|
 | 
						|
function makeRawRequest (url: string, statusCodeExpected?: number, range?: string) {
 | 
						|
  const { host, protocol, pathname } = parse(url)
 | 
						|
 | 
						|
  return makeGetRequest({ url: `${protocol}//${host}`, path: pathname, statusCodeExpected, range })
 | 
						|
}
 | 
						|
 | 
						|
function makeGetRequest (options: {
 | 
						|
  url: string,
 | 
						|
  path?: string,
 | 
						|
  query?: any,
 | 
						|
  token?: string,
 | 
						|
  statusCodeExpected?: number,
 | 
						|
  contentType?: string,
 | 
						|
  range?: string
 | 
						|
}) {
 | 
						|
  if (!options.statusCodeExpected) options.statusCodeExpected = 400
 | 
						|
  if (options.contentType === undefined) options.contentType = 'application/json'
 | 
						|
 | 
						|
  const req = request(options.url).get(options.path)
 | 
						|
 | 
						|
  if (options.contentType) req.set('Accept', options.contentType)
 | 
						|
  if (options.token) req.set('Authorization', 'Bearer ' + options.token)
 | 
						|
  if (options.query) req.query(options.query)
 | 
						|
  if (options.range) req.set('Range', options.range)
 | 
						|
 | 
						|
  return req.expect(options.statusCodeExpected)
 | 
						|
}
 | 
						|
 | 
						|
function makeDeleteRequest (options: {
 | 
						|
  url: string,
 | 
						|
  path: string,
 | 
						|
  token?: string,
 | 
						|
  statusCodeExpected?: number
 | 
						|
}) {
 | 
						|
  if (!options.statusCodeExpected) options.statusCodeExpected = 400
 | 
						|
 | 
						|
  const req = request(options.url)
 | 
						|
    .delete(options.path)
 | 
						|
    .set('Accept', 'application/json')
 | 
						|
 | 
						|
  if (options.token) req.set('Authorization', 'Bearer ' + options.token)
 | 
						|
 | 
						|
  return req.expect(options.statusCodeExpected)
 | 
						|
}
 | 
						|
 | 
						|
function makeUploadRequest (options: {
 | 
						|
  url: string,
 | 
						|
  method?: 'POST' | 'PUT',
 | 
						|
  path: string,
 | 
						|
  token?: string,
 | 
						|
  fields: { [ fieldName: string ]: any },
 | 
						|
  attaches: { [ attachName: string ]: any | any[] },
 | 
						|
  statusCodeExpected?: number
 | 
						|
}) {
 | 
						|
  if (!options.statusCodeExpected) options.statusCodeExpected = 400
 | 
						|
 | 
						|
  let req: request.Test
 | 
						|
  if (options.method === 'PUT') {
 | 
						|
    req = request(options.url).put(options.path)
 | 
						|
  } else {
 | 
						|
    req = request(options.url).post(options.path)
 | 
						|
  }
 | 
						|
 | 
						|
  req.set('Accept', 'application/json')
 | 
						|
 | 
						|
  if (options.token) req.set('Authorization', 'Bearer ' + options.token)
 | 
						|
 | 
						|
  Object.keys(options.fields).forEach(field => {
 | 
						|
    const value = options.fields[field]
 | 
						|
 | 
						|
    if (value === undefined) return
 | 
						|
 | 
						|
    if (Array.isArray(value)) {
 | 
						|
      for (let i = 0; i < value.length; i++) {
 | 
						|
        req.field(field + '[' + i + ']', value[i])
 | 
						|
      }
 | 
						|
    } else {
 | 
						|
      req.field(field, value)
 | 
						|
    }
 | 
						|
  })
 | 
						|
 | 
						|
  Object.keys(options.attaches).forEach(attach => {
 | 
						|
    const value = options.attaches[attach]
 | 
						|
    if (Array.isArray(value)) {
 | 
						|
      req.attach(attach, buildAbsoluteFixturePath(value[0]), value[1])
 | 
						|
    } else {
 | 
						|
      req.attach(attach, buildAbsoluteFixturePath(value))
 | 
						|
    }
 | 
						|
  })
 | 
						|
 | 
						|
  return req.expect(options.statusCodeExpected)
 | 
						|
}
 | 
						|
 | 
						|
function makePostBodyRequest (options: {
 | 
						|
  url: string,
 | 
						|
  path: string,
 | 
						|
  token?: string,
 | 
						|
  fields?: { [ fieldName: string ]: any },
 | 
						|
  statusCodeExpected?: number
 | 
						|
}) {
 | 
						|
  if (!options.fields) options.fields = {}
 | 
						|
  if (!options.statusCodeExpected) options.statusCodeExpected = 400
 | 
						|
 | 
						|
  const req = request(options.url)
 | 
						|
                .post(options.path)
 | 
						|
                .set('Accept', 'application/json')
 | 
						|
 | 
						|
  if (options.token) req.set('Authorization', 'Bearer ' + options.token)
 | 
						|
 | 
						|
  return req.send(options.fields)
 | 
						|
            .expect(options.statusCodeExpected)
 | 
						|
}
 | 
						|
 | 
						|
function makePutBodyRequest (options: {
 | 
						|
  url: string,
 | 
						|
  path: string,
 | 
						|
  token?: string,
 | 
						|
  fields: { [ fieldName: string ]: any },
 | 
						|
  statusCodeExpected?: number
 | 
						|
}) {
 | 
						|
  if (!options.statusCodeExpected) options.statusCodeExpected = 400
 | 
						|
 | 
						|
  const req = request(options.url)
 | 
						|
                .put(options.path)
 | 
						|
                .set('Accept', 'application/json')
 | 
						|
 | 
						|
  if (options.token) req.set('Authorization', 'Bearer ' + options.token)
 | 
						|
 | 
						|
  return req.send(options.fields)
 | 
						|
            .expect(options.statusCodeExpected)
 | 
						|
}
 | 
						|
 | 
						|
function makeHTMLRequest (url: string, path: string) {
 | 
						|
  return request(url)
 | 
						|
    .get(path)
 | 
						|
    .set('Accept', 'text/html')
 | 
						|
    .expect(200)
 | 
						|
}
 | 
						|
 | 
						|
function updateAvatarRequest (options: {
 | 
						|
  url: string,
 | 
						|
  path: string,
 | 
						|
  accessToken: string,
 | 
						|
  fixture: string
 | 
						|
}) {
 | 
						|
  let filePath = ''
 | 
						|
  if (isAbsolute(options.fixture)) {
 | 
						|
    filePath = options.fixture
 | 
						|
  } else {
 | 
						|
    filePath = join(root(), 'server', 'tests', 'fixtures', options.fixture)
 | 
						|
  }
 | 
						|
 | 
						|
  return makeUploadRequest({
 | 
						|
    url: options.url,
 | 
						|
    path: options.path,
 | 
						|
    token: options.accessToken,
 | 
						|
    fields: {},
 | 
						|
    attaches: { avatarfile: filePath },
 | 
						|
    statusCodeExpected: 200
 | 
						|
  })
 | 
						|
}
 | 
						|
 | 
						|
// ---------------------------------------------------------------------------
 | 
						|
 | 
						|
export {
 | 
						|
  get4KFileUrl,
 | 
						|
  makeHTMLRequest,
 | 
						|
  makeGetRequest,
 | 
						|
  makeUploadRequest,
 | 
						|
  makePostBodyRequest,
 | 
						|
  makePutBodyRequest,
 | 
						|
  makeDeleteRequest,
 | 
						|
  makeRawRequest,
 | 
						|
  updateAvatarRequest
 | 
						|
}
 |