Source: utils.js

"use strict";

/**
 * Utils.
 *
 * @module
 */

const path = require("path");
const util = require("util");

const _ = require("lodash");
const U = require("glace-utils");
const LOG = U.logger;

const CONF = require("./config");

/**
* Helper to set actual log file.
*
* @function
*/
module.exports.setLog = () => {
    const logsDir = CONF.report.testDir || CONF.report.dir;
    const logFile = path.resolve(logsDir, "logs", "test.log");
    LOG.setFile(logFile);
};

/**
 * Account test error and add it to test or session errors.
 *
 * @function
 */
module.exports.accountError = (errMsg, err) => {
    errMsg = errMsg || "";

    if (CONF.test.curCase && !_.isEmpty(CONF.test.curCase.testParams)) {
        errMsg += "\n" + util.format(CONF.test.curCase.testParams);
    }
    if (err.message) {
        errMsg += "\nmessage: " + err.message;
    }
    if (err.diff) {
        errMsg += err.diff;
    }
    if (err.stack) {
        errMsg += "\nstack: " + err.stack;
    }
    if (err.seleniumStack) {
        errMsg += "\nselenium: " + JSON.stringify(err.seleniumStack, null, "\t");
    }
    errMsg = errMsg.trim();

    if (CONF.test.curCase) {
        CONF.test.curCase.addError(errMsg);
    } else {
        CONF.session.errors.push(errMsg);
    }
};

/**
 * Get function description.
 *
 * @function
 * @arg {function} func - Function to read documentation.
 * @return {string} Documentation.
 */
module.exports.getDoc = func => {
    let doc = func.__doc__;
    if (!doc) return "";

    doc = doc
        .split("\n")
        .map(i => i.trim())
        .filter(i => i)
        .map(i => `   ${i}`)
        .join("\n");

    if (!doc) return "";
    return `  /**\n${doc}\n   */`;
};


module.exports.printTestErrors = (failedTests, log = console.log) => {
    if (!failedTests.length) return;
    log();
    log("TEST FAILURES:".bold);
    for (const testCase of failedTests) {
        log();
        log(("test: " + testCase.name).cyan.bold);
        printErrors(testCase.errors, log);
    }
};


module.exports.printSessionErrors = (log = console.log) => {
    if (!CONF.session.errors.length) return;
    log();
    log("OUTTEST FAILURES:".bold);
    printErrors(CONF.session.errors, log);
};

const printErrors = (errors, log) => {
    for (let error of errors) {
        error = error.split("\n").map(line => {

            if (line.trim() === "+ expected - actual") {
                return line
                    .replace("+ expected", "+ expected".green.bold)
                    .replace("- actual", "- actual".red.bold);
            }

            if (line.trim().startsWith("+")) {
                return line.green.bold;
            }

            return line.red.bold;
        }).join("\n");
        log();
        log(error);
    }
};