Innovenergy_trunk/frontend/node_modules/testcafe/lib/utils/get-options/quarantine.js

101 lines
16 KiB
JavaScript
Raw Normal View History

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Quarantine = exports.getQuarantineOptions = exports.validateQuarantineOptions = void 0;
const base_1 = __importDefault(require("./base"));
const quarantine_option_names_1 = __importDefault(require("../../configuration/quarantine-option-names"));
const types_1 = require("../../errors/types");
const runtime_1 = require("../../errors/runtime");
const DEFAULT_ATTEMPT_LIMIT = 5;
const DEFAULT_THRESHOLD = 3;
const MIN_ATTEMPT_LIMIT = 2;
const MIN_SUCCESS_THRESHOLD = 1;
function _isQuarantineOption(option) {
return Object.values(quarantine_option_names_1.default).includes(option);
}
function validateQuarantineOptions(options) {
for (const key in options) {
if (!_isQuarantineOption(key))
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.invalidQuarantineOption, key);
}
const attemptLimit = typeof options.attemptLimit === 'number' ? options.attemptLimit : DEFAULT_ATTEMPT_LIMIT;
const successThreshold = typeof options.successThreshold === 'number' ? options.successThreshold : DEFAULT_THRESHOLD;
if (attemptLimit < MIN_ATTEMPT_LIMIT)
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.invalidAttemptLimitValue, quarantine_option_names_1.default.attemptLimit, MIN_ATTEMPT_LIMIT);
if (successThreshold < MIN_SUCCESS_THRESHOLD)
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.invalidSuccessThresholdValue, quarantine_option_names_1.default.successThreshold, MIN_SUCCESS_THRESHOLD);
if (successThreshold >= attemptLimit)
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.invalidQuarantineParametersRatio, attemptLimit, successThreshold);
}
exports.validateQuarantineOptions = validateQuarantineOptions;
async function getQuarantineOptions(optionName, options) {
if (typeof options === 'boolean')
return true;
const parsedOptions = await (0, base_1.default)(options, {
skipOptionValueTypeConversion: true,
async onOptionParsed(key, value) {
if (!key || !value)
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.optionValueIsNotValidKeyValue, optionName);
return Number(value);
},
});
validateQuarantineOptions(parsedOptions);
return parsedOptions;
}
exports.getQuarantineOptions = getQuarantineOptions;
class Quarantine {
constructor() {
this.attempts = [];
this.attemptLimit = DEFAULT_ATTEMPT_LIMIT;
this.successThreshold = DEFAULT_THRESHOLD;
this.failureThreshold = DEFAULT_THRESHOLD;
}
getFailedAttempts() {
return this.attempts.filter(({ errors }) => !!errors.length);
}
getPassedAttempts() {
return this.attempts.filter(({ errors }) => errors.length === 0);
}
setCustomParameters(attemptLimit, successThreshold) {
const needToUpdateTestRunThreshold = typeof attemptLimit === 'number';
const needToUpdatePassedQuarantineThreshold = typeof successThreshold === 'number';
const needToRecalculateFailedThreshold = needToUpdateTestRunThreshold || needToUpdatePassedQuarantineThreshold;
if (needToUpdateTestRunThreshold)
this.attemptLimit = attemptLimit;
if (needToUpdatePassedQuarantineThreshold)
this.successThreshold = successThreshold;
if (needToRecalculateFailedThreshold)
this._setFailedThreshold();
}
getNextAttemptNumber() {
return this.attempts.length + 1;
}
isThresholdReached(extraErrors) {
const { passedTimes, failedTimes } = this._getAttemptsResult(extraErrors);
const successThresholdReached = passedTimes >= this.successThreshold;
const failureThresholdReached = failedTimes >= this.failureThreshold;
return successThresholdReached || failureThresholdReached;
}
isFirstAttemptSuccessful(extraErrors) {
const { failedTimes, passedTimes } = this._getAttemptsResult(extraErrors);
return failedTimes === 0 && passedTimes > 0;
}
_getAttemptsResult(extraErrors) {
let failedTimes = this.getFailedAttempts().length;
let passedTimes = this.getPassedAttempts().length;
if (extraErrors) {
if (extraErrors.length)
failedTimes += extraErrors.length;
else
passedTimes += 1;
}
return { failedTimes, passedTimes };
}
_setFailedThreshold() {
this.failureThreshold = this.attemptLimit - this.successThreshold + 1;
}
}
exports.Quarantine = Quarantine;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhcmFudGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9nZXQtb3B0aW9ucy9xdWFyYW50aW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUFvQztBQUNwQywwR0FBa0Y7QUFDbEYsOENBQW9EO0FBQ3BELGtEQUFvRDtBQUlwRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUNoQyxNQUFNLGlCQUFpQixHQUFPLENBQUMsQ0FBQztBQUNoQyxNQUFNLGlCQUFpQixHQUFPLENBQUMsQ0FBQztBQUNoQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUVoQyxTQUFTLG1CQUFtQixDQUFFLE1BQWM7SUFDeEMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLGlDQUF1QixDQUFDLENBQUMsUUFBUSxDQUFDLE1BQWlDLENBQUMsQ0FBQztBQUM5RixDQUFDO0FBRUQsU0FBZ0IseUJBQXlCLENBQUUsT0FBb0M7SUFDM0UsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUU7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztZQUN6QixNQUFNLElBQUksc0JBQVksQ0FBQyxzQkFBYyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQzNFO0lBRUQsTUFBTSxZQUFZLEdBQU8sT0FBTyxPQUFPLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7SUFDakgsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7SUFFckgsSUFBSSxZQUFZLEdBQUcsaUJBQWlCO1FBQ2hDLE1BQU0sSUFBSSxzQkFBWSxDQUFDLHNCQUFjLENBQUMsd0JB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