UNPKG

@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
"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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