sf-delta-tests 0.0.25 → 0.0.27
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/lib/commands/delta/test-classes.d.ts +1 -0
- package/lib/commands/delta/test-classes.js +18 -9
- package/lib/commands/delta/test-classes.js.map +1 -1
- package/lib/services/cli-service.d.ts +1 -1
- package/lib/services/cli-service.js +3 -2
- package/lib/services/cli-service.js.map +1 -1
- package/messages/delta.test-classes.md +6 -2
- package/oclif.manifest.json +8 -2
- package/package.json +1 -1
|
@@ -16,6 +16,7 @@ export default class TestClasses extends SfCommand<DeltaTestClassesResult> {
|
|
|
16
16
|
static readonly flags: {
|
|
17
17
|
'target-org': import("@oclif/core/lib/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
18
18
|
'package-path': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
19
|
+
'always-run-test': import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
19
20
|
};
|
|
20
21
|
private dependencyService;
|
|
21
22
|
private apexClassService;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const sf_plugins_core_1 = require("@salesforce/sf-plugins-core");
|
|
4
4
|
const core_1 = require("@salesforce/core");
|
|
5
|
+
const lodash_1 = require("lodash");
|
|
5
6
|
const dependency_service_1 = require("../../services/dependency-service");
|
|
6
7
|
const apex_class_service_1 = require("../../services/apex-class-service");
|
|
7
8
|
const manifest_service_1 = require("../../services/manifest-service");
|
|
@@ -38,10 +39,10 @@ class TestClasses extends sf_plugins_core_1.SfCommand {
|
|
|
38
39
|
// If no meaningful changed metadata, no need to run tests (layout changes don't need tests!)
|
|
39
40
|
if (changedMetadata.length === 0) {
|
|
40
41
|
this.debug('No meaningful changed metadata, do not run any tests. (example, layout changes do not need tests ran)');
|
|
41
|
-
this.log(this.cliService.noTests());
|
|
42
|
+
this.log(this.cliService.noTests(flags['always-run-test']));
|
|
42
43
|
return {
|
|
43
44
|
testNames: [],
|
|
44
|
-
cli: this.cliService.noTests(),
|
|
45
|
+
cli: this.cliService.noTests(flags['always-run-test']),
|
|
45
46
|
};
|
|
46
47
|
}
|
|
47
48
|
// Too many changes, just run all
|
|
@@ -53,19 +54,23 @@ class TestClasses extends sf_plugins_core_1.SfCommand {
|
|
|
53
54
|
this.debug('Calculating the related apex classes...');
|
|
54
55
|
// The magic function. From the changed metadata get all the Apex Classes that could be connected to the changed metadata
|
|
55
56
|
const classList = this.dependencyService.getRelatedApexClasses(combinedApexClassData, changedMetadata);
|
|
57
|
+
const unknownEntities = (0, lodash_1.difference)(changedMetadata, classList);
|
|
56
58
|
this.debug({ classList });
|
|
59
|
+
this.debug({ unknownEntities });
|
|
57
60
|
this.debug('Filtering the apex classes to only tests...');
|
|
58
|
-
// Filter the total class list to only tests
|
|
59
|
-
const testNames = await this.apexClassService.filterApexTest(classList);
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
// Filter the total class list to only tests. Also include all unknown entities (ie, newly added data)
|
|
62
|
+
const testNames = await this.apexClassService.filterApexTest([...classList, ...unknownEntities]);
|
|
63
|
+
this.debug({ testNames });
|
|
64
|
+
if (flags['always-run-test']) {
|
|
65
|
+
testNames.push(...flags['always-run-test']);
|
|
66
|
+
}
|
|
62
67
|
if (testNames.length === 0) {
|
|
63
68
|
this.debug('No relevant tests found, skip running tests');
|
|
64
69
|
// TODO: Debate this one, if we found no relevant tests, should all or none be ran?
|
|
65
|
-
this.log(this.cliService.noTests());
|
|
70
|
+
this.log(this.cliService.noTests(flags['always-run-test']));
|
|
66
71
|
return {
|
|
67
72
|
testNames,
|
|
68
|
-
cli: this.cliService.noTests(),
|
|
73
|
+
cli: this.cliService.noTests(flags['always-run-test']),
|
|
69
74
|
};
|
|
70
75
|
}
|
|
71
76
|
this.debug(`Found meaningful and related tests: ${testNames.join(', ')}`);
|
|
@@ -95,11 +100,15 @@ TestClasses.flags = {
|
|
|
95
100
|
char: 'o',
|
|
96
101
|
required: true,
|
|
97
102
|
}),
|
|
98
|
-
'package-path': sf_plugins_core_1.Flags.
|
|
103
|
+
'package-path': sf_plugins_core_1.Flags.directory({
|
|
99
104
|
summary: messages.getMessage('flags.package-path.summary'),
|
|
100
105
|
char: 'p',
|
|
101
106
|
default: 'manifest/package.xml',
|
|
102
107
|
}),
|
|
108
|
+
'always-run-test': sf_plugins_core_1.Flags.string({
|
|
109
|
+
summary: messages.getMessage('flags.always-run-test.summary'),
|
|
110
|
+
multiple: true,
|
|
111
|
+
}),
|
|
103
112
|
};
|
|
104
113
|
exports.default = TestClasses;
|
|
105
114
|
//# sourceMappingURL=test-classes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-classes.js","sourceRoot":"","sources":["../../../src/commands/delta/test-classes.ts"],"names":[],"mappings":";;AAAA,iEAA+D;AAC/D,2CAA4C;AAE5C,0EAAsE;AACtE,0EAAqE;AACrE,sEAAkE;AAClE,kEAA8D;AAC9D,4DAAwD;AAExD,eAAQ,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAC5C,MAAM,QAAQ,GAAG,eAAQ,CAAC,YAAY,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;AAO/E,MAAqB,WAAY,SAAQ,2BAAiC;
|
|
1
|
+
{"version":3,"file":"test-classes.js","sourceRoot":"","sources":["../../../src/commands/delta/test-classes.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,9 @@ class CliService {
|
|
|
10
10
|
allTests() {
|
|
11
11
|
return '--test-level=RunLocalTests';
|
|
12
12
|
}
|
|
13
|
-
noTests() {
|
|
14
|
-
|
|
13
|
+
noTests(optionalTests) {
|
|
14
|
+
const testList = optionalTests?.map((test) => (test.includes(' ') ? `"${test}"` : test)) ?? [];
|
|
15
|
+
return `--test-level=RunSpecifiedTests --tests=SFDeltaTests-NoTest ${testList.join(' ')}`.trimEnd();
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
exports.CliService = CliService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-service.js","sourceRoot":"","sources":["../../src/services/cli-service.ts"],"names":[],"mappings":";;;AAAA,2CAA2C;AAC3C,MAAa,UAAU;IACd,aAAa,CAAC,KAAe;QAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAChF,OAAO,0CAA0C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACxE,CAAC;IAEM,QAAQ;QACb,OAAO,4BAA4B,CAAC;IACtC,CAAC;IAEM,OAAO;
|
|
1
|
+
{"version":3,"file":"cli-service.js","sourceRoot":"","sources":["../../src/services/cli-service.ts"],"names":[],"mappings":";;;AAAA,2CAA2C;AAC3C,MAAa,UAAU;IACd,aAAa,CAAC,KAAe;QAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAChF,OAAO,0CAA0C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACxE,CAAC;IAEM,QAAQ;QACb,OAAO,4BAA4B,CAAC;IACtC,CAAC;IAEM,OAAO,CAAC,aAAwB;QACrC,MAAM,QAAQ,GAAG,aAAa,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/F,OAAO,8DAA8D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;IACtG,CAAC;CACF;AAdD,gCAcC"}
|
|
@@ -8,8 +8,8 @@ Calculates the tests needed to be ran based on the changed metadata given using
|
|
|
8
8
|
|
|
9
9
|
# examples
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
sf project deploy validate ${
|
|
11
|
+
testCmd=$(sf delta test-classes --target-org matt@never.io.dev)
|
|
12
|
+
sf project deploy validate ${testCmd}
|
|
13
13
|
|
|
14
14
|
# flags.target-org.summary
|
|
15
15
|
|
|
@@ -18,3 +18,7 @@ The org you want to check the dependencies against.
|
|
|
18
18
|
# flags.package-path.summary
|
|
19
19
|
|
|
20
20
|
Path to the package.xml that will be deployed.
|
|
21
|
+
|
|
22
|
+
# flags.always-run-test.summary
|
|
23
|
+
|
|
24
|
+
A test class to run when no tests need to be ran.
|
package/oclif.manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.0.
|
|
2
|
+
"version": "0.0.27",
|
|
3
3
|
"commands": {
|
|
4
4
|
"delta:test-classes": {
|
|
5
5
|
"id": "delta:test-classes",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"pluginType": "core",
|
|
12
12
|
"aliases": [],
|
|
13
13
|
"examples": [
|
|
14
|
-
"
|
|
14
|
+
"testCmd=$(sf delta test-classes --target-org matt@never.io.dev)\nsf project deploy validate ${testCmd}"
|
|
15
15
|
],
|
|
16
16
|
"flags": {
|
|
17
17
|
"json": {
|
|
@@ -36,6 +36,12 @@
|
|
|
36
36
|
"summary": "Path to the package.xml that will be deployed.",
|
|
37
37
|
"multiple": false,
|
|
38
38
|
"default": "manifest/package.xml"
|
|
39
|
+
},
|
|
40
|
+
"always-run-test": {
|
|
41
|
+
"name": "always-run-test",
|
|
42
|
+
"type": "option",
|
|
43
|
+
"summary": "A test class to run when no tests need to be ran.",
|
|
44
|
+
"multiple": true
|
|
39
45
|
}
|
|
40
46
|
},
|
|
41
47
|
"args": {},
|