"use strict";
/**
* [Allure](http://allure.qatools.ru/) wrapper.
*
* @module
*/
const fs = require("fs");
const Allure = require("allure-js-commons");
const Step = require("allure-js-commons/beans/step");
const CONF = require("./config");
let allure;
if (CONF.allure.use) {
allure = new Allure();
allure.setOptions({ targetDir: CONF.allure.dir });
allure.PASSED = "passed";
allure.FAILED = "failed";
allure.SKIPPED = "skipped";
/**
* Defines if allure helper has steps or no.
*
* @memberOf module:allure
* @method
* @return {boolean} `true` if it has steps, `false` otherwise.
*/
allure.hasSteps = function () {
return this.getCurrentSuite().currentStep instanceof Step;
};
/**
* Defines if test is started or no.
*
* @memberOf module:allure
* @method
* @return {boolean} `true` if test is started, `false` otherwise.
*/
allure.isTestStarted = function () {
return !!(this.getCurrentSuite() && this.getCurrentTest() && !this.getCurrentTest().status);
};
/**
* Starts step if test is started.
*
* @memberOf module:allure
* @method
* @arg {string} name - Step name.
*/
allure.step = function () {
if (this.isTestStarted()) this.startStep.apply(this, arguments);
};
/**
* Ends step as passed if test is started.
*
* @memberOf module:allure
* @method
*/
allure.pass = function () {
if (this.isTestStarted()) this.endStep(this.PASSED);
};
/**
* Adds test story if test is started.
*
* @memberOf module:allure
* @method
* @arg {string} name - Story name.
*/
allure.story = function (name) {
if (!this.isTestStarted()) return;
this.getCurrentTest().addLabel("story", name);
};
/**
* Adds test feature if test is started.
*
* @memberOf module:allure
* @method
* @arg {string} name - Feature name.
*/
allure.feature = function (name) {
if (!this.isTestStarted()) return;
this.getCurrentTest().addLabel("feature", name);
};
/**
* Adds test environment value if test is started.
*
* @memberOf module:allure
* @method
* @arg {string} name - Environment name.
* @arg {string} value - Environment value.
*/
allure.addEnvironment = function (name, value) {
if (!this.isTestStarted()) return;
this.getCurrentTest().addParameter("environment-variable", name, value);
};
/**
* Adds test description if test is started.
*
* @memberOf module:allure
* @method
* @arg {string} desc - Description.
* @arg {string} type - Mime type.
*/
allure.addDescription = function (desc, type) {
if (!this.isTestStarted()) return;
this.getCurrentTest().setDescription(desc, type);
};
/**
* Attach content to test if test is started.
*
* @memberOf module:allure
* @method
* @arg {string} name - Content name.
* @arg {string} content - Content body.
* @arg {string} type - Mime type.
*/
allure.attach = function (name, content, type) {
if (!this.isTestStarted()) return;
this.addAttachment(name, Buffer.from(content), type);
};
/**
* Attach JSON to test if test is started.
*
* @memberOf module:allure
* @method
* @arg {string} name - JSON name.
* @arg {string} obj - Object to convert to JSON.
*/
allure.attachJson = function (name, obj) {
if (!this.isTestStarted()) return;
this.attach(name, JSON.stringify(obj, null, " "), "application/json");
};
/**
* Attach image to test if test is started.
*
* @memberOf module:allure
* @method
* @arg {string} name - Image name.
* @arg {string} imgPath - Image path.
*/
allure.attachImage = function (name, imgPath) {
if (!this.isTestStarted()) return;
this.attach(name, fs.readFileSync(imgPath), "image/png");
};
/**
* Attach video to test if test is started.
*
* @memberOf module:allure
* @method
* @arg {string} name - Video name.
* @arg {string} videoPath - Video path.
*/
allure.attachVideo = function (name, videoPath) {
if (!this.isTestStarted()) return;
this.attach(name, fs.readFileSync(videoPath), "video/mp4");
};
/**
* Attach text to test if test is started.
*
* @memberOf module:allure
* @method
* @arg {string} name - Text name.
* @arg {string} txt - Text content.
*/
allure.attachText = function (name, txt) {
this.attach(name, txt, "text/plain");
};
/**
* Attach HTML to test if test is started.
*
* @memberOf module:allure
* @method
* @arg {string} name - HTML name.
* @arg {string} html - HTML content.
*/
allure.attachHtml = function (name, html) {
this.attach(name, html, "application/html");
};
} else {
allure = new Proxy({}, { get: () => () => {} });
};
module.exports = allure;