apextestlist 1.0.2 → 1.1.0
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/apextests/list.d.ts +3 -1
- package/lib/commands/apextests/list.js +51 -4
- package/lib/commands/apextests/list.js.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/messages/apextests.list.md +9 -0
- package/oclif.lock +2348 -1534
- package/oclif.manifest.json +13 -2
- package/package.json +9 -7
- package/npm-shrinkwrap.json +0 -23647
|
@@ -10,10 +10,12 @@ export default class ApextestsList extends SfCommand<ApextestsListResult> {
|
|
|
10
10
|
static readonly flags: {
|
|
11
11
|
directory: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
format: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
manifest: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
14
|
};
|
|
14
15
|
protected static getConcurrencyThreshold(): number;
|
|
15
16
|
private static parseTestsNames;
|
|
16
|
-
private static
|
|
17
|
+
private static searchTestClasses;
|
|
17
18
|
private static formatList;
|
|
19
|
+
private static extractClassNamesFromManifestFile;
|
|
18
20
|
run(): Promise<ApextestsListResult>;
|
|
19
21
|
}
|
|
@@ -3,6 +3,7 @@ import { availableParallelism } from 'node:os';
|
|
|
3
3
|
import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
|
|
4
4
|
import { Messages } from '@salesforce/core';
|
|
5
5
|
import { queue } from 'async';
|
|
6
|
+
import { Parser } from 'xml2js';
|
|
6
7
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
7
8
|
const messages = Messages.loadMessages('apextestlist', 'apextests.list');
|
|
8
9
|
const TEST_NAME_REGEX = /(@(Tests|TestSuites)).+/g;
|
|
@@ -23,7 +24,12 @@ export default class ApextestsList extends SfCommand {
|
|
|
23
24
|
char: 'f',
|
|
24
25
|
required: false,
|
|
25
26
|
}),
|
|
26
|
-
|
|
27
|
+
manifest: Flags.string({
|
|
28
|
+
summary: messages.getMessage('flags.manifest.summary'),
|
|
29
|
+
description: messages.getMessage('flags.manifest.description'),
|
|
30
|
+
char: 'x',
|
|
31
|
+
required: false,
|
|
32
|
+
}),
|
|
27
33
|
};
|
|
28
34
|
static getConcurrencyThreshold() {
|
|
29
35
|
const AVAILABLE_PARALLELISM = availableParallelism ? availableParallelism() : Infinity;
|
|
@@ -41,7 +47,7 @@ export default class ApextestsList extends SfCommand {
|
|
|
41
47
|
.map((line) => line.trim())
|
|
42
48
|
.filter((line) => line);
|
|
43
49
|
}
|
|
44
|
-
static async
|
|
50
|
+
static async searchTestClasses(directory, names) {
|
|
45
51
|
const testMethodsNames = [];
|
|
46
52
|
// check if the provided directory exists
|
|
47
53
|
if (!directory) {
|
|
@@ -54,7 +60,19 @@ export default class ApextestsList extends SfCommand {
|
|
|
54
60
|
catch (error) {
|
|
55
61
|
throw new Error('Invalid directory.');
|
|
56
62
|
}
|
|
57
|
-
const localFiles = readDir.filter((file) =>
|
|
63
|
+
const localFiles = readDir.filter((file) => {
|
|
64
|
+
if (!file.endsWith('.cls') && !file.endsWith('.trigger')) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const fileFullName = file.split('/').pop()?.split('.');
|
|
68
|
+
if (!names) {
|
|
69
|
+
return fileFullName;
|
|
70
|
+
}
|
|
71
|
+
if (fileFullName && fileFullName.length > 0) {
|
|
72
|
+
const formattedName = `${fileFullName[1] === 'cls' ? 'ApexClass' : 'ApexTrigger'}:${fileFullName[0]}`;
|
|
73
|
+
return names.includes(formattedName);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
58
76
|
const handler = (fileName) => {
|
|
59
77
|
const path = `${directory}/${fileName}`;
|
|
60
78
|
const data = fs.readFileSync(path, 'utf-8');
|
|
@@ -87,16 +105,45 @@ export default class ApextestsList extends SfCommand {
|
|
|
87
105
|
throw new Error('Invalid format.');
|
|
88
106
|
}
|
|
89
107
|
}
|
|
108
|
+
static async extractClassNamesFromManifestFile(manifestFile) {
|
|
109
|
+
const result = [];
|
|
110
|
+
if (!manifestFile || !fs.existsSync(manifestFile)) {
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
const xmlParser = new Parser();
|
|
114
|
+
await xmlParser
|
|
115
|
+
.parseStringPromise(fs.readFileSync(manifestFile, 'utf-8'))
|
|
116
|
+
.then((parsed) => {
|
|
117
|
+
parsed.Package.types.forEach((type) => {
|
|
118
|
+
if (type.name.includes('ApexClass') || type.name.includes('ApexTrigger')) {
|
|
119
|
+
type.members.forEach((member) => {
|
|
120
|
+
result.push(`${type.name}:${member}`);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
})
|
|
125
|
+
.catch((error) => {
|
|
126
|
+
throw error;
|
|
127
|
+
});
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
90
130
|
async run() {
|
|
91
131
|
const { flags } = await this.parse(ApextestsList);
|
|
92
132
|
const directory = flags.directory ?? '.';
|
|
93
133
|
const format = flags.format ?? 'sf';
|
|
134
|
+
const manifest = flags.manifest ?? undefined;
|
|
94
135
|
if (!directory) {
|
|
95
136
|
throw new Error('Directory must be provided.');
|
|
96
137
|
}
|
|
97
138
|
let result = null;
|
|
139
|
+
let testClassesNames = null;
|
|
140
|
+
if (manifest) {
|
|
141
|
+
// If a manifest file was provided, we read the name of the test classes
|
|
142
|
+
// from it and then we try to find those in the provided directory.
|
|
143
|
+
testClassesNames = await ApextestsList.extractClassNamesFromManifestFile(manifest);
|
|
144
|
+
}
|
|
98
145
|
if (directory) {
|
|
99
|
-
result = ApextestsList.formatList(format, await ApextestsList.
|
|
146
|
+
result = ApextestsList.formatList(format, await ApextestsList.searchTestClasses(directory, testClassesNames));
|
|
100
147
|
}
|
|
101
148
|
if (!result) {
|
|
102
149
|
throw new Error('No directory or manifest provided');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/apextests/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/apextests/list.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
ADDED
package/lib/index.js
ADDED
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe,EAAE,CAAC"}
|
|
@@ -22,7 +22,16 @@ Format of the output.
|
|
|
22
22
|
|
|
23
23
|
By default, the format being returned is a list in the format that can be merged with the test flags of the Salesforce CLI deploy and validate commands. Available formats are `sf` (default) and `csv`.
|
|
24
24
|
|
|
25
|
+
# flags.manifest.summary
|
|
26
|
+
|
|
27
|
+
Manifest XML file.
|
|
28
|
+
|
|
29
|
+
# flags.manifest.description
|
|
30
|
+
|
|
31
|
+
When you specify a manifest file, the plugin will not search directories for all classes with annotations, but instead will read the manifest file and search for those classes within the specified directory.
|
|
32
|
+
|
|
25
33
|
# examples
|
|
26
34
|
|
|
27
35
|
- <%= config.bin %> <%= command.id %> --format csv
|
|
28
36
|
- <%= config.bin %> <%= command.id %> --format sf --directory force-app
|
|
37
|
+
- <%= config.bin %> <%= command.id %> --format sf --manifest package.xml
|