sf-delta-tests 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -39,7 +39,43 @@ sf plugins
39
39
 
40
40
  ## Commands
41
41
 
42
- <!-- commands -->
42
+ <!-- commands -->
43
+ * [`sf delta test-classes`](#sf-delta-test-classes)
44
+
45
+ ## `sf delta test-classes`
46
+
47
+ Run only related tests
48
+
49
+ ```
50
+ USAGE
51
+ $ sf delta test-classes -o <value> [--json] [--flags-dir <value>] [-p <value>] [--always-run-test <value>...]
52
+ [--include-all-flows]
53
+
54
+ FLAGS
55
+ -o, --target-org=<value> (required) The org you want to check the dependencies against.
56
+ -p, --package-path=<value> [default: manifest/package.xml] Path to the package.xml that will be deployed.
57
+ --always-run-test=<value>... A test class to run when no tests need to be ran.
58
+ --[no-]include-all-flows When enabled, if any Flow is changed, include all Flows that require test coverage
59
+ based on their trigger type or process type. This ensures proper test coverage
60
+ validation since Salesforce checks coverage for all such Flows during deployment,
61
+ not just the changed ones. Use --no-include-all-flows to disable.
62
+
63
+ GLOBAL FLAGS
64
+ --flags-dir=<value> Import flag values from a directory.
65
+ --json Format output as json.
66
+
67
+ DESCRIPTION
68
+ Run only related tests
69
+
70
+ Calculates the tests needed to be ran based on the changed metadata given using the Salesforce Dependency API. For
71
+ Flows, also queries FlowTestCoverage to include test classes that have previously covered the Flows.
72
+
73
+ EXAMPLES
74
+ testCmd=$(sf delta test-classes --target-org matt@never.io.dev)
75
+
76
+ $ sf project deploy validate ${testCmd}
77
+ ```
78
+ <!-- commandsstop -->
43
79
 
44
80
  - [`sf delta test-classes`](#sf-delta-test-classes)
45
81
 
@@ -76,4 +112,4 @@ EXAMPLES
76
112
  $ sf project deploy validate ${testCmd}
77
113
  ```
78
114
 
79
- <!-- commandsstop -->
115
+ <!-- commandsstop -->
@@ -62,6 +62,7 @@ export default class TestClasses extends SfCommand {
62
62
  const org = flags['target-org'];
63
63
  const conn = org.getConnection(undefined);
64
64
  this.dependencyService.connect(conn);
65
+ this.flowService.connect(conn);
65
66
  this.debug('Getting dependencies from SF');
66
67
  // Download all dependencies from SF
67
68
  const combinedApexClassData = await this.dependencyService.getDependenciesByObjects();
@@ -72,10 +73,11 @@ export default class TestClasses extends SfCommand {
72
73
  // Get manifest data and transform that into a list of metadata
73
74
  const manifestData = await this.manifestService.parseManifest(flags['package-path']);
74
75
  const changedMetadataWithType = this.manifestService.extractMetadataComponentsWithType(manifestData);
75
- const flowNames = await this.flowService.getFlowNames(changedMetadataWithType, flags['include-all-flows']);
76
- const flowTriggerObjectNames = await this.flowService.getTriggerObjectsFromFlows(flowNames);
76
+ // Get changed flows and their trigger objects for dependency analysis
77
+ const changedFlowNames = this.flowService.getChangedFlowNames(changedMetadataWithType);
78
+ const flowTriggerObjectNames = await this.flowService.getTriggerObjectsFromFlows(changedFlowNames);
77
79
  const changedMetadata = lodash.uniq([
78
- ...flowNames,
80
+ ...changedFlowNames,
79
81
  ...flowTriggerObjectNames,
80
82
  ...changedMetadataWithType.map((c) => c.name),
81
83
  ]);
@@ -98,9 +100,15 @@ export default class TestClasses extends SfCommand {
98
100
  const testNames = await this.apexClassService.filterApexTest(classList);
99
101
  const simpleTestNames = this.apexClassService.filterApexTestSimple(classList);
100
102
  this.debug({ testNames, simpleTestNames });
103
+ const hasTestableFlowChanged = await this.flowService.hasTestableFlowChanged(changedFlowNames);
104
+ if (hasTestableFlowChanged) {
105
+ const flowCoverageTestNames = await this.flowService.getFlowTestCoverage(changedFlowNames, flags['include-all-flows']);
106
+ testNames.push(...flowCoverageTestNames);
107
+ }
101
108
  if (flags['always-run-test']) {
102
109
  testNames.push(...flags['always-run-test']);
103
110
  }
111
+ this.debug({ testNames, simpleTestNames });
104
112
  if (testNames.length === 0) {
105
113
  this.debug('No relevant tests found, skip running tests');
106
114
  // TODO: Debate this one, if we found no relevant tests, should all or none be ran?
@@ -1 +1 @@
1
- {"version":3,"file":"test-classes.js","sourceRoot":"","sources":["../../../src/commands/delta/test-classes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-classes.js","sourceRoot":"","sources":["../../../src/commands/delta/test-classes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvD,MAAM,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAElD,QAAQ,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;AACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;AAO/E,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAiC;IACjE,MAAM,CAAU,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,CAAU,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACjE,MAAM,CAAU,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAEnE,+EAA+E;IAC/E,qGAAqG;IAC9F,MAAM,CAAU,KAAK,GAAG;QAC7B,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC;YAC9B,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC;YACxD,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC;YAC9B,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,4BAA4B,CAAC;YAC1D,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,sBAAsB;SAChC,CAAC;QACF,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC;YAC9B,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,+BAA+B,CAAC;YAC7D,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC;YACjC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,iCAAiC,CAAC;YAC/D,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;SACd,CAAC;KACH,CAAC;IAEM,iBAAiB,CAAoB;IACrC,gBAAgB,CAAmB;IACnC,aAAa,CAAgB;IAC7B,eAAe,CAAkB;IACjC,UAAU,CAAa;IACvB,WAAW,CAAc;IAEjC,YACE,IAAc,EACd,MAAc,EACd,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,EAC3C,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,EACzC,aAAa,GAAG,IAAI,aAAa,EAAE,EACnC,eAAe,GAAG,IAAI,eAAe,EAAE,EACvC,UAAU,GAAG,IAAI,UAAU,EAAE,EAC7B,WAAW,GAAG,IAAI,WAAW,EAAE;QAE/B,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,GAAG;QACd,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAEhD,oBAAoB;YACpB,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAC1C,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE/B,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC3C,oCAAoC;YACpC,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,CAAC;YAEtF,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC;YAE3D,2BAA2B;YAC3B,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;YAE/D,IAAI,CAAC,KAAK,CAAC,yBAAyB,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAE7D,+DAA+D;YAC/D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;YACrF,MAAM,uBAAuB,GAAG,IAAI,CAAC,eAAe,CAAC,iCAAiC,CAAC,YAAY,CAAC,CAAC;YAErG,sEAAsE;YACtE,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;YACvF,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC,gBAAgB,CAAC,CAAC;YAEnG,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC;gBAClC,GAAG,gBAAgB;gBACnB,GAAG,sBAAsB;gBACzB,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAC9C,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC;YAEvE,6FAA6F;YAC7F,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,KAAK,CACR,uGAAuG,CACxG,CAAC;gBACF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBAE5D,OAAO;oBACL,SAAS,EAAE,EAAE;oBACb,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;iBACvD,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACtD,yHAAyH;YACzH,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAAC;YACvG,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YAE1B,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC1D,4CAA4C;YAC5C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YACxE,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAC9E,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;YAE3C,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;YAE/F,IAAI,sBAAsB,EAAE,CAAC;gBAC3B,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,CACtE,gBAAgB,EAChB,KAAK,CAAC,mBAAmB,CAAC,CAC3B,CAAC;gBACF,SAAS,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,CAAC;YAC3C,CAAC;YAED,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC7B,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC9C,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;YAE3C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBAE1D,mFAAmF;gBACnF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBAE5D,OAAO;oBACL,SAAS;oBACT,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;iBACvD,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,uCAAuC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;YAEnD,OAAO;gBACL,SAAS;gBACT,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC;aAC9C,CAAC;QACJ,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1E,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACrC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC5D,CAAC;IACH,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { Connection } from '@salesforce/core';
1
2
  import { MetadataComponent } from './manifest-service.js';
2
3
  export type FlowMetadata = {
3
4
  apiName: string;
@@ -5,16 +6,27 @@ export type FlowMetadata = {
5
6
  processType?: string;
6
7
  triggerObjectOrEvent?: string;
7
8
  };
9
+ export type FlowTestCoverage = {
10
+ ApexTestClassId: string;
11
+ FlowDefinitionViewId: string;
12
+ TestMethodName: string;
13
+ NumElementsCovered: number;
14
+ NumElementsNotCovered: number;
15
+ };
8
16
  export declare class FlowService {
9
17
  private alwaysArray;
10
18
  private xmlParser;
11
19
  private logger;
20
+ private connection;
21
+ connect(connection: Connection): void;
22
+ /**
23
+ * Gets changed Flow names from the manifest.
24
+ */
25
+ getChangedFlowNames(changedMetadataWithType: MetadataComponent[]): string[];
12
26
  /**
13
- * Gets Flow names that require test coverage.
14
- * If includeAllFlows is true, and any changed flow requires tests, return changed flows plus all flows that require tests.
15
- * Otherwise, returns only the changed flows.
27
+ * Checks if any of the changed flows require test coverage.
16
28
  */
17
- getFlowNames(changedMetadataWithType: MetadataComponent[], includeAllFlows: boolean): Promise<string[]>;
29
+ hasTestableFlowChanged(changedFlowNames: string[], rootPath?: string): Promise<boolean>;
18
30
  /**
19
31
  * Extracts Flow metadata from local Flow definition files.
20
32
  * Parses .flow-meta.xml files to get trigger information.
@@ -28,6 +40,11 @@ export declare class FlowService {
28
40
  * Gets all Flow API names from local Flow definition files.
29
41
  */
30
42
  getAllFlowNames(rootPath?: string): Promise<string[]>;
43
+ /**
44
+ * Gets test class names that cover the specified Flows from Salesforce's FlowTestCoverage records.
45
+ * This queries the Tooling API to find which Apex test classes have previously executed and covered these Flows.
46
+ */
47
+ getFlowTestCoverage(changedFlows: string[] | undefined, includeAllFlows: boolean): Promise<string[]>;
31
48
  /**
32
49
  * Determines if a Flow requires test coverage.
33
50
  * All processes and autolaunched flows require coverage, except Screen Flows.
@@ -4,7 +4,7 @@ import { readFile } from 'fs/promises';
4
4
  import { glob } from 'glob';
5
5
  import { XMLParser } from 'fast-xml-parser';
6
6
  import { Logger } from '@salesforce/core';
7
- import loadsh from 'lodash';
7
+ import loash from 'lodash';
8
8
  import { FLOW } from '../elements/object-types.js';
9
9
  export class FlowService {
10
10
  alwaysArray = ['Flow.processMetadataValues'];
@@ -15,33 +15,28 @@ export class FlowService {
15
15
  isArray: (_, jpath) => this.alwaysArray.includes(jpath),
16
16
  });
17
17
  logger = new Logger('FlowService');
18
+ connection;
19
+ connect(connection) {
20
+ this.connection = connection;
21
+ }
18
22
  /**
19
- * Gets Flow names that require test coverage.
20
- * If includeAllFlows is true, and any changed flow requires tests, return changed flows plus all flows that require tests.
21
- * Otherwise, returns only the changed flows.
23
+ * Gets changed Flow names from the manifest.
22
24
  */
23
- async getFlowNames(changedMetadataWithType, includeAllFlows) {
24
- const changedFlows = changedMetadataWithType.filter((m) => m.type === FLOW).map((m) => m.name);
25
- if (changedFlows.length === 0) {
26
- return [];
25
+ getChangedFlowNames(changedMetadataWithType) {
26
+ return changedMetadataWithType.filter((m) => m.type === FLOW).map((m) => m.name);
27
+ }
28
+ /**
29
+ * Checks if any of the changed flows require test coverage.
30
+ */
31
+ async hasTestableFlowChanged(changedFlowNames, rootPath = 'force-app/main/default/flows') {
32
+ if (changedFlowNames.length === 0) {
33
+ return false;
27
34
  }
28
- // Get metadata for changed flows to check if any require test coverage
29
- const changedFlowMetadata = await this.getFlowMetadata(changedFlows);
35
+ const changedFlowMetadata = await this.getFlowMetadata(changedFlowNames, rootPath);
30
36
  const changedFlowsRequiringTests = changedFlowMetadata.filter((flow) => this.flowRequiresTestCoverage(flow));
31
- this.logger.info('changedFlowMetadata', changedFlowMetadata);
32
- this.logger.info('changedFlowsRequiringTests', changedFlowsRequiringTests);
33
- if (changedFlowsRequiringTests.length && includeAllFlows) {
34
- // Get all flows and filter to only those requiring test coverage
35
- const allFlowNames = await this.getAllFlowNames();
36
- const allFlowsRequiringTests = (await this.getFlowMetadata(allFlowNames))
37
- .filter((flow) => this.flowRequiresTestCoverage(flow))
38
- .map((flow) => flow.apiName);
39
- this.logger.info('changedFlows', changedFlows);
40
- this.logger.info('allFlowNames', allFlowNames);
41
- this.logger.info('allFlowsRequiringTests', allFlowsRequiringTests);
42
- return loadsh.uniq([...changedFlows, ...allFlowsRequiringTests]);
43
- }
44
- return changedFlows;
37
+ this.logger.debug('changedFlowMetadata', changedFlowMetadata);
38
+ this.logger.debug('changedFlowsRequiringTests', changedFlowsRequiringTests);
39
+ return changedFlowsRequiringTests.length > 0;
45
40
  }
46
41
  /**
47
42
  * Extracts Flow metadata from local Flow definition files.
@@ -96,6 +91,39 @@ export class FlowService {
96
91
  return parsedPath.name.replace('.flow-meta', '');
97
92
  });
98
93
  }
94
+ /**
95
+ * Gets test class names that cover the specified Flows from Salesforce's FlowTestCoverage records.
96
+ * This queries the Tooling API to find which Apex test classes have previously executed and covered these Flows.
97
+ */
98
+ async getFlowTestCoverage(changedFlows = [], includeAllFlows) {
99
+ if (!this.connection) {
100
+ throw new Error('Connection not set. Call connect() first.');
101
+ }
102
+ if (changedFlows.length === 0) {
103
+ return [];
104
+ }
105
+ try {
106
+ const result = await this.connection.tooling
107
+ .sobject('FlowTestCoverage')
108
+ .find({
109
+ 'FlowVersion.Definition.DeveloperName': includeAllFlows
110
+ ? { $ne: null }
111
+ : { $in: changedFlows },
112
+ }, {
113
+ 'ApexTestClass.Name': 1,
114
+ 'FlowVersion.Definition.DeveloperName': 1,
115
+ });
116
+ const testClassNames = result
117
+ .map((record) => record.ApexTestClass?.Name)
118
+ .filter(this.isNotNullOrUndefined);
119
+ this.logger.debug('FlowTestCoverage query returned test classes:', testClassNames);
120
+ return loash.uniq(testClassNames);
121
+ }
122
+ catch (error) {
123
+ this.logger.warn('Failed to query FlowTestCoverage:', error);
124
+ return [];
125
+ }
126
+ }
99
127
  /**
100
128
  * Determines if a Flow requires test coverage.
101
129
  * All processes and autolaunched flows require coverage, except Screen Flows.
@@ -1 +1 @@
1
- {"version":3,"file":"flow-service.js","sourceRoot":"","sources":["../../src/services/flow-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flow-service.js","sourceRoot":"","sources":["../../src/services/flow-service.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ Run only related tests
4
4
 
5
5
  # description
6
6
 
7
- Calculates the tests needed to be ran based on the changed metadata given using the Salesforce Dependency API
7
+ Calculates the tests needed to be ran based on the changed metadata given using the Salesforce Dependency API. For Flows, also queries FlowTestCoverage to include test classes that have previously covered the Flows.
8
8
 
9
9
  # examples
10
10
 
@@ -3,7 +3,7 @@
3
3
  "delta:test-classes": {
4
4
  "aliases": [],
5
5
  "args": {},
6
- "description": "Calculates the tests needed to be ran based on the changed metadata given using the Salesforce Dependency API",
6
+ "description": "Calculates the tests needed to be ran based on the changed metadata given using the Salesforce Dependency API. For Flows, also queries FlowTestCoverage to include test classes that have previously covered the Flows.",
7
7
  "examples": [
8
8
  "testCmd=$(sf delta test-classes --target-org matt@never.io.dev)\r\nsf project deploy validate ${testCmd}"
9
9
  ],
@@ -74,5 +74,5 @@
74
74
  ]
75
75
  }
76
76
  },
77
- "version": "0.1.0"
77
+ "version": "0.2.1"
78
78
  }
package/package.json CHANGED
@@ -1,159 +1,215 @@
1
- {
2
- "name": "sf-delta-tests",
3
- "description": "Calculate dependencies and scope to relevant tests",
4
- "version": "0.2.0",
5
- "type": "module",
6
- "dependencies": {
7
- "@oclif/core": "^4.8.0",
8
- "@salesforce/core": "^8.24.0",
9
- "@salesforce/kit": "^3.2.4",
10
- "@salesforce/sf-plugins-core": "^12.2.6",
11
- "@salesforce/source-deploy-retrieve": "^12.31.4",
12
- "fast-xml-parser": "^5.3.3",
13
- "glob": "^13.0.0",
14
- "lodash": "^4.17.21",
15
- "tslib": "^2.8.1"
16
- },
17
- "engines": {
18
- "node": ">=14.0.0"
19
- },
20
- "files": [
21
- "/lib",
22
- "/messages",
23
- "/oclif.manifest.json"
24
- ],
25
- "keywords": [
26
- "force",
27
- "salesforce",
28
- "sfdx",
29
- "salesforcedx",
30
- "sfdx-plugin",
31
- "sf-plugin",
32
- "sf"
33
- ],
34
- "license": "BSD-3-Clause",
35
- "main": "lib/index.js",
36
- "oclif": {
37
- "commands": "./lib/commands",
38
- "bin": "sf",
39
- "topicSeparator": " ",
40
- "devPlugins": [
41
- "@oclif/plugin-help"
42
- ],
43
- "topics": {
44
- "hello": {
45
- "description": "Commands to say hello."
46
- }
47
- }
48
- },
49
- "publishConfig": {
50
- "access": "public"
51
- },
52
- "wireit": {
53
- "build": {
54
- "dependencies": [
55
- "compile",
56
- "lint"
57
- ]
58
- },
59
- "compile": {
60
- "command": "tsc -p . --pretty --incremental",
61
- "files": [
62
- "src/**/*.ts",
63
- "**/tsconfig.json",
64
- "messages/**"
65
- ],
66
- "output": [
67
- "lib/**",
68
- "*.tsbuildinfo"
69
- ],
70
- "clean": "if-file-deleted"
71
- },
72
- "format": {
73
- "command": "prettier --write \"+(src|test|schemas)/**/*.+(ts|js|json)|command-snapshot.json\"",
74
- "files": [
75
- "src/**/*.ts",
76
- "test/**/*.ts",
77
- "schemas/**/*.json",
78
- "command-snapshot.json",
79
- ".prettier*"
80
- ],
81
- "output": []
82
- },
83
- "lint": {
84
- "command": "eslint src test --color --cache --cache-location .eslintcache",
85
- "files": [
86
- "src/**/*.ts",
87
- "test/**/*.ts",
88
- "messages/**",
89
- "**/.eslint*",
90
- "**/tsconfig.json"
91
- ],
92
- "output": []
93
- },
94
- "test:compile": {
95
- "command": "tsc -p \"./test\" --pretty",
96
- "files": [
97
- "test/**/*.ts",
98
- "**/tsconfig.json"
99
- ],
100
- "output": []
101
- },
102
- "test": {
103
- "dependencies": [
104
- "test:compile",
105
- "test:only",
106
- "lint"
107
- ]
108
- },
109
- "test:only": {
110
- "command": "nyc mocha \"test/**/*.test.ts\"",
111
- "env": {
112
- "FORCE_COLOR": "2"
113
- },
114
- "files": [
115
- "test/**/*.ts",
116
- "src/**/*.ts",
117
- "**/tsconfig.json",
118
- ".mocha*",
119
- "!*.nut.ts",
120
- ".nycrc"
121
- ],
122
- "output": []
123
- },
124
- "test:command-reference": {
125
- "command": "\"./bin/dev\" commandreference:generate --erroronwarnings",
126
- "files": [
127
- "src/**/*.ts",
128
- "messages/**",
129
- "package.json"
130
- ],
131
- "output": [
132
- "tmp/root"
133
- ]
134
- },
135
- "test:deprecation-policy": {
136
- "command": "\"./bin/dev\" snapshot:compare",
137
- "files": [
138
- "src/**/*.ts"
139
- ],
140
- "output": [],
141
- "dependencies": [
142
- "compile"
143
- ]
144
- },
145
- "test:json-schema": {
146
- "command": "\"./bin/dev\" schema:compare",
147
- "files": [
148
- "src/**/*.ts",
149
- "schemas"
150
- ],
151
- "output": []
152
- }
153
- },
154
- "author": "matthew-gladman",
155
- "volta": {
156
- "node": "24.12.0",
157
- "yarn": "1.22.22"
158
- }
159
- }
1
+ {
2
+ "name": "sf-delta-tests",
3
+ "description": "Calculate dependencies and scope to relevant tests",
4
+ "version": "0.2.1",
5
+ "type": "module",
6
+ "dependencies": {
7
+ "@oclif/core": "^4.8.0",
8
+ "@salesforce/core": "^8.24.0",
9
+ "@salesforce/kit": "^3.2.4",
10
+ "@salesforce/sf-plugins-core": "^12.2.6",
11
+ "@salesforce/source-deploy-retrieve": "^12.31.4",
12
+ "fast-xml-parser": "^5.3.3",
13
+ "glob": "^13.0.0",
14
+ "lodash": "^4.17.21",
15
+ "tslib": "^2.8.1"
16
+ },
17
+ "devDependencies": {
18
+ "@salesforce/dev-config": "^4.3.2",
19
+ "@salesforce/dev-scripts": "^11.0.4",
20
+ "@salesforce/prettier-config": "^0.0.4",
21
+ "@salesforce/ts-sinon": "^1.4.31",
22
+ "@swc/core": "^1.15.8",
23
+ "@types/inquirer": "^9.0.9",
24
+ "@types/lodash": "^4.17.23",
25
+ "@types/node": "24.10.7",
26
+ "@typescript-eslint/eslint-plugin": "^5.59.8",
27
+ "@typescript-eslint/parser": "^5.62.0",
28
+ "chai": "^6.2.2",
29
+ "clean-publish": "^6.0.1",
30
+ "eslint": "^8.47.0",
31
+ "eslint-config-prettier": "^8.5.0",
32
+ "eslint-config-salesforce": "^2.0.1",
33
+ "eslint-config-salesforce-typescript": "^1.1.2",
34
+ "eslint-plugin-import": "2.27.5",
35
+ "eslint-plugin-jsdoc": "^46.4.6",
36
+ "eslint-plugin-sf-plugin": "^1.16.2",
37
+ "husky": "^9.1.7",
38
+ "mocha": "^11.7.5",
39
+ "nyc": "^17.1.0",
40
+ "oclif": "^4.22.65",
41
+ "prettier": "^3.7.4",
42
+ "pretty-quick": "^4.2.2",
43
+ "shx": "^0.4.0",
44
+ "sinon": "^21.0.1",
45
+ "ts-node": "^10.9.2",
46
+ "typescript": "^5.9.3",
47
+ "wireit": "^0.14.12"
48
+ },
49
+ "engines": {
50
+ "node": ">=14.0.0"
51
+ },
52
+ "files": [
53
+ "/lib",
54
+ "/messages",
55
+ "/oclif.manifest.json"
56
+ ],
57
+ "keywords": [
58
+ "force",
59
+ "salesforce",
60
+ "sfdx",
61
+ "salesforcedx",
62
+ "sfdx-plugin",
63
+ "sf-plugin",
64
+ "sf"
65
+ ],
66
+ "license": "BSD-3-Clause",
67
+ "main": "lib/index.js",
68
+ "oclif": {
69
+ "commands": "./lib/commands",
70
+ "bin": "sf",
71
+ "topicSeparator": " ",
72
+ "devPlugins": [
73
+ "@oclif/plugin-help"
74
+ ],
75
+ "topics": {
76
+ "hello": {
77
+ "description": "Commands to say hello."
78
+ }
79
+ }
80
+ },
81
+ "scripts": {
82
+ "build": "wireit",
83
+ "clean": "sf-clean",
84
+ "clean-all": "sf-clean all",
85
+ "clean:lib": "shx rm -rf lib && shx rm -rf coverage && shx rm -rf .nyc_output && shx rm -f oclif.manifest.json",
86
+ "compile": "wireit",
87
+ "docs": "sf-docs",
88
+ "format": "wireit",
89
+ "lint": "wireit",
90
+ "postinstall": "yarn husky install",
91
+ "postpack": "shx rm -f oclif.manifest.json",
92
+ "prepublish": "sf-prepack",
93
+ "postpublish": "shx rm -f oclif.manifest.json",
94
+ "publish": "clean-publish --fields scripts",
95
+ "prepack": "sf-prepack",
96
+ "test": "wireit",
97
+ "test:nuts": "nyc mocha \"**/*.nut.ts\" --slow 4500 --timeout 600000 --parallel",
98
+ "test:only": "wireit",
99
+ "version": "oclif readme",
100
+ "prepare": "husky"
101
+ },
102
+ "publishConfig": {
103
+ "access": "public"
104
+ },
105
+ "wireit": {
106
+ "build": {
107
+ "dependencies": [
108
+ "compile",
109
+ "lint"
110
+ ]
111
+ },
112
+ "compile": {
113
+ "command": "tsc -p . --pretty --incremental",
114
+ "files": [
115
+ "src/**/*.ts",
116
+ "**/tsconfig.json",
117
+ "messages/**"
118
+ ],
119
+ "output": [
120
+ "lib/**",
121
+ "*.tsbuildinfo"
122
+ ],
123
+ "clean": "if-file-deleted"
124
+ },
125
+ "format": {
126
+ "command": "prettier --write \"+(src|test|schemas)/**/*.+(ts|js|json)|command-snapshot.json\"",
127
+ "files": [
128
+ "src/**/*.ts",
129
+ "test/**/*.ts",
130
+ "schemas/**/*.json",
131
+ "command-snapshot.json",
132
+ ".prettier*"
133
+ ],
134
+ "output": []
135
+ },
136
+ "lint": {
137
+ "command": "eslint src test --color --cache --cache-location .eslintcache",
138
+ "files": [
139
+ "src/**/*.ts",
140
+ "test/**/*.ts",
141
+ "messages/**",
142
+ "**/.eslint*",
143
+ "**/tsconfig.json"
144
+ ],
145
+ "output": []
146
+ },
147
+ "test:compile": {
148
+ "command": "tsc -p \"./test\" --pretty",
149
+ "files": [
150
+ "test/**/*.ts",
151
+ "**/tsconfig.json"
152
+ ],
153
+ "output": []
154
+ },
155
+ "test": {
156
+ "dependencies": [
157
+ "test:compile",
158
+ "test:only",
159
+ "lint"
160
+ ]
161
+ },
162
+ "test:only": {
163
+ "command": "nyc mocha \"test/**/*.test.ts\"",
164
+ "env": {
165
+ "FORCE_COLOR": "2"
166
+ },
167
+ "files": [
168
+ "test/**/*.ts",
169
+ "src/**/*.ts",
170
+ "**/tsconfig.json",
171
+ ".mocha*",
172
+ "!*.nut.ts",
173
+ ".nycrc"
174
+ ],
175
+ "output": []
176
+ },
177
+ "test:command-reference": {
178
+ "command": "\"./bin/dev\" commandreference:generate --erroronwarnings",
179
+ "files": [
180
+ "src/**/*.ts",
181
+ "messages/**",
182
+ "package.json"
183
+ ],
184
+ "output": [
185
+ "tmp/root"
186
+ ]
187
+ },
188
+ "test:deprecation-policy": {
189
+ "command": "\"./bin/dev\" snapshot:compare",
190
+ "files": [
191
+ "src/**/*.ts"
192
+ ],
193
+ "output": [],
194
+ "dependencies": [
195
+ "compile"
196
+ ]
197
+ },
198
+ "test:json-schema": {
199
+ "command": "\"./bin/dev\" schema:compare",
200
+ "files": [
201
+ "src/**/*.ts",
202
+ "schemas"
203
+ ],
204
+ "output": []
205
+ }
206
+ },
207
+ "author": "matthew-gladman",
208
+ "volta": {
209
+ "node": "24.12.0",
210
+ "yarn": "1.22.22"
211
+ },
212
+ "clean-publish": {
213
+ "packageManager": "yarn"
214
+ }
215
+ }