@salesforce/apex-node 2.1.4 → 2.1.5
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/src/common/cancellation.js +6 -17
- package/lib/src/common/cancellation.js.map +1 -1
- package/lib/src/execute/executeService.js +52 -69
- package/lib/src/execute/executeService.js.map +1 -1
- package/lib/src/i18n/index.js.map +1 -1
- package/lib/src/i18n/localization.js.map +1 -1
- package/lib/src/logs/logService.js +73 -101
- package/lib/src/logs/logService.js.map +1 -1
- package/lib/src/reporters/coverageReporter.js +4 -6
- package/lib/src/reporters/coverageReporter.js.map +1 -1
- package/lib/src/reporters/humanReporter.js.map +1 -1
- package/lib/src/reporters/junitReporter.js.map +1 -1
- package/lib/src/reporters/tapReporter.js +1 -1
- package/lib/src/reporters/tapReporter.js.map +1 -1
- package/lib/src/streaming/streamingClient.js +98 -119
- package/lib/src/streaming/streamingClient.js.map +1 -1
- package/lib/src/tests/asyncTests.js +234 -247
- package/lib/src/tests/asyncTests.js.map +1 -1
- package/lib/src/tests/codeCoverage.js +85 -99
- package/lib/src/tests/codeCoverage.js.map +1 -1
- package/lib/src/tests/diagnosticUtil.js +1 -2
- package/lib/src/tests/diagnosticUtil.js.map +1 -1
- package/lib/src/tests/syncTests.js +83 -85
- package/lib/src/tests/syncTests.js.map +1 -1
- package/lib/src/tests/testService.js +235 -273
- package/lib/src/tests/testService.js.map +1 -1
- package/lib/src/tests/utils.d.ts +2 -0
- package/lib/src/tests/utils.js +29 -24
- package/lib/src/tests/utils.js.map +1 -1
- package/lib/src/utils/authUtil.js +3 -14
- package/lib/src/utils/authUtil.js.map +1 -1
- package/lib/src/utils/dateUtil.js.map +1 -1
- package/lib/src/utils/fileSystemHandler.js +7 -18
- package/lib/src/utils/fileSystemHandler.js.map +1 -1
- package/lib/src/utils/table.js.map +1 -1
- package/lib/src/utils/traceFlags.js +95 -122
- package/lib/src/utils/traceFlags.js.map +1 -1
- package/package.json +3 -3
|
@@ -5,15 +5,6 @@
|
|
|
5
5
|
* Licensed under the BSD 3-Clause license.
|
|
6
6
|
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
7
7
|
*/
|
|
8
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
9
|
exports.CodeCoverage = void 0;
|
|
19
10
|
const util = require("util");
|
|
@@ -27,14 +18,12 @@ class CodeCoverage {
|
|
|
27
18
|
* Returns the string representation of the org wide coverage percentage for a given username connection from OrgWideCoverage entity
|
|
28
19
|
* @returns Org wide coverage percentage for a given username connection
|
|
29
20
|
*/
|
|
30
|
-
getOrgWideCoverage() {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return `${orgWideCoverageResult.records[0].PercentCovered}%`;
|
|
37
|
-
});
|
|
21
|
+
async getOrgWideCoverage() {
|
|
22
|
+
const orgWideCoverageResult = (await this.connection.tooling.query('SELECT PercentCovered FROM ApexOrgWideCoverage'));
|
|
23
|
+
if (orgWideCoverageResult.records.length === 0) {
|
|
24
|
+
return '0%';
|
|
25
|
+
}
|
|
26
|
+
return `${orgWideCoverageResult.records[0].PercentCovered}%`;
|
|
38
27
|
}
|
|
39
28
|
/**
|
|
40
29
|
* Returns the code coverage information for each Apex class covered by each Apex test method from ApexCodeCoverage entity
|
|
@@ -42,102 +31,99 @@ class CodeCoverage {
|
|
|
42
31
|
* @returns The code coverage information associated with each Apex test class
|
|
43
32
|
* NOTE: a test could cover more than one class, result map should contain a record for each covered class
|
|
44
33
|
*/
|
|
45
|
-
getPerClassCodeCoverage(apexTestClassSet) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
}
|
|
34
|
+
async getPerClassCodeCoverage(apexTestClassSet) {
|
|
35
|
+
if (apexTestClassSet.size === 0) {
|
|
36
|
+
return new Map();
|
|
37
|
+
}
|
|
38
|
+
const perClassCodeCovResults = await this.queryPerClassCodeCov(apexTestClassSet);
|
|
39
|
+
const perClassCoverageMap = new Map();
|
|
40
|
+
perClassCodeCovResults.forEach((chunk) => {
|
|
41
|
+
chunk.records.forEach((item) => {
|
|
42
|
+
const totalLines = item.NumLinesCovered + item.NumLinesUncovered;
|
|
43
|
+
const percentage = (0, utils_1.calculatePercentage)(item.NumLinesCovered, totalLines);
|
|
44
|
+
const value = {
|
|
45
|
+
apexClassOrTriggerName: item.ApexClassOrTrigger.Name,
|
|
46
|
+
apexClassOrTriggerId: item.ApexClassOrTrigger.Id,
|
|
47
|
+
apexTestClassId: item.ApexTestClassId,
|
|
48
|
+
apexTestMethodName: item.TestMethodName,
|
|
49
|
+
numLinesCovered: item.NumLinesCovered,
|
|
50
|
+
numLinesUncovered: item.NumLinesUncovered,
|
|
51
|
+
percentage,
|
|
52
|
+
...(item.Coverage ? { coverage: item.Coverage } : {})
|
|
53
|
+
};
|
|
54
|
+
const key = `${item.ApexTestClassId}-${item.TestMethodName}`;
|
|
55
|
+
if (perClassCoverageMap.get(key)) {
|
|
56
|
+
perClassCoverageMap.get(key).push(value);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
perClassCoverageMap.set(`${item.ApexTestClassId}-${item.TestMethodName}`, [value]);
|
|
60
|
+
}
|
|
65
61
|
});
|
|
66
|
-
return perClassCoverageMap;
|
|
67
62
|
});
|
|
63
|
+
return perClassCoverageMap;
|
|
68
64
|
}
|
|
69
65
|
/**
|
|
70
66
|
* Returns the aggregate code coverage information from ApexCodeCoverageAggregate entity for a given set of Apex classes
|
|
71
67
|
* @param apexClassIdSet Set of ids for Apex classes
|
|
72
68
|
* @returns The aggregate code coverage information for the given set of Apex classes
|
|
73
69
|
*/
|
|
74
|
-
getAggregateCodeCoverage(apexClassIdSet) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
};
|
|
101
|
-
});
|
|
102
|
-
totalCodeCoverageResults.push(...codeCoverageResults);
|
|
70
|
+
async getAggregateCodeCoverage(apexClassIdSet) {
|
|
71
|
+
if (apexClassIdSet.size === 0) {
|
|
72
|
+
return { codeCoverageResults: [], totalLines: 0, coveredLines: 0 };
|
|
73
|
+
}
|
|
74
|
+
const codeCoverageAggregates = await this.queryAggregateCodeCov(apexClassIdSet);
|
|
75
|
+
let totalLinesCovered = 0;
|
|
76
|
+
let totalLinesUncovered = 0;
|
|
77
|
+
const totalCodeCoverageResults = [];
|
|
78
|
+
codeCoverageAggregates.forEach((chunk) => {
|
|
79
|
+
const codeCoverageResults = chunk.records.map((item) => {
|
|
80
|
+
totalLinesCovered += item.NumLinesCovered;
|
|
81
|
+
totalLinesUncovered += item.NumLinesUncovered;
|
|
82
|
+
const totalLines = item.NumLinesCovered + item.NumLinesUncovered;
|
|
83
|
+
const percentage = (0, utils_1.calculatePercentage)(item.NumLinesCovered, totalLines);
|
|
84
|
+
return {
|
|
85
|
+
apexId: item.ApexClassOrTrigger.Id,
|
|
86
|
+
name: item.ApexClassOrTrigger.Name,
|
|
87
|
+
type: item.ApexClassOrTrigger.Id.startsWith('01p')
|
|
88
|
+
? 'ApexClass'
|
|
89
|
+
: 'ApexTrigger',
|
|
90
|
+
numLinesCovered: item.NumLinesCovered,
|
|
91
|
+
numLinesUncovered: item.NumLinesUncovered,
|
|
92
|
+
percentage,
|
|
93
|
+
coveredLines: item.Coverage.coveredLines,
|
|
94
|
+
uncoveredLines: item.Coverage.uncoveredLines
|
|
95
|
+
};
|
|
103
96
|
});
|
|
104
|
-
|
|
105
|
-
codeCoverageResults: totalCodeCoverageResults,
|
|
106
|
-
totalLines: totalLinesCovered + totalLinesUncovered,
|
|
107
|
-
coveredLines: totalLinesCovered
|
|
108
|
-
};
|
|
97
|
+
totalCodeCoverageResults.push(...codeCoverageResults);
|
|
109
98
|
});
|
|
99
|
+
return {
|
|
100
|
+
codeCoverageResults: totalCodeCoverageResults,
|
|
101
|
+
totalLines: totalLinesCovered + totalLinesUncovered,
|
|
102
|
+
coveredLines: totalLinesCovered
|
|
103
|
+
};
|
|
110
104
|
}
|
|
111
|
-
queryPerClassCodeCov(apexTestClassSet) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return this.fetchResults(apexTestClassSet, perClassCodeCovQuery);
|
|
115
|
-
});
|
|
105
|
+
async queryPerClassCodeCov(apexTestClassSet) {
|
|
106
|
+
const perClassCodeCovQuery = 'SELECT ApexTestClassId, ApexClassOrTrigger.Id, ApexClassOrTrigger.Name, TestMethodName, NumLinesCovered, NumLinesUncovered, Coverage FROM ApexCodeCoverage WHERE ApexTestClassId IN (%s)';
|
|
107
|
+
return this.fetchResults(apexTestClassSet, perClassCodeCovQuery);
|
|
116
108
|
}
|
|
117
|
-
queryAggregateCodeCov(apexClassIdSet) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return this.fetchResults(apexClassIdSet, codeCoverageQuery);
|
|
121
|
-
});
|
|
109
|
+
async queryAggregateCodeCov(apexClassIdSet) {
|
|
110
|
+
const codeCoverageQuery = 'SELECT ApexClassOrTrigger.Id, ApexClassOrTrigger.Name, NumLinesCovered, NumLinesUncovered, Coverage FROM ApexCodeCoverageAggregate WHERE ApexClassorTriggerId IN (%s)';
|
|
111
|
+
return this.fetchResults(apexClassIdSet, codeCoverageQuery);
|
|
122
112
|
}
|
|
123
|
-
fetchResults(idSet, selectQuery) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
return this.connection.tooling.query(query, {
|
|
132
|
-
autoFetch: true
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
// Note here the result of the .all call is of type QueryResult<ApexCodeCoverageAggregateRecord | ApexCodeCoverageRecord>[]
|
|
136
|
-
// Since QueryResult is compatible with ApexCodeCoverage and ApexCodeCoverageAggregate we can cast to T[]
|
|
137
|
-
// and things work out.
|
|
138
|
-
//TODO: figure out how to use the provided types from core instead of having to work around typescript here.
|
|
139
|
-
return (yield Promise.all(queryPromises));
|
|
113
|
+
async fetchResults(idSet, selectQuery) {
|
|
114
|
+
const queries = this.createQueries(selectQuery, idSet);
|
|
115
|
+
const queryPromises = queries.map((query) => {
|
|
116
|
+
// The query method returns a type QueryResult from jsforce
|
|
117
|
+
// that has takes a type that extends the jsforce Record.
|
|
118
|
+
// ApexCodeCoverageRecord and ApexCodeCoverageAggregateRecord
|
|
119
|
+
// are the Records compatible types defined in this project.
|
|
120
|
+
return (0, utils_1.queryAll)(this.connection, query, true);
|
|
140
121
|
});
|
|
122
|
+
// Note here the result of the .all call is of type QueryResult<ApexCodeCoverageAggregateRecord | ApexCodeCoverageRecord>[]
|
|
123
|
+
// Since QueryResult is compatible with ApexCodeCoverage and ApexCodeCoverageAggregate we can cast to T[]
|
|
124
|
+
// and things work out.
|
|
125
|
+
//TODO: figure out how to use the provided types from core instead of having to work around typescript here.
|
|
126
|
+
return (await Promise.all(queryPromises));
|
|
141
127
|
}
|
|
142
128
|
createQueries(selectQuery, idSet) {
|
|
143
129
|
const idArray = [...idSet];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeCoverage.js","sourceRoot":"","sources":["../../../src/tests/codeCoverage.ts"],"names":[],"mappings":";AAAA;;;;;GAKG
|
|
1
|
+
{"version":3,"file":"codeCoverage.js","sourceRoot":"","sources":["../../../src/tests/codeCoverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.getAsyncDiagnostic = exports.getSyncDiagnostic = exports.formatTestErrors = void 0;
|
|
10
10
|
const i18n_1 = require("../i18n");
|
|
11
11
|
function formatTestErrors(error) {
|
|
12
|
-
|
|
13
|
-
const matches = (_a = error.message) === null || _a === void 0 ? void 0 : _a.match(/\bsObject type ["'](.*?)["'] is not supported\b/);
|
|
12
|
+
const matches = error.message?.match(/\bsObject type ["'](.*?)["'] is not supported\b/);
|
|
14
13
|
if (matches && matches[0] && matches[1]) {
|
|
15
14
|
error.message = i18n_1.nls.localize('invalidsObjectErr', [
|
|
16
15
|
matches[1],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnosticUtil.js","sourceRoot":"","sources":["../../../src/tests/diagnosticUtil.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,kCAA8B;AAI9B,SAAgB,gBAAgB,CAAC,KAAY
|
|
1
|
+
{"version":3,"file":"diagnosticUtil.js","sourceRoot":"","sources":["../../../src/tests/diagnosticUtil.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,kCAA8B;AAI9B,SAAgB,gBAAgB,CAAC,KAAY;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAClC,iDAAiD,CAClD,CAAC;IACF,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,OAAO,GAAG,UAAG,CAAC,QAAQ,CAAC,mBAAmB,EAAE;YAChD,OAAO,CAAC,CAAC,CAAC;YACV,KAAK,CAAC,OAAO;SACd,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAbD,4CAaC;AAED,SAAgB,iBAAiB,CAAC,UAA2B;IAC3D,MAAM,UAAU,GAAmB;QACjC,gBAAgB,EAAE,UAAU,CAAC,OAAO;QACpC,mBAAmB,EAAE,UAAU,CAAC,UAAU;QAC1C,SAAS,EAAE,UAAU,CAAC,UAAU;YAC9B,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC,CAAC,SAAS;QACb,cAAc,EAAE,EAAE;KACnB,CAAC;IAEF,MAAM,OAAO,GACX,UAAU,CAAC,UAAU;QACrB,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC5D,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACf,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACf,UAAU,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAtBD,8CAsBC;AAED,SAAgB,kBAAkB,CAChC,WAAiC;IAEjC,MAAM,UAAU,GAAmB;QACjC,gBAAgB,EAAE,WAAW,CAAC,OAAO;QACrC,mBAAmB,EAAE,WAAW,CAAC,UAAU;QAC3C,SAAS,EAAE,WAAW,CAAC,UAAU;YAC/B,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC,CAAC,SAAS;QACb,cAAc,EAAE,EAAE;KACnB,CAAC;IAEF,MAAM,OAAO,GACX,WAAW,CAAC,UAAU;QACtB,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC7D,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACf,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACf,UAAU,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAxBD,gDAwBC"}
|
|
@@ -5,15 +5,6 @@
|
|
|
5
5
|
* Licensed under the BSD 3-Clause license.
|
|
6
6
|
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
7
7
|
*/
|
|
8
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
9
|
exports.SyncTests = void 0;
|
|
19
10
|
const utils_1 = require("../utils");
|
|
@@ -31,86 +22,80 @@ class SyncTests {
|
|
|
31
22
|
* @param codeCoverage should report code coverage
|
|
32
23
|
* @param token cancellation token
|
|
33
24
|
*/
|
|
34
|
-
runTests(options, codeCoverage = false, token) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
return yield this.formatSyncResults(testRun, (0, utils_1.getCurrentTime)(), codeCoverage);
|
|
49
|
-
}
|
|
50
|
-
catch (e) {
|
|
51
|
-
throw (0, diagnosticUtil_1.formatTestErrors)(e);
|
|
25
|
+
async runTests(options, codeCoverage = false, token) {
|
|
26
|
+
try {
|
|
27
|
+
const url = `${this.connection.tooling._baseUrl()}/runTestsSynchronous`;
|
|
28
|
+
const request = {
|
|
29
|
+
method: 'POST',
|
|
30
|
+
url,
|
|
31
|
+
body: JSON.stringify(options),
|
|
32
|
+
headers: { 'content-type': 'application/json' }
|
|
33
|
+
};
|
|
34
|
+
const testRun = (await this.connection.tooling.request(request));
|
|
35
|
+
if (token && token.isCancellationRequested) {
|
|
36
|
+
return null;
|
|
52
37
|
}
|
|
53
|
-
|
|
38
|
+
return await this.formatSyncResults(testRun, (0, utils_1.getCurrentTime)(), codeCoverage);
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
throw (0, diagnosticUtil_1.formatTestErrors)(e);
|
|
42
|
+
}
|
|
54
43
|
}
|
|
55
|
-
formatSyncResults(apiTestResult, startTime, codeCoverage = false) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
if (
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
const { codeCoverageResults, totalLines, coveredLines } = yield this.codecoverage.getAggregateCodeCoverage(coveredApexClassIdSet);
|
|
99
|
-
result.codecoverage = codeCoverageResults;
|
|
100
|
-
result.summary.totalLines = totalLines;
|
|
101
|
-
result.summary.coveredLines = coveredLines;
|
|
102
|
-
result.summary.testRunCoverage = (0, utils_2.calculatePercentage)(coveredLines, totalLines);
|
|
103
|
-
result.summary.orgWideCoverage =
|
|
104
|
-
yield this.codecoverage.getOrgWideCoverage();
|
|
44
|
+
async formatSyncResults(apiTestResult, startTime, codeCoverage = false) {
|
|
45
|
+
const coveredApexClassIdSet = new Set();
|
|
46
|
+
const { apexTestClassIdSet, testResults } = this.buildSyncTestResults(apiTestResult);
|
|
47
|
+
const globalTestFailed = apiTestResult.failures.length;
|
|
48
|
+
const globalTestPassed = apiTestResult.successes.length;
|
|
49
|
+
const result = {
|
|
50
|
+
summary: {
|
|
51
|
+
outcome: globalTestFailed === 0
|
|
52
|
+
? "Passed" /* ApexTestRunResultStatus.Passed */
|
|
53
|
+
: "Failed" /* ApexTestRunResultStatus.Failed */,
|
|
54
|
+
testsRan: apiTestResult.numTestsRun,
|
|
55
|
+
passing: globalTestPassed,
|
|
56
|
+
failing: globalTestFailed,
|
|
57
|
+
skipped: 0,
|
|
58
|
+
passRate: (0, utils_2.calculatePercentage)(globalTestPassed, apiTestResult.numTestsRun),
|
|
59
|
+
failRate: (0, utils_2.calculatePercentage)(globalTestFailed, apiTestResult.numTestsRun),
|
|
60
|
+
skipRate: (0, utils_2.calculatePercentage)(0, apiTestResult.numTestsRun),
|
|
61
|
+
testStartTime: (0, utils_1.formatStartTime)(startTime, 'ISO'),
|
|
62
|
+
testExecutionTimeInMs: apiTestResult.totalTime ?? 0,
|
|
63
|
+
testTotalTimeInMs: apiTestResult.totalTime ?? 0,
|
|
64
|
+
commandTimeInMs: (0, utils_1.getCurrentTime)() - startTime,
|
|
65
|
+
hostname: this.connection.instanceUrl,
|
|
66
|
+
orgId: this.connection.getAuthInfoFields().orgId,
|
|
67
|
+
username: this.connection.getUsername(),
|
|
68
|
+
testRunId: '',
|
|
69
|
+
userId: this.connection.getConnectionOptions().userId
|
|
70
|
+
},
|
|
71
|
+
tests: testResults
|
|
72
|
+
};
|
|
73
|
+
if (codeCoverage) {
|
|
74
|
+
const perClassCovMap = await this.codecoverage.getPerClassCodeCoverage(apexTestClassIdSet);
|
|
75
|
+
if (perClassCovMap.size > 0) {
|
|
76
|
+
result.tests.forEach((item) => {
|
|
77
|
+
const keyCodeCov = `${item.apexClass.id}-${item.methodName}`;
|
|
78
|
+
const perClassCov = perClassCovMap.get(keyCodeCov);
|
|
79
|
+
if (perClassCov) {
|
|
80
|
+
perClassCov.forEach((classCov) => coveredApexClassIdSet.add(classCov.apexClassOrTriggerId));
|
|
81
|
+
item.perClassCoverage = perClassCov;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
105
84
|
}
|
|
106
|
-
|
|
107
|
-
|
|
85
|
+
const { codeCoverageResults, totalLines, coveredLines } = await this.codecoverage.getAggregateCodeCoverage(coveredApexClassIdSet);
|
|
86
|
+
result.codecoverage = codeCoverageResults;
|
|
87
|
+
result.summary.totalLines = totalLines;
|
|
88
|
+
result.summary.coveredLines = coveredLines;
|
|
89
|
+
result.summary.testRunCoverage = (0, utils_2.calculatePercentage)(coveredLines, totalLines);
|
|
90
|
+
result.summary.orgWideCoverage =
|
|
91
|
+
await this.codecoverage.getOrgWideCoverage();
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
108
94
|
}
|
|
109
95
|
buildSyncTestResults(apiTestResult) {
|
|
110
96
|
const testResults = [];
|
|
111
97
|
const apexTestClassIdSet = new Set();
|
|
112
98
|
apiTestResult.successes.forEach((item) => {
|
|
113
|
-
var _a;
|
|
114
99
|
const nms = item.namespace ? `${item.namespace}.` : '';
|
|
115
100
|
apexTestClassIdSet.add(item.id);
|
|
116
101
|
testResults.push({
|
|
@@ -128,22 +113,35 @@ class SyncTests {
|
|
|
128
113
|
namespacePrefix: item.namespace,
|
|
129
114
|
fullName: `${nms}${item.name}`
|
|
130
115
|
},
|
|
131
|
-
runTime:
|
|
116
|
+
runTime: item.time ?? 0,
|
|
132
117
|
testTimestamp: '',
|
|
133
118
|
fullName: `${nms}${item.name}.${item.methodName}`
|
|
134
119
|
});
|
|
135
120
|
});
|
|
136
121
|
apiTestResult.failures.forEach((item) => {
|
|
137
|
-
var _a;
|
|
138
122
|
const nms = item.namespace ? `${item.namespace}__` : '';
|
|
139
123
|
apexTestClassIdSet.add(item.id);
|
|
140
124
|
const diagnostic = item.message || item.stackTrace ? (0, diagnosticUtil_1.getSyncDiagnostic)(item) : null;
|
|
141
|
-
testResults.push(
|
|
125
|
+
testResults.push({
|
|
126
|
+
id: '',
|
|
127
|
+
queueItemId: '',
|
|
128
|
+
stackTrace: item.stackTrace,
|
|
129
|
+
message: item.message,
|
|
130
|
+
asyncApexJobId: '',
|
|
131
|
+
methodName: item.methodName,
|
|
132
|
+
outcome: "Fail" /* ApexTestResultOutcome.Fail */,
|
|
133
|
+
apexLogId: apiTestResult.apexLogId,
|
|
134
|
+
apexClass: {
|
|
142
135
|
id: item.id,
|
|
143
136
|
name: item.name,
|
|
144
137
|
namespacePrefix: item.namespace,
|
|
145
138
|
fullName: `${nms}${item.name}`
|
|
146
|
-
},
|
|
139
|
+
},
|
|
140
|
+
runTime: item.time ?? 0,
|
|
141
|
+
testTimestamp: '',
|
|
142
|
+
fullName: `${nms}${item.name}.${item.methodName}`,
|
|
143
|
+
...(diagnostic ? { diagnostic } : {})
|
|
144
|
+
});
|
|
147
145
|
});
|
|
148
146
|
return { apexTestClassIdSet, testResults };
|
|
149
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncTests.js","sourceRoot":"","sources":["../../../src/tests/syncTests.ts"],"names":[],"mappings":";AAAA;;;;;GAKG
|
|
1
|
+
{"version":3,"file":"syncTests.js","sourceRoot":"","sources":["../../../src/tests/syncTests.ts"],"names":[],"mappings":"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"}
|