import { makeGetRequest } from './requests'
import { readFilePromise } from './miscs'
import { ServerInfo } from './servers'
+import { getMyUserInformation } from './users'
+import { VideoPrivacy } from '../../../shared'
type VideoAttributes = {
name?: string
nsfw?: boolean
description?: string
tags?: string[]
+ channelId?: number
+ privacy?: VideoPrivacy
fixture?: string
}
return makeGetRequest(url, path)
}
-function getAllVideosListBy (url: string) {
- const path = '/api/v1/videos'
+function getVideoPrivacies (url: string) {
+ const path = '/api/v1/videos/privacies'
+
+ return makeGetRequest(url, path)
+}
+
+function getVideo (url: string, id: number | string, expectedStatus = 200) {
+ const path = '/api/v1/videos/' + id
return request(url)
.get(path)
- .query({ sort: 'createdAt' })
- .query({ start: 0 })
- .query({ count: 10000 })
.set('Accept', 'application/json')
- .expect(200)
- .expect('Content-Type', /json/)
+ .expect(expectedStatus)
+}
+
+function viewVideo (url: string, id: number | string, expectedStatus = 204) {
+ const path = '/api/v1/videos/' + id + '/views'
+
+ return request(url)
+ .post(path)
+ .set('Accept', 'application/json')
+ .expect(expectedStatus)
}
-function getVideo (url: string, id: number | string) {
+function getVideoWithToken (url: string, token: string, id: number | string, expectedStatus = 200) {
const path = '/api/v1/videos/' + id
return request(url)
- .get(path)
- .set('Accept', 'application/json')
- .expect(200)
- .expect('Content-Type', /json/)
+ .get(path)
+ .set('Authorization', 'Bearer ' + token)
+ .set('Accept', 'application/json')
+ .expect(expectedStatus)
+}
+
+function getVideoDescription (url: string, descriptionPath: string) {
+ return request(url)
+ .get(descriptionPath)
+ .set('Accept', 'application/json')
+ .expect(200)
+ .expect('Content-Type', /json/)
}
function getVideosList (url: string) {
.expect('Content-Type', /json/)
}
+function getMyVideos (url: string, accessToken: string, start: number, count: number, sort?: string) {
+ const path = '/api/v1/users/me/videos'
+
+ const req = request(url)
+ .get(path)
+ .query({ start: start })
+ .query({ count: count })
+
+ if (sort) req.query({ sort })
+
+ return req.set('Accept', 'application/json')
+ .set('Authorization', 'Bearer ' + accessToken)
+ .expect(200)
+ .expect('Content-Type', /json/)
+}
+
function getVideosListPagination (url: string, start: number, count: number, sort?: string) {
const path = '/api/v1/videos'
}
}
-function uploadVideo (url: string, accessToken: string, videoAttributesArg: VideoAttributes, specialStatus = 204) {
- const path = '/api/v1/videos'
+async function uploadVideo (url: string, accessToken: string, videoAttributesArg: VideoAttributes, specialStatus = 204) {
+ const path = '/api/v1/videos/upload'
+ let defaultChannelId = '1'
+
+ try {
+ const res = await getMyUserInformation(url, accessToken)
+ defaultChannelId = res.body.videoChannels[0].id
+ } catch (e) { /* empty */ }
// Default attributes
let attributes = {
category: 5,
licence: 4,
language: 3,
+ channelId: defaultChannelId,
nsfw: true,
description: 'my super description',
tags: [ 'tag' ],
+ privacy: VideoPrivacy.PUBLIC,
fixture: 'video_short.webm'
}
attributes = Object.assign(attributes, videoAttributesArg)
.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)
+ .field('privacy', attributes.privacy.toString())
+ .field('channelId', attributes.channelId)
+
+ 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])
}
- let filepath = ''
+ let filePath = ''
if (isAbsolute(attributes.fixture)) {
- filepath = attributes.fixture
+ filePath = attributes.fixture
} else {
- filepath = join(__dirname, '..', 'api', 'fixtures', attributes.fixture)
+ filePath = join(__dirname, '..', 'api', 'fixtures', attributes.fixture)
}
- return req.attach('videofile', filepath)
+ return req.attach('videofile', filePath)
.expect(specialStatus)
}
if (attributes.nsfw) body['nsfw'] = attributes.nsfw
if (attributes.description) body['description'] = attributes.description
if (attributes.tags) body['tags'] = attributes.tags
+ if (attributes.privacy) body['privacy'] = attributes.privacy
return request(url)
.put(path)
.expect(specialStatus)
}
-function parseTorrentVideo (server: ServerInfo, videoUUID: string) {
+function parseTorrentVideo (server: ServerInfo, videoUUID: string, resolution: number) {
return new Promise<any>((res, rej) => {
- const torrentPath = join(__dirname, '..', '..', '..', 'test' + server.serverNumber, 'torrents', videoUUID + '.torrent')
+ const torrentName = videoUUID + '-' + resolution + '.torrent'
+ const torrentPath = join(__dirname, '..', '..', '..', 'test' + server.serverNumber, 'torrents', torrentName)
readFile(torrentPath, (err, data) => {
if (err) return rej(err)
// ---------------------------------------------------------------------------
export {
+ getVideoDescription,
getVideoCategories,
getVideoLicences,
+ getVideoPrivacies,
getVideoLanguages,
- getAllVideosListBy,
+ getMyVideos,
getVideo,
+ getVideoWithToken,
getVideosList,
getVideosListPagination,
getVideosListSort,
uploadVideo,
updateVideo,
rateVideo,
+ viewVideo,
parseTorrentVideo
}