/* global expect */ "use strict"; /** * Steps to measure time. * * These methods will be mixed with glacejs [Steps](https://glacejs.github.io/glace-core/Steps.html) * class and available via its instance [$](https://glacejs.github.io/glace-core/global.html#$) * in tests. * * @mixin TimerSteps */ var util = require("util"); var U = require("glace-utils"); var LOG = U.logger; var A = require("../allure"); var TimerSteps = { pause: async function (timeout, message) { /** * Step to make pause in another step or test case. **Good style** is * to not use directly in test case, only inside another step. * * @async * @memberOf TimerSteps * @method pause * @instance * @arg {number} timeout - Pause time, sec. * @arg {string} message - Pause reason. * @return {Promise<void>} * @throws {AssertionError} If pause message is not defined. * @example * * await $.pause(1, "wait for server start"); */ A.step(`Sleep ${timeout} sec because ${message}`); expect(message, "Pause message is not defined").to.not.be.undefined; LOG.warn(util.format("Sleep", timeout, "sec, reason:", message)); await U.sleep(timeout * 1000); A.pass(); }, startTimer: function () { /** * Step to start timer. * Each time when it will be called, timer will be reset. * * @memberOf TimerSteps * @method startTimer * @instance * @example * * $.startTimer(); * await $.pause(1, "sleep a bit"); * var elapsedSeconds = $.getTimer(); */ A.step("Start timer"); this._timer = new Date(); A.pass(); }, stopTimer: function () { /** * Step to stop timer. * * @memberOf TimerSteps * @method stopTimer * @instance * @example * * $.stopTimer(); */ A.step("Stop timer"); this._timer = null; A.pass(); }, getTimer: function () { /** * Step to get timer. * * @memberOf TimerSteps * @method getTimer * @instance * @return {number} Number of seconds since timer starts. * @throws {AssertionError} If timer is not started. * @example * * $.startTimer(); * await $.pause(1, "sleep a bit"); * var elapsedSeconds = $.getTimer(); */ A.step("Get timer value"); expect(this._timer, "Timer is not started").to.exist; var result = (new Date() - this._timer) / 1000; A.pass(); return result; }, checkTimer: function (condition) { /** * Step to check timer. * * @memberOf TimerSteps * @method checkTimer * @instance * @arg {string|object} condition - [chaijs](http://chaijs.com/) condition. * @throws {AssertionError} If timer verification was failed. * @example * * $.startTimer(); * $.checkTimer("to exist"); * * $.startTimer(); * await $.pause(1, "sleep a bit"); * $.checkTimer({ "to be gte": 1 }); */ if (typeof(condition) === "string") { var stepMsg = `Check timer ${condition}`; } else { stepMsg = util.format("Check timer with condition", condition); } A.step(stepMsg); expect(this.getTimer(), "Timing is failed").to.correspond(condition); A.pass(); }, }; module.exports = TimerSteps;