@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
JavaScript
;
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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