diff --git a/src/commands/analytics/template/lint.ts b/src/commands/analytics/template/lint.ts index 94df3298..75e9224c 100644 --- a/src/commands/analytics/template/lint.ts +++ b/src/commands/analytics/template/lint.ts @@ -6,7 +6,7 @@ */ import { flags, SfdxCommand } from '@salesforce/command'; -import { Org, Messages } from '@salesforce/core'; +import { Org, Messages, SfdxError } from '@salesforce/core'; import chalk from 'chalk'; import { colorize, getStatusIcon, COLORS } from '../../../lib/analytics/utils'; @@ -81,6 +81,12 @@ export default class Lint extends SfdxCommand { } ); + // check if there is any readiness failure + const didAnyReadinessTasksFail = tasks.some(task => task.readinessStatus === 'Failed'); + if (didAnyReadinessTasksFail) { + throw new SfdxError('Template linting failed', undefined, undefined, 1, undefined).setData(result); + } + return result; } } diff --git a/src/commands/analytics/template/validate.ts b/src/commands/analytics/template/validate.ts index 9edd1e37..d090f252 100644 --- a/src/commands/analytics/template/validate.ts +++ b/src/commands/analytics/template/validate.ts @@ -101,6 +101,12 @@ export default class Validate extends SfdxCommand { } ); + // check if there is any readiness failure + const didAnyReadinessTasksFail = tasks.some(task => task.readinessStatus === 'Failed'); + if (didAnyReadinessTasksFail) { + throw new SfdxError('Template validation failed', undefined, undefined, 1, undefined).setData(result); + } + return result; } } diff --git a/test/commands/template/lint.test.ts b/test/commands/template/lint.test.ts index 6b2a5896..1b8d4d62 100644 --- a/test/commands/template/lint.test.ts +++ b/test/commands/template/lint.test.ts @@ -11,19 +11,17 @@ import { expect, test } from '@salesforce/command/lib/test'; core.Messages.importMessagesDirectory(__dirname); // const messages = core.Messages.loadMessages('@salesforce/analytics', 'lint'); const ID = '0Nkxx000000000zCAA'; -const templateValues = [ - { - label: 'sfdc_internal__Sales_Analytics_Flex', - score: 85.6, - tasks: [ - { - label: 'TemplateAssociationTask', - message: 'Certification for sfdc_internal__Sales_Analytics_Flex template.', - readinessStatus: 'Complete' - } - ] - } -]; +const templateValues = { + label: 'sfdc_internal__Sales_Analytics_Flex', + score: 85.6, + tasks: [ + { + label: 'TemplateAssociationTask', + message: 'Certification for sfdc_internal__Sales_Analytics_Flex template.', + readinessStatus: 'Complete' + } + ] +}; describe('analytics:template:lint', () => { test @@ -35,3 +33,29 @@ describe('analytics:template:lint', () => { expect(ctx.stdout).to.contain('Command only available in api version 58.0 or later'); }); }); + +const templateWithFailedReadiness = { + id: '0Nkxx000000000zCAA', + score: 85.6, + tasks: [ + { + label: 'EvaluateTemplateRequirement', + message: 'Certification for sfdc_internal__Sales_Analytics_Flex template.', + readinessStatus: 'Failed' + } + ] +}; + +describe('analytics:template:lint failure', () => { + const exitCode = process.exitCode; + test + .withOrg({ username: 'test@org.com' }, true) + .withConnectionRequest(() => Promise.resolve(templateWithFailedReadiness)) + .command(['analytics:template:lint', '--templateid', ID, '--apiversion', '58.0']) + .it(`runs analytics:template:lint --templateid ${ID}`, () => { + expect(process.exitCode).to.equal(1); + }); + after(() => { + process.exitCode = exitCode; + }); +}); diff --git a/test/commands/template/validate.test.ts b/test/commands/template/validate.test.ts index 0c337404..896946ce 100644 --- a/test/commands/template/validate.test.ts +++ b/test/commands/template/validate.test.ts @@ -11,19 +11,16 @@ import { expect, test } from '@salesforce/command/lib/test'; core.Messages.importMessagesDirectory(__dirname); // const messages = core.Messages.loadMessages('@salesforce/analytics', 'validate'); const ID = '0Nkxx000000000zCAA'; -const templateValues = [ - { - id: '0Nkxx000000000zCAA', - tasks: [ - { - label: 'TemplateAssociationTask', - message: 'Certification for sfdc_internal__Sales_Analytics_Flex template.', - readinessStatus: 'Complete' - } - ] - } -]; - +const templateValues = { + id: '0Nkxx000000000zCAA', + tasks: [ + { + label: 'TemplateAssociationTask', + message: 'Certification for sfdc_internal__Sales_Analytics_Flex template.', + readinessStatus: 'Complete' + } + ] +}; describe('analytics:template:validate', () => { test .withOrg({ username: 'test@org.com' }, true) @@ -34,3 +31,28 @@ describe('analytics:template:validate', () => { expect(ctx.stdout).to.contain('Command only available in api version 58.0 or later'); }); }); + +const templateWithFailedReadiness = { + id: '0Nkxx000000000zCAA', + tasks: [ + { + label: 'EvaluateTemplateRequirement', + message: "Expected number of accounts don't match. Expected: 100, Actual: 0", + readinessStatus: 'Failed' + } + ] +}; +describe('analytics:template:validate failure', () => { + const exitCode = process.exitCode; + test + .withOrg({ username: 'test@org.com' }, true) + .withConnectionRequest(() => Promise.resolve(templateWithFailedReadiness)) + .command(['analytics:template:validate', '--templateid', ID, '--apiversion', '58.0']) + .it(`runs analytics:template:validate --templateid ${ID}`, () => { + expect(process.exitCode).to.equal(1); + }); + + after(() => { + process.exitCode = exitCode; + }); +});