"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 => () => { if (ctx.isErrorHappened) return; if (ctx.lastTestErr !== getLastTestErr()) { ctx.isErrorHappened = true; return; } if (ctx.lastSessErr !== _.nth(CONF.session.errors, -1)) { ctx.isErrorHappened = true; return; } }; const afterCb = opts => ctx => async () => { if (!ctx.isStarted) return; const videoPath = await $.stopVideo(); if (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 };