+
+ 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
+ }
+ }
+ })
+
+ it('Should filter already watched videos by the user', async function () {
+ const { id } = await servers[0].videos.upload({ attributes: { name: 'video for history' } })
+
+ for (const path of paths) {
+ const videos = await listVideos({ server: servers[0], path, isLocal: true, excludeAlreadyWatched: true })
+ const foundVideo = videos.find(video => video.id === id)
+
+ expect(foundVideo).to.not.be.undefined
+ }
+ await servers[0].views.view({ id, token: servers[0].accessToken })
+
+ for (const path of paths) {
+ const videos = await listVideos({ server: servers[0], path, excludeAlreadyWatched: true })
+ const foundVideo = videos.find(video => video.id === id)
+
+ expect(foundVideo).to.be.undefined
+ }
+ })