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