UNPKG

@flxbl-io/sfp

Version:

sfp is a CLI tool to help you manage your Salesforce projects in an artifact centric model

91 lines 9.67 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const _ = __importStar(require("lodash")); const ApexDepedencyCheckImpl_1 = __importDefault(require("@flxbl-io/apexlink/lib/ApexDepedencyCheckImpl")); const sfp_logger_1 = __importStar(require("@flxbl-io/sfp-logger")); const SfpPackage_1 = require("../package/SfpPackage"); const path_1 = __importDefault(require("path")); class ImpactedApexTestClassFetcher { constructor(sfpPackage, changedComponents, logger, loglevel) { this.sfpPackage = sfpPackage; this.changedComponents = changedComponents; this.logger = logger; this.loglevel = loglevel; } async getImpactedTestClasses() { let invalidatedClasses = []; let invalidatedTestClasses = []; try { let validatedChangedComponents = this.changedComponents.filter((component) => component.package == this.sfpPackage.packageName); sfp_logger_1.default.log(`Computing impacted apex class and associated tests`, sfp_logger_1.LoggerLevel.INFO, this.logger); sfp_logger_1.default.log(`Changed components ${JSON.stringify(validatedChangedComponents)}`, sfp_logger_1.LoggerLevel.INFO, this.logger); let apexLinkImpl = new ApexDepedencyCheckImpl_1.default(this.logger, path_1.default.join(this.sfpPackage.workingDirectory, this.sfpPackage.packageDirectory)); let dependencies = (await apexLinkImpl.execute()).dependencies; if (dependencies.length == 0) { //go for another attempt sfp_logger_1.default.log(`No dependencies found, retrying with apexlink,Retrying again`, sfp_logger_1.LoggerLevel.INFO, this.logger); apexLinkImpl = new ApexDepedencyCheckImpl_1.default(this.logger, this.sfpPackage.workingDirectory); dependencies = (await apexLinkImpl.execute()).dependencies; } sfp_logger_1.default.log(`Dependencies: ${JSON.stringify(dependencies)}`, sfp_logger_1.LoggerLevel.INFO, this.logger); //compute invalidated apex classes for (const changedComponent of validatedChangedComponents) { //If the component is a permset or profile, add every test class //There is a change in security model, add all test classes as invalidated // Temoorarily disabled this check as it is not working as expected if (this.sfpPackage.packageType != SfpPackage_1.PackageType.Diff && _.includes(['Profile', 'PermissionSet', 'SharingRules'], changedComponent.type)) { sfp_logger_1.default.log((0, sfp_logger_1.COLOR_WARNING)(`Change in Security Model, pushing all test classes through`), sfp_logger_1.LoggerLevel.INFO, this.logger); invalidatedClasses = invalidatedClasses.concat(this.sfpPackage.apexTestClassses); break; } for (const apexClass of dependencies) { // push any apex class or test class that is changed, which would then get filtered during subsequent matching with test class if (apexClass.name == changedComponent.fullName) invalidatedClasses.push(apexClass.name); // push any apex class or test class who is dependent on the changed entity for (const dependsOn of apexClass.dependencies) { if (changedComponent.fullName == dependsOn) invalidatedClasses.push(apexClass.name); } } } sfp_logger_1.default.log(`Impacted classes: ${(0, sfp_logger_1.COLOR_KEY_MESSAGE)(invalidatedClasses)}`, sfp_logger_1.LoggerLevel.INFO, this.logger); //Filter all apex classes by means of whats is detected in test classes list invalidatedTestClasses = _.intersection(invalidatedClasses, this.sfpPackage.apexTestClassses); sfp_logger_1.default.log(`Impacted test classes: ${(0, sfp_logger_1.COLOR_KEY_MESSAGE)(invalidatedTestClasses)}`, sfp_logger_1.LoggerLevel.INFO, this.logger); } catch (error) { sfp_logger_1.default.log(`Unable to compute impacted test classes, defaulting to all test classes due to error ${error}`, sfp_logger_1.LoggerLevel.ERROR, this.logger); invalidatedClasses = this.sfpPackage.apexTestClassses; } return invalidatedTestClasses; } } exports.default = ImpactedApexTestClassFetcher; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wYWN0ZWRBcGV4VGVzdENsYXNzRmV0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL2FwZXh0ZXN0L0ltcGFjdGVkQXBleFRlc3RDbGFzc0ZldGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBDQUE0QjtBQUM1QiwyR0FBa0Y7QUFFbEYsbUVBQXdHO0FBQ3hHLHNEQUFnRTtBQUNoRSxnREFBd0I7QUFFeEIsTUFBcUIsNEJBQTRCO0lBQzdDLFlBQ1ksVUFBc0IsRUFDdEIsaUJBQThCLEVBQzlCLE1BQWMsRUFDZCxRQUFzQjtRQUh0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBYTtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBYztJQUMvQixDQUFDO0lBRUcsS0FBSyxDQUFDLHNCQUFzQjtRQUUvQixJQUFJLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUVoQyxJQUNBLENBQUM7WUFDRCxJQUFJLDBCQUEwQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQzFELENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUNsRSxDQUFDO1lBRUYsb0JBQVMsQ0FBQyxHQUFHLENBQUMsb0RBQW9ELEVBQUUsd0JBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25HLG9CQUFTLENBQUMsR0FBRyxDQUFDLHNCQUFzQixJQUFJLENBQUMsU0FBUyxDQUFDLDBCQUEwQixDQUFDLEVBQUUsRUFBRSx3QkFBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFJakgs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