UNPKG

@intuit/standardly

Version:

DIY framework for Standards Governance

75 lines (70 loc) 3.05 kB
"use strict"; const Testlet = require("./Testlet.js"); const dirWrapper = require("../lib/localDirWrapper.js"); const EvaluationResult = require("./EvaluationResult.js"); const ioUtils = require("../lib/ioUtils.js"); const ResultEnum = EvaluationResult.ResultEnum; const log = require("../lib/common.js").log; class FileNonExistenceTestlet extends Testlet { /** * Creates the FileExistenceTestlet * @param {*} target - the target object, for example a directory where this rule is executed * @param {*} ruleSet * @param {*} ruleJson */ constructor(target, ruleSet, ruleJson, excludeDirs) { super(target, "FMNE", ruleSet, ruleJson, "", excludeDirs); } /** * Evaluates the ruleSet * Returns an array of promises that resolve to a TestletOutput object */ evaluate() { let promises = []; let dicts = dirWrapper.getDicts(this.target.localdir, true); let fileDict = dicts[0]; let fileExtensionDict = dicts[1]; this.ruleSet.forEach(rule => { rule.fileList.forEach(fileName =>{ let exclude = (this.excludeDirs ? rule.excludeDirs.concat(this.excludeDirs) : rule.excludeDirs); if (fileName.charAt(0)==="*") { promises.push(this.validateFileExists(rule, fileName.substr(1), fileExtensionDict, exclude)); } else { promises.push(this.validateFileExists(rule, fileName, fileDict, exclude)); } }); }); log.info("Reporting from " + this.ruleType + " resolving results"); return promises; } /** * Validates if file exists * @param {*} rule - the rule * @param {*} fileName - the file to validate * @param {*} dict - the dictionary of filenames * @param {*} excludeDirs */ validateFileExists(rule, fileName, dict, excludeDirs) { let vResult; return new Promise(resolve => { try { let files = (fileName in dict) ? dict[fileName] : []; if (excludeDirs) { files = ioUtils.getUnexcludedDirs(files, excludeDirs); } const message = (files.length > 0 ? "Found " : "Not found ") + fileName + " file in " + (this.target.giturl ? this.target.giturl : this.target.localdir); const result = files.length > 0 ? ResultEnum.FAIL : ResultEnum.PASS; const fileList = files.length > 0 ? " Found: " + files : ""; vResult = new EvaluationResult(rule.ruleID, result, message + fileList); resolve(vResult); } catch(exception) { log.warn("From Testlet for " + this.ruleType + " error evaluating rule"); vResult = new EvaluationResult(rule.ruleID, ResultEnum.ERROR, "Error evaluating rule ", JSON.stringify(exception)); resolve(vResult); } }); } } module.exports = FileNonExistenceTestlet;