/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ import 'mocha' import { HttpStatusCode, UserRole } from '@shared/models' import { cleanupTests, createMultipleServers, doubleFollow, PeerTubeServer, setAccessTokensToServers, waitJobs } from '@shared/server-commands' describe('Test transcoding API validators', function () { let servers: PeerTubeServer[] let userToken: string let moderatorToken: string let remoteId: string let validId: string // --------------------------------------------------------------- before(async function () { this.timeout(120000) servers = await createMultipleServers(2) await setAccessTokensToServers(servers) await doubleFollow(servers[0], servers[1]) userToken = await servers[0].users.generateUserAndToken('user', UserRole.USER) moderatorToken = await servers[0].users.generateUserAndToken('moderator', UserRole.MODERATOR) { const { uuid } = await servers[1].videos.quickUpload({ name: 'remote video' }) remoteId = uuid } { const { uuid } = await servers[0].videos.quickUpload({ name: 'both 1' }) validId = uuid } await waitJobs(servers) await servers[0].config.enableTranscoding() }) it('Should not run transcoding of a unknown video', async function () { await servers[0].videos.runTranscoding({ videoId: 404, transcodingType: 'hls', expectedStatus: HttpStatusCode.NOT_FOUND_404 }) await servers[0].videos.runTranscoding({ videoId: 404, transcodingType: 'webtorrent', expectedStatus: HttpStatusCode.NOT_FOUND_404 }) }) it('Should not run transcoding of a remote video', async function () { const expectedStatus = HttpStatusCode.BAD_REQUEST_400 await servers[0].videos.runTranscoding({ videoId: remoteId, transcodingType: 'hls', expectedStatus }) await servers[0].videos.runTranscoding({ videoId: remoteId, transcodingType: 'webtorrent', expectedStatus }) }) it('Should not run transcoding by a non admin user', async function () { const expectedStatus = HttpStatusCode.FORBIDDEN_403 await servers[0].videos.runTranscoding({ videoId: validId, transcodingType: 'hls', token: userToken, expectedStatus }) await servers[0].videos.runTranscoding({ videoId: validId, transcodingType: 'webtorrent', token: moderatorToken, expectedStatus }) }) it('Should not run transcoding without transcoding type', async function () { await servers[0].videos.runTranscoding({ videoId: validId, transcodingType: undefined, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) }) it('Should not run transcoding with an incorrect transcoding type', async function () { const expectedStatus = HttpStatusCode.BAD_REQUEST_400 await servers[0].videos.runTranscoding({ videoId: validId, transcodingType: 'toto' as any, expectedStatus }) }) it('Should not run transcoding if the instance disabled it', async function () { const expectedStatus = HttpStatusCode.BAD_REQUEST_400 await servers[0].config.disableTranscoding() await servers[0].videos.runTranscoding({ videoId: validId, transcodingType: 'hls', expectedStatus }) await servers[0].videos.runTranscoding({ videoId: validId, transcodingType: 'webtorrent', expectedStatus }) }) it('Should run transcoding', async function () { this.timeout(120_000) await servers[0].config.enableTranscoding() await servers[0].videos.runTranscoding({ videoId: validId, transcodingType: 'hls' }) await waitJobs(servers) await servers[0].videos.runTranscoding({ videoId: validId, transcodingType: 'webtorrent' }) await waitJobs(servers) }) it('Should not run transcoding on a video that is already being transcoded', async function () { await servers[0].videos.runTranscoding({ videoId: validId, transcodingType: 'webtorrent' }) const expectedStatus = HttpStatusCode.CONFLICT_409 await servers[0].videos.runTranscoding({ videoId: validId, transcodingType: 'webtorrent', expectedStatus }) }) after(async function () { await cleanupTests(servers) }) })