import 'mocha'
import { expect } from 'chai'
import { pick } from '@shared/core-utils'
+import { HttpStatusCode, UserRole, Video, VideoDetails, VideoInclude, VideoPrivacy } from '@shared/models'
import {
cleanupTests,
createMultipleServers,
makeGetRequest,
PeerTubeServer,
setAccessTokensToServers,
+ setDefaultAccountAvatar,
setDefaultVideoChannel,
waitJobs
-} from '@shared/extra-utils'
-import { HttpStatusCode, UserRole, Video, VideoDetails, VideoInclude, VideoPrivacy } from '@shared/models'
+} from '@shared/server-commands'
describe('Test videos filter', function () {
let servers: PeerTubeServer[]
await setAccessTokensToServers(servers)
await setDefaultVideoChannel(servers)
+ await setDefaultAccountAvatar(servers)
for (const server of servers) {
const moderator = { username: 'moderator', password: 'my super password' }
server: PeerTubeServer
path: string
isLocal?: boolean
+ hasWebtorrentFiles?: boolean
+ hasHLSFiles?: boolean
include?: VideoInclude
+ privacyOneOf?: VideoPrivacy[]
category?: number
tagsAllOf?: string[]
token?: string
path: options.path,
token: options.token ?? options.server.accessToken,
query: {
- ...pick(options, [ 'isLocal', 'include', 'category', 'tagsAllOf' ]),
+ ...pick(options, [ 'isLocal', 'include', 'category', 'tagsAllOf', 'hasWebtorrentFiles', 'hasHLSFiles', 'privacyOneOf' ]),
sort: 'createdAt'
},
server: PeerTubeServer
isLocal?: boolean
include?: VideoInclude
+ privacyOneOf?: VideoPrivacy[]
token?: string
expectedStatus?: HttpStatusCode
}) {
server,
token,
isLocal: true,
- include: VideoInclude.HIDDEN_PRIVACY
+ privacyOneOf: [ VideoPrivacy.UNLISTED, VideoPrivacy.PUBLIC, VideoPrivacy.PRIVATE ]
})
for (const names of namesResults) {
const [ channelVideos, accountVideos, videos, searchVideos ] = await getVideosNames({
server,
token,
- include: VideoInclude.HIDDEN_PRIVACY
+ privacyOneOf: [ VideoPrivacy.UNLISTED, VideoPrivacy.PUBLIC, VideoPrivacy.PRIVATE ]
})
expect(channelVideos).to.have.lengthOf(3)
for (const path of paths) {
{
-
const videos = await listVideos({ server: servers[0], path, tagsAllOf: [ 'tag1', 'tag2' ] })
expect(videos).to.have.lengthOf(1)
expect(videos[0].name).to.equal('tag filter')
-
}
{
}
}
})
+
+ it('Should filter by HLS or WebTorrent files', async function () {
+ this.timeout(360000)
+
+ const finderFactory = (name: string) => (videos: Video[]) => videos.some(v => v.name === name)
+
+ await servers[0].config.enableTranscoding(true, false)
+ await servers[0].videos.upload({ attributes: { name: 'webtorrent video' } })
+ const hasWebtorrent = finderFactory('webtorrent video')
+
+ await waitJobs(servers)
+
+ await servers[0].config.enableTranscoding(false, true)
+ await servers[0].videos.upload({ attributes: { name: 'hls video' } })
+ const hasHLS = finderFactory('hls video')
+
+ await waitJobs(servers)
+
+ await servers[0].config.enableTranscoding(true, true)
+ await servers[0].videos.upload({ attributes: { name: 'hls and webtorrent video' } })
+ const hasBoth = finderFactory('hls and webtorrent video')
+
+ await waitJobs(servers)
+
+ for (const path of paths) {
+ {
+ const videos = await listVideos({ server: servers[0], path, hasWebtorrentFiles: true })
+
+ expect(hasWebtorrent(videos)).to.be.true
+ expect(hasHLS(videos)).to.be.false
+ expect(hasBoth(videos)).to.be.true
+ }
+
+ {
+ const videos = await listVideos({ server: servers[0], path, hasWebtorrentFiles: false })
+
+ expect(hasWebtorrent(videos)).to.be.false
+ expect(hasHLS(videos)).to.be.true
+ expect(hasBoth(videos)).to.be.false
+ }
+
+ {
+ const videos = await listVideos({ server: servers[0], path, hasHLSFiles: true })
+
+ expect(hasWebtorrent(videos)).to.be.false
+ expect(hasHLS(videos)).to.be.true
+ expect(hasBoth(videos)).to.be.true
+ }
+
+ {
+ const videos = await listVideos({ server: servers[0], path, hasHLSFiles: false })
+
+ expect(hasWebtorrent(videos)).to.be.true
+ expect(hasHLS(videos)).to.be.false
+ expect(hasBoth(videos)).to.be.false
+ }
+
+ {
+ const videos = await listVideos({ server: servers[0], path, hasHLSFiles: false, hasWebtorrentFiles: false })
+
+ expect(hasWebtorrent(videos)).to.be.false
+ expect(hasHLS(videos)).to.be.false
+ expect(hasBoth(videos)).to.be.false
+ }
+
+ {
+ const videos = await listVideos({ server: servers[0], path, hasHLSFiles: true, hasWebtorrentFiles: true })
+
+ expect(hasWebtorrent(videos)).to.be.false
+ expect(hasHLS(videos)).to.be.false
+ expect(hasBoth(videos)).to.be.true
+ }
+ }
+ })
})
after(async function () {