All files / lib/fixtures fxVideo.js

80% Statements 28/35
62.5% Branches 10/16
100% Functions 10/10
80.77% Lines 21/26

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67    1x 1x   1x   2x 2x 2x 2x   2x     2x 2x   2x         2x           2x 2x 2x   2x     2x       4x                   1x                         1x   1x  
"use strict";
 
const _ = require("lodash");
const U = require("glace-utils");
 
const CONF = require("../config");
 
const beforeCb = opts => ctx => async () => {
    ctx.isErrorHappened = false;
    ctx.lastTestErr = getLastTestErr();
    ctx.lastSessErr = _.nth(CONF.session.errors, -1);
 
    ctx.isStarted = await $.startVideo(opts);
};
 
const afterChunkCb = ctx => () => {
    Iif (ctx.isErrorHappened) return;
 
    Iif (ctx.lastTestErr !== getLastTestErr()) {
        ctx.isErrorHappened = true;
        return;
    }
 
    Iif (ctx.lastSessErr !== _.nth(CONF.session.errors, -1)) {
        ctx.isErrorHappened = true;
        return;
    }
};
 
const afterCb = opts => ctx => async () => {
    Iif (!ctx.isStarted) return;
    const videoPath = await $.stopVideo();
 
    Iif (ctx.isErrorHappened || CONF.video.save || opts.save) {
        allure.attachVideo("video", videoPath);
    } else {
        await $.removeVideo();
    }
};
 
const getLastTestErr = () => CONF.test.curCase ? _.nth(CONF.test.curCase.errors, -1) : undefined;
 
/**
 * Callable fixture to capture tests video.
 *
 * @global
 * @function
 * @prop {string} [dir] - Video file folder.
 * @prop {string} [name] - Video file name.
 */
const fxVideoFunc = (opts = {}) => U.makeFixture({
    before: beforeCb(opts),
    after: afterCb(opts),
    afterChunk: afterChunkCb,
});
 
/**
 * Fixture to capture tests video.
 *
 * @global
 * @function
 * @arg {function} func - Test funciton.
 */
const fxVideo = fxVideoFunc();
 
module.exports = { fxVideo, fxVideoFunc };