"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const chai_1 = require("chai");
const shared_1 = require("../../shared");
const core_utils_1 = require("../../../../shared/core-utils");
const server_commands_1 = require("../../../../shared/server-commands");
describe('Test jobs', function () {
    let servers;
    before(function () {
        return tslib_1.__awaiter(this, void 0, void 0, function* () {
            this.timeout(240000);
            servers = yield (0, server_commands_1.createMultipleServers)(2);
            yield (0, server_commands_1.setAccessTokensToServers)(servers);
            yield (0, server_commands_1.doubleFollow)(servers[0], servers[1]);
        });
    });
    it('Should create some jobs', function () {
        return tslib_1.__awaiter(this, void 0, void 0, function* () {
            this.timeout(240000);
            yield servers[1].videos.upload({ attributes: { name: 'video1' } });
            yield servers[1].videos.upload({ attributes: { name: 'video2' } });
            yield (0, server_commands_1.waitJobs)(servers);
        });
    });
    it('Should list jobs', function () {
        return tslib_1.__awaiter(this, void 0, void 0, function* () {
            const body = yield servers[1].jobs.list({ state: 'completed' });
            (0, chai_1.expect)(body.total).to.be.above(2);
            (0, chai_1.expect)(body.data).to.have.length.above(2);
        });
    });
    it('Should list jobs with sort, pagination and job type', function () {
        return tslib_1.__awaiter(this, void 0, void 0, function* () {
            {
                const body = yield servers[1].jobs.list({
                    state: 'completed',
                    start: 1,
                    count: 2,
                    sort: 'createdAt'
                });
                (0, chai_1.expect)(body.total).to.be.above(2);
                (0, chai_1.expect)(body.data).to.have.lengthOf(2);
                let job = body.data[0];
                if (job.type === 'videos-views-stats')
                    job = body.data[1];
                (0, chai_1.expect)(job.state).to.equal('completed');
                (0, chai_1.expect)((0, shared_1.dateIsValid)(job.createdAt)).to.be.true;
                (0, chai_1.expect)((0, shared_1.dateIsValid)(job.processedOn)).to.be.true;
                (0, chai_1.expect)((0, shared_1.dateIsValid)(job.finishedOn)).to.be.true;
            }
            {
                const body = yield servers[1].jobs.list({
                    state: 'completed',
                    start: 0,
                    count: 100,
                    sort: 'createdAt',
                    jobType: 'activitypub-http-broadcast'
                });
                (0, chai_1.expect)(body.total).to.be.above(2);
                for (const j of body.data) {
                    (0, chai_1.expect)(j.type).to.equal('activitypub-http-broadcast');
                }
            }
        });
    });
    it('Should list all jobs', function () {
        return tslib_1.__awaiter(this, void 0, void 0, function* () {
            const body = yield servers[1].jobs.list();
            (0, chai_1.expect)(body.total).to.be.above(2);
            const jobs = body.data;
            (0, chai_1.expect)(jobs).to.have.length.above(2);
            (0, chai_1.expect)(jobs.find(j => j.state === 'completed')).to.not.be.undefined;
        });
    });
    it('Should pause the job queue', function () {
        return tslib_1.__awaiter(this, void 0, void 0, function* () {
            this.timeout(120000);
            const { uuid } = yield servers[1].videos.upload({ attributes: { name: 'video2' } });
            yield (0, server_commands_1.waitJobs)(servers);
            yield servers[1].jobs.pauseJobQueue();
            yield servers[1].videos.runTranscoding({ videoId: uuid, transcodingType: 'hls' });
            yield (0, core_utils_1.wait)(5000);
            {
                const body = yield servers[1].jobs.list({ state: 'waiting', jobType: 'video-transcoding' });
                (0, chai_1.expect)(body.data).to.have.lengthOf(4);
            }
            {
                const body = yield servers[1].jobs.list({ state: 'waiting-children', jobType: 'video-transcoding' });
                (0, chai_1.expect)(body.data).to.have.lengthOf(1);
            }
        });
    });
    it('Should resume the job queue', function () {
        return tslib_1.__awaiter(this, void 0, void 0, function* () {
            this.timeout(120000);
            yield servers[1].jobs.resumeJobQueue();
            yield (0, server_commands_1.waitJobs)(servers);
            const body = yield servers[1].jobs.list({ state: 'waiting', jobType: 'video-transcoding' });
            (0, chai_1.expect)(body.data).to.have.lengthOf(0);
        });
    });
    after(function () {
        return tslib_1.__awaiter(this, void 0, void 0, function* () {
            yield (0, server_commands_1.cleanupTests)(servers);
        });
    });
});
//# sourceMappingURL=jobs.js.map