@flxbl-io/sfp
Version:
sfp is a CLI tool to help you manage your Salesforce projects in an artifact centric model
136 lines • 13.5 kB
JavaScript
"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 });
exports.ApexTestValidator = void 0;
const sfp_logger_1 = __importStar(require("@flxbl-io/sfp-logger"));
const TestOptions_1 = require("../../core/apextest/TestOptions");
const TriggerApexTests_1 = __importDefault(require("../../core/apextest/TriggerApexTests"));
const SfpPackage_1 = require("../../core/package/SfpPackage");
const core_1 = require("@salesforce/core");
const ValidateImpl_1 = require("./ValidateImpl");
class ApexTestValidator {
constructor(targetUsername, sfpPackage, props, logger) {
this.targetUsername = targetUsername;
this.sfpPackage = sfpPackage;
this.props = props;
this.logger = logger;
}
async validateApexTests() {
if (this.sfpPackage.packageDescriptor.skipTesting)
return { id: null, result: true, message: "No Tests To Run" };
if (!this.sfpPackage.isApexFound)
return { id: null, result: true, message: "No Tests To Run" };
if (this.sfpPackage.packageDescriptor.isOptimizedDeployment == false)
return {
id: null,
result: true,
message: "Tests would have already run",
};
let testProps;
if (this.sfpPackage.packageType == SfpPackage_1.PackageType.Diff) {
testProps = this.getTestOptionsForDiffPackage(this.sfpPackage, this.props);
}
else if (this.props.validationMode == ValidateImpl_1.ValidationMode.FAST_FEEDBACK ||
this.props.validationMode ==
ValidateImpl_1.ValidationMode.FASTFEEDBACK_LIMITED_BY_RELEASE_CONFIG) {
testProps = this.getTestOptionsForFastFeedBackPackage(this.sfpPackage, this.props);
}
else
testProps = this.getTestOptionsForFullPackageTest(this.sfpPackage, this.props);
let testOptions = testProps.testOptions;
let testCoverageOptions = testProps.testCoverageOptions;
if (testProps.testOptions == undefined) {
return { id: null, result: true, message: "No Tests To Run" };
}
if (!testOptions) {
return { id: null, result: true, message: "No Tests To Run" };
}
//override any behaviour if the override is from the deploy this.props
if (this.props.disableParallelTestExecution)
testOptions.synchronous = true;
if (this.sfpPackage.packageType == SfpPackage_1.PackageType.Diff)
testOptions.synchronous = true;
this.displayTestHeader(this.sfpPackage);
const triggerApexTests = new TriggerApexTests_1.default(this.targetUsername, testOptions, testCoverageOptions, null, this.logger);
return triggerApexTests.exec();
}
getTestOptionsForFullPackageTest(sfpPackage, props) {
const testOptions = new TestOptions_1.RunAllTestsInPackageOptions(this.sfpPackage, 60, ".testresults");
const testCoverageOptions = {
isIndividualClassCoverageToBeValidated: false,
isPackageCoverageToBeValidated: !this.sfpPackage.packageDescriptor.skipCoverageValidation,
coverageThreshold: this.props.coverageThreshold || 75,
};
return { testOptions, testCoverageOptions };
}
getTestOptionsForDiffPackage(sfpPackage, props) {
//No impacted test class available
if (!this.sfpPackage.apexTestClassses || this.sfpPackage.apexTestClassses.length == 0) {
sfp_logger_1.default.log(`${(0, sfp_logger_1.COLOR_HEADER)("Unable to find any impacted test classses,skipping tests, You might need to use thorough option")}`);
return { testOptions: undefined, testCoverageOptions: undefined };
}
let isImpactedApexClassAvailable = true;
//Unable to find impacted apex class in the diff package
if (!this.sfpPackage.apexClassWithOutTestClasses || this.sfpPackage.apexClassWithOutTestClasses.length == 0) {
isImpactedApexClassAvailable = false;
sfp_logger_1.default.log(`${(0, sfp_logger_1.COLOR_HEADER)("Unable to find any impacted classses in the diff package,skipping tests, Ignoring coverage validation")}`);
}
sfp_logger_1.default.log(`${(0, sfp_logger_1.COLOR_HEADER)("Diff package detected: triggering impacted test classes")}`);
const testOptions = new TestOptions_1.RunSpecifiedTestsOption(60, ".testResults", this.sfpPackage.apexTestClassses.join(), true);
const testCoverageOptions = {
isIndividualClassCoverageToBeValidated: isImpactedApexClassAvailable ? true : false,
isPackageCoverageToBeValidated: false,
coverageThreshold: this.props.coverageThreshold || 75,
classesToBeValidated: this.sfpPackage.apexClassWithOutTestClasses
};
return { testOptions, testCoverageOptions };
}
//TODO: Need to fix test options for earlier behaviour for fast feedback
getTestOptionsForFastFeedBackPackage(sfpPackage, props) {
//No impacted test class available
if (!this.sfpPackage.apexTestClassses || this.sfpPackage.apexTestClassses.length == 0) {
sfp_logger_1.default.log(`${(0, sfp_logger_1.COLOR_HEADER)("Unable to find any impacted test classses,skipping tests, You might need to use thorough option")}`);
return { testOptions: undefined, testCoverageOptions: undefined };
}
sfp_logger_1.default.log(`${(0, sfp_logger_1.COLOR_HEADER)("Diff mode activated, Only impacted test class will be triggered")}`);
const testOptions = new TestOptions_1.RunSpecifiedTestsOption(60, ".testResults", this.sfpPackage.apexTestClassses.join(), true);
const testCoverageOptions = {
isIndividualClassCoverageToBeValidated: false,
isPackageCoverageToBeValidated: false,
coverageThreshold: 0
};
return { testOptions, testCoverageOptions };
}
displayTestHeader(sfpPackage) {
sfp_logger_1.default.printHeaderLine('', sfp_logger_1.COLOR_HEADER, core_1.LoggerLevel.INFO);
sfp_logger_1.default.log(`Triggering Apex tests for ${this.sfpPackage.packageName}`, core_1.LoggerLevel.INFO);
sfp_logger_1.default.printHeaderLine('', sfp_logger_1.COLOR_HEADER, core_1.LoggerLevel.INFO);
}
}
exports.ApexTestValidator = ApexTestValidator;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBleFRlc3RWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW1wbC92YWxpZGF0ZS9BcGV4VGVzdFZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1FQUF1RTtBQUV2RSxpRUFBb0g7QUFDcEgsNEZBQW9FO0FBQ3BFLDhEQUF3RTtBQUN4RSwyQ0FBK0M7QUFDL0MsaURBQWdEO0FBU2hELE1BQWEsaUJBQWlCO0lBRTVCLFlBQ1UsY0FBc0IsRUFDdEIsVUFBc0IsRUFDdEIsS0FBOEIsRUFDOUIsTUFBYztRQUhkLG1CQUFjLEdBQWQsY0FBYyxDQUFRO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsVUFBSyxHQUFMLEtBQUssQ0FBeUI7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUNwQixDQUFDO0lBR0UsS0FBSyxDQUFDLGlCQUFpQjtRQU01QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsV0FBVztZQUMvQyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1FBRWhFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDOUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztRQUVoRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLElBQUksS0FBSztZQUNsRSxPQUFPO2dCQUNMLEVBQUUsRUFBRSxJQUFJO2dCQUNSLE1BQU0sRUFBRSxJQUFJO2dCQUNaLE9BQU8sRUFBRSw4QkFBOEI7YUFDeEMsQ0FBQztRQUVKLElBQUksU0FBUyxDQUFDO1FBRWQsSUFBSSxJQUFJLENBQUMs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