apextestlist 1.9.5 → 1.10.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/CHANGELOG.md +7 -0
- package/README.md +12 -5
- package/lib/commands/apextests/list.d.ts +1 -0
- package/lib/commands/apextests/list.js +9 -1
- package/lib/commands/apextests/list.js.map +1 -1
- package/lib/helpers/constants.d.ts +1 -0
- package/lib/helpers/constants.js +1 -0
- package/lib/helpers/constants.js.map +1 -1
- package/lib/helpers/getPackageDirectories.d.ts +1 -1
- package/lib/helpers/getPackageDirectories.js +14 -18
- package/lib/helpers/getPackageDirectories.js.map +1 -1
- package/lib/helpers/getRepoRoot.js +19 -25
- package/lib/helpers/getRepoRoot.js.map +1 -1
- package/lib/helpers/validateTests.js +16 -21
- package/lib/helpers/validateTests.js.map +1 -1
- package/messages/apextests.list.md +9 -0
- package/oclif.manifest.json +13 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,13 @@
|
|
|
5
5
|
|
|
6
6
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
7
7
|
|
|
8
|
+
## [1.10.0](https://github.com/renatoliveira/apex-test-list/compare/v1.9.5...v1.10.0) (2025-01-20)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* ignore package directories ([4909eb7](https://github.com/renatoliveira/apex-test-list/commit/4909eb7f6cb497a3fdb1b0f78d747dff9f2c703e))
|
|
14
|
+
|
|
8
15
|
## [1.9.5](https://github.com/renatoliveira/apex-test-list/compare/v1.9.4...v1.9.5) (2024-12-21)
|
|
9
16
|
|
|
10
17
|
|
package/README.md
CHANGED
|
@@ -65,13 +65,16 @@ sf project deploy start --tests SampleTest SuperSampleTest Sample2Test SuperSamp
|
|
|
65
65
|
|
|
66
66
|
```
|
|
67
67
|
USAGE
|
|
68
|
-
$ sf apextests list -f <value> -x <value> -s [--json]
|
|
68
|
+
$ sf apextests list -f <value> -x <value> -s -d <value> [--json]
|
|
69
69
|
|
|
70
70
|
FLAGS
|
|
71
|
-
-f, --format=<value>
|
|
72
|
-
|
|
73
|
-
-x, --manifest=<value>
|
|
74
|
-
-s, --ignore-missing-tests
|
|
71
|
+
-f, --format=<value> 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.
|
|
72
|
+
Available formats are `sf` (default) and `csv`.
|
|
73
|
+
-x, --manifest=<value> Manifest XML file (package.xml).
|
|
74
|
+
-s, --ignore-missing-tests [default: false] If this Boolean flag is provided, ignore test methods that are not found in any of your local package directories.
|
|
75
|
+
-d, --ignore-package-directory Ignore a package directory when looking for test annotations.
|
|
76
|
+
Should match how they are declared in the "sfdx-project.json".
|
|
77
|
+
Can be declared multiple times.
|
|
75
78
|
|
|
76
79
|
GLOBAL FLAGS
|
|
77
80
|
--json Format output as json.
|
|
@@ -96,4 +99,8 @@ EXAMPLES
|
|
|
96
99
|
|
|
97
100
|
$ sf apextests list --format sf --ignore-missing-tests
|
|
98
101
|
|
|
102
|
+
List all test annotations except for those found in the "force-app" directory.
|
|
103
|
+
|
|
104
|
+
$ sf apextests list -d "force-app"
|
|
105
|
+
|
|
99
106
|
```
|
|
@@ -11,6 +11,7 @@ export default class ApextestsList extends SfCommand<ApextestsListResult> {
|
|
|
11
11
|
format: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
manifest: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
13
|
'ignore-missing-tests': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
'ignore-package-directory': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
15
|
};
|
|
15
16
|
run(): Promise<ApextestsListResult>;
|
|
16
17
|
}
|
|
@@ -34,17 +34,25 @@ export default class ApextestsList extends SfCommand {
|
|
|
34
34
|
char: 's',
|
|
35
35
|
default: false,
|
|
36
36
|
}),
|
|
37
|
+
'ignore-package-directory': Flags.directory({
|
|
38
|
+
summary: messages.getMessage('flags.ignore-package-directory.summary'),
|
|
39
|
+
description: messages.getMessage('flags.ignore-package-directory.description'),
|
|
40
|
+
char: 'd',
|
|
41
|
+
required: false,
|
|
42
|
+
multiple: true,
|
|
43
|
+
}),
|
|
37
44
|
};
|
|
38
45
|
async run() {
|
|
39
46
|
const { flags } = await this.parse(ApextestsList);
|
|
40
47
|
const format = flags.format ?? 'sf';
|
|
41
48
|
const manifest = flags.manifest ?? undefined;
|
|
42
49
|
const ignoreMissingTests = flags['ignore-missing-tests'] ?? false;
|
|
50
|
+
const ignoreDirs = flags['ignore-package-directory'] ?? [];
|
|
43
51
|
let result = null;
|
|
44
52
|
let testClassesNames = null;
|
|
45
53
|
const testSuitesNames = [];
|
|
46
54
|
// Get package directories full paths
|
|
47
|
-
const packageDirectories = await getPackageDirectories();
|
|
55
|
+
const packageDirectories = await getPackageDirectories(ignoreDirs);
|
|
48
56
|
if (manifest) {
|
|
49
57
|
const manifesMetadata = await extractTypeNamesFromManifestFile(manifest);
|
|
50
58
|
testClassesNames = manifesMetadata.filter((name) => !name.endsWith('testSuite-meta.xml'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/apextests/list.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,YAAY,CAAC;AACb,qCAAqC;AAErC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,6BAA6B,EAAE,uCAAuC,EAAE,MAAM,0BAA0B,CAAC;AAGlH,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;AAQzE,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAA8B;IAChE,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;IAE5D,MAAM,CAAU,KAAK,GAAG;QAC7B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,sBAAsB,CAAC;YACpD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC;YAC5D,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YACrB,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,wBAAwB,CAAC;YACtD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,4BAA4B,CAAC;YAC9D,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,sBAAsB,EAAE,KAAK,CAAC,OAAO,CAAC;YACpC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,oCAAoC,CAAC;YAClE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,wCAAwC,CAAC;YAC1E,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC;QAC7C,MAAM,kBAAkB,GAAG,KAAK,CAAC,sBAAsB,CAAC,IAAI,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/apextests/list.ts"],"names":[],"mappings":"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"}
|
package/lib/helpers/constants.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/helpers/constants.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/helpers/constants.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAC1D,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function getPackageDirectories(): Promise<string[]>;
|
|
1
|
+
export declare function getPackageDirectories(ignoreDirs: string[]): Promise<string[]>;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
|
|
3
|
-
import { resolve, join } from 'node:path';
|
|
2
|
+
import { resolve, join, basename } from 'node:path';
|
|
4
3
|
import { readFile, readdir, stat } from 'node:fs/promises';
|
|
5
4
|
import { getRepoRoot } from './getRepoRoot.js';
|
|
6
|
-
|
|
7
|
-
export async function getPackageDirectories() {
|
|
5
|
+
import { SEARCHABLE_METADATA_FOLDERS } from './constants.js';
|
|
6
|
+
export async function getPackageDirectories(ignoreDirs) {
|
|
8
7
|
const { repoRoot, dxConfigFilePath } = await getRepoRoot();
|
|
9
8
|
if (!repoRoot || !dxConfigFilePath) {
|
|
10
9
|
throw new Error('Failed to retrieve repository root or sfdx-project.json path.');
|
|
@@ -12,31 +11,28 @@ export async function getPackageDirectories() {
|
|
|
12
11
|
process.chdir(repoRoot);
|
|
13
12
|
const sfdxProjectRaw = await readFile(dxConfigFilePath, 'utf-8');
|
|
14
13
|
const sfdxProject = JSON.parse(sfdxProjectRaw);
|
|
15
|
-
const packageDirectories = sfdxProject.packageDirectories
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if (mdPath.length > 0) {
|
|
20
|
-
metadataPaths.push(...mdPath);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
14
|
+
const packageDirectories = sfdxProject.packageDirectories
|
|
15
|
+
.map((directory) => resolve(repoRoot, directory.path))
|
|
16
|
+
.filter((directory) => !ignoreDirs.includes(basename(directory)));
|
|
17
|
+
const metadataPaths = (await Promise.all(packageDirectories.map((directory) => searchForSubFolders(directory, SEARCHABLE_METADATA_FOLDERS)))).flat();
|
|
23
18
|
return metadataPaths;
|
|
24
19
|
}
|
|
25
20
|
async function searchForSubFolders(dxDirectory, subDirectoryNames) {
|
|
26
21
|
const foundPaths = [];
|
|
27
22
|
const files = await readdir(dxDirectory);
|
|
28
|
-
|
|
23
|
+
const subfolderChecks = await Promise.all(files.map(async (file) => {
|
|
29
24
|
const filePath = join(dxDirectory, file);
|
|
30
25
|
const stats = await stat(filePath);
|
|
31
|
-
// Check if current directory is one of the desired sub-folders
|
|
32
26
|
if (stats.isDirectory() && subDirectoryNames.includes(file)) {
|
|
33
|
-
|
|
27
|
+
return [filePath];
|
|
34
28
|
}
|
|
35
|
-
// Recursively search sub-directories that aren't the target folders
|
|
36
29
|
else if (stats.isDirectory()) {
|
|
37
|
-
|
|
38
|
-
foundPaths.push(...result);
|
|
30
|
+
return searchForSubFolders(filePath, subDirectoryNames);
|
|
39
31
|
}
|
|
32
|
+
return [];
|
|
33
|
+
}));
|
|
34
|
+
for (const paths of subfolderChecks) {
|
|
35
|
+
foundPaths.push(...paths);
|
|
40
36
|
}
|
|
41
37
|
return foundPaths;
|
|
42
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPackageDirectories.js","sourceRoot":"","sources":["../../src/helpers/getPackageDirectories.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"getPackageDirectories.js","sourceRoot":"","sources":["../../src/helpers/getPackageDirectories.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAoB;IAC9D,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;IAE3D,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,MAAM,cAAc,GAAW,MAAM,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACzE,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAgB,CAAC;IAC3E,MAAM,kBAAkB,GAAG,WAAW,CAAC,kBAAkB;SACxD,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;SACrD,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAElE,MAAM,aAAa,GAAG,CACpB,MAAM,OAAO,CAAC,GAAG,CACf,kBAAkB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC,CACnG,CACF,CAAC,IAAI,EAAE,CAAC;IAET,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,WAAmB,EAAE,iBAA2B;IACjF,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IAEzC,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEnC,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/B,OAAO,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CACH,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -1,32 +1,26 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
/* eslint-disable no-await-in-loop */
|
|
3
2
|
import { access } from 'node:fs/promises';
|
|
4
3
|
import { join, dirname } from 'node:path';
|
|
5
4
|
import { SFDX_PROJECT_FILE_NAME } from './constants.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
found = true;
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
// If file not found, move up one directory level
|
|
22
|
-
const parentDir = dirname(currentDir);
|
|
23
|
-
if (currentDir === parentDir) {
|
|
24
|
-
// Reached the root without finding the file, throw an error
|
|
25
|
-
throw new Error(`${SFDX_PROJECT_FILE_NAME} not found in any parent directory.`);
|
|
26
|
-
}
|
|
27
|
-
currentDir = parentDir;
|
|
5
|
+
async function findRepoRoot(dir) {
|
|
6
|
+
const filePath = join(dir, SFDX_PROJECT_FILE_NAME);
|
|
7
|
+
try {
|
|
8
|
+
// Check if sfdx-project.json exists in the current directory
|
|
9
|
+
await access(filePath);
|
|
10
|
+
return { repoRoot: dir, dxConfigFilePath: filePath };
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
const parentDir = dirname(dir);
|
|
14
|
+
if (dir === parentDir) {
|
|
15
|
+
// Reached the root without finding the file, throw an error
|
|
16
|
+
throw new Error('sfdx-project.json not found in any parent directory.');
|
|
28
17
|
}
|
|
29
|
-
|
|
30
|
-
|
|
18
|
+
// Recursively search in the parent directory
|
|
19
|
+
return findRepoRoot(parentDir);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export async function getRepoRoot() {
|
|
23
|
+
const currentDir = process.cwd();
|
|
24
|
+
return findRepoRoot(currentDir);
|
|
31
25
|
}
|
|
32
26
|
//# sourceMappingURL=getRepoRoot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getRepoRoot.js","sourceRoot":"","sources":["../../src/helpers/getRepoRoot.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,
|
|
1
|
+
{"version":3,"file":"getRepoRoot.js","sourceRoot":"","sources":["../../src/helpers/getRepoRoot.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,KAAK,UAAU,YAAY,CAAC,GAAW;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,6DAA6D;QAC7D,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,4DAA4D;YAC5D,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,6CAA6C;QAC7C,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACjC,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -1,48 +1,43 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
/* eslint-disable no-await-in-loop */
|
|
3
2
|
import { readdir, stat } from 'node:fs/promises';
|
|
4
3
|
import { join } from 'node:path';
|
|
5
4
|
export async function validateTests(unvalidatedTests, packageDirectories) {
|
|
6
5
|
const warnings = [];
|
|
7
6
|
const validatedTests = [];
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
// Run findFilePath for all tests concurrently
|
|
8
|
+
const results = await Promise.all(unvalidatedTests.map(async (unvalidatedTest) => {
|
|
10
9
|
const testPath = await findFilePath(`${unvalidatedTest}.cls`, packageDirectories);
|
|
10
|
+
return { test: unvalidatedTest, testPath };
|
|
11
|
+
}));
|
|
12
|
+
for (const { test, testPath } of results) {
|
|
11
13
|
if (testPath === undefined) {
|
|
12
|
-
warnings.push(`The test method ${
|
|
14
|
+
warnings.push(`The test method ${test}.cls was not found in any package directory.`);
|
|
13
15
|
}
|
|
14
16
|
else {
|
|
15
|
-
validatedTests.push(
|
|
17
|
+
validatedTests.push(test);
|
|
16
18
|
}
|
|
17
19
|
}
|
|
18
20
|
return { validatedTests, warnings };
|
|
19
21
|
}
|
|
20
22
|
export async function findFilePath(fileName, packageDirectories) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (relativeFilePath !== undefined) {
|
|
25
|
-
break;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return relativeFilePath;
|
|
23
|
+
// Run searchRecursively for all directories concurrently
|
|
24
|
+
const results = await Promise.all(packageDirectories.map((directory) => searchRecursively(fileName, directory)));
|
|
25
|
+
return results.find((result) => result !== undefined);
|
|
29
26
|
}
|
|
30
27
|
async function searchRecursively(fileName, dxDirectory) {
|
|
31
28
|
const files = await readdir(dxDirectory);
|
|
32
|
-
|
|
29
|
+
// Map over files to handle all asynchronous operations concurrently
|
|
30
|
+
const results = await Promise.all(files.map(async (file) => {
|
|
33
31
|
const filePath = join(dxDirectory, file);
|
|
34
32
|
const stats = await stat(filePath);
|
|
35
33
|
if (stats.isDirectory()) {
|
|
36
|
-
|
|
37
|
-
const result = await searchRecursively(fileName, filePath);
|
|
38
|
-
if (result) {
|
|
39
|
-
return result;
|
|
40
|
-
}
|
|
34
|
+
return searchRecursively(fileName, filePath);
|
|
41
35
|
}
|
|
42
36
|
else if (file === fileName) {
|
|
43
37
|
return filePath;
|
|
44
38
|
}
|
|
45
|
-
|
|
46
|
-
|
|
39
|
+
return undefined;
|
|
40
|
+
}));
|
|
41
|
+
return results.find((result) => result !== undefined);
|
|
47
42
|
}
|
|
48
43
|
//# sourceMappingURL=validateTests.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateTests.js","sourceRoot":"","sources":["../../src/helpers/validateTests.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,
|
|
1
|
+
{"version":3,"file":"validateTests.js","sourceRoot":"","sources":["../../src/helpers/validateTests.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,gBAA0B,EAC1B,kBAA4B;IAE5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,8CAA8C;IAC9C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,eAAe,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAClF,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;IAC7C,CAAC,CAAC,CACH,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,OAAO,EAAE,CAAC;QACzC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,mBAAmB,IAAI,8CAA8C,CAAC,CAAC;QACvF,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,kBAA4B;IAC/E,yDAAyD;IACzD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,kBAAkB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAC9E,CAAC;IAEF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,QAAgB,EAAE,WAAmB;IACpE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IAEzC,oEAAoE;IACpE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,OAAO,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -30,9 +30,18 @@ Ignore missing test methods.
|
|
|
30
30
|
|
|
31
31
|
If provided, ignore test methods that are not found in any of the package directories.
|
|
32
32
|
|
|
33
|
+
# flags.ignore-package-directory.summary
|
|
34
|
+
|
|
35
|
+
Ignore a package directory.
|
|
36
|
+
|
|
37
|
+
# flags.ignore-package-directory.description
|
|
38
|
+
|
|
39
|
+
If provided, do not search the package directory for test annotations.
|
|
40
|
+
|
|
33
41
|
# examples
|
|
34
42
|
|
|
35
43
|
- <%= config.bin %> <%= command.id %> --format csv
|
|
36
44
|
- <%= config.bin %> <%= command.id %> --format sf
|
|
37
45
|
- <%= config.bin %> <%= command.id %> --format sf --manifest package.xml
|
|
38
46
|
- <%= config.bin %> <%= command.id %> --format sf --manifest package.xml --ignore-missing-tests
|
|
47
|
+
- <%= config.bin %> <%= command.id %> --format sf --manifest package.xml -d "force-app"
|
package/oclif.manifest.json
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
"<%= config.bin %> <%= command.id %> --format csv",
|
|
9
9
|
"<%= config.bin %> <%= command.id %> --format sf",
|
|
10
10
|
"<%= config.bin %> <%= command.id %> --format sf --manifest package.xml",
|
|
11
|
-
"<%= config.bin %> <%= command.id %> --format sf --manifest package.xml --ignore-missing-tests"
|
|
11
|
+
"<%= config.bin %> <%= command.id %> --format sf --manifest package.xml --ignore-missing-tests",
|
|
12
|
+
"<%= config.bin %> <%= command.id %> --format sf --manifest package.xml -d \"force-app\""
|
|
12
13
|
],
|
|
13
14
|
"flags": {
|
|
14
15
|
"json": {
|
|
@@ -54,6 +55,16 @@
|
|
|
54
55
|
"summary": "Ignore missing test methods.",
|
|
55
56
|
"allowNo": false,
|
|
56
57
|
"type": "boolean"
|
|
58
|
+
},
|
|
59
|
+
"ignore-package-directory": {
|
|
60
|
+
"char": "d",
|
|
61
|
+
"description": "If provided, do not search the package directory for test annotations.",
|
|
62
|
+
"name": "ignore-package-directory",
|
|
63
|
+
"required": false,
|
|
64
|
+
"summary": "Ignore a package directory.",
|
|
65
|
+
"hasDynamicHelp": false,
|
|
66
|
+
"multiple": true,
|
|
67
|
+
"type": "option"
|
|
57
68
|
}
|
|
58
69
|
},
|
|
59
70
|
"hasDynamicHelp": false,
|
|
@@ -79,5 +90,5 @@
|
|
|
79
90
|
]
|
|
80
91
|
}
|
|
81
92
|
},
|
|
82
|
-
"version": "1.
|
|
93
|
+
"version": "1.10.0"
|
|
83
94
|
}
|
package/package.json
CHANGED