@usebruno/js 0.31.0 → 0.32.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/package.json +2 -2
- package/src/runtime/script-runtime.js +25 -2
- package/src/runtime/test-runtime.js +4 -53
- package/src/utils/results.js +80 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@usebruno/js",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.32.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"files": [
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"sandbox:bundle-libraries": "node ./src/sandbox/bundle-libraries.js"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@usebruno/common": "0.
|
|
18
|
+
"@usebruno/common": "0.7.0",
|
|
19
19
|
"@usebruno/crypto-js": "^3.1.9",
|
|
20
20
|
"@usebruno/query": "0.1.0",
|
|
21
21
|
"ajv": "^8.12.0",
|
|
@@ -12,7 +12,10 @@ const { get } = require('lodash');
|
|
|
12
12
|
const Bru = require('../bru');
|
|
13
13
|
const BrunoRequest = require('../bruno-request');
|
|
14
14
|
const BrunoResponse = require('../bruno-response');
|
|
15
|
+
const Test = require('../test');
|
|
16
|
+
const TestResults = require('../test-results');
|
|
15
17
|
const { cleanJson } = require('../utils');
|
|
18
|
+
const { createBruTestResultMethods } = require('../utils/results');
|
|
16
19
|
|
|
17
20
|
// Inbuilt Library Support
|
|
18
21
|
const ajv = require('ajv');
|
|
@@ -64,6 +67,7 @@ class ScriptRuntime {
|
|
|
64
67
|
const folderVariables = request?.folderVariables || {};
|
|
65
68
|
const requestVariables = request?.requestVariables || {};
|
|
66
69
|
const iterationDetails = request?.runnerIterationDetails || {};
|
|
70
|
+
const assertionResults = request?.assertionResults || [];
|
|
67
71
|
// TODO please clean this up
|
|
68
72
|
const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, iterationDetails, collectionName);
|
|
69
73
|
const req = new BrunoRequest(request);
|
|
@@ -86,9 +90,16 @@ class ScriptRuntime {
|
|
|
86
90
|
}
|
|
87
91
|
}
|
|
88
92
|
|
|
93
|
+
// extend bru with result getter methods
|
|
94
|
+
const { __brunoTestResults, test } = createBruTestResultMethods(bru, assertionResults, chai);
|
|
95
|
+
|
|
89
96
|
const context = {
|
|
90
97
|
bru,
|
|
91
|
-
req
|
|
98
|
+
req,
|
|
99
|
+
test,
|
|
100
|
+
expect: chai.expect,
|
|
101
|
+
assert: chai.assert,
|
|
102
|
+
__brunoTestResults: __brunoTestResults
|
|
92
103
|
};
|
|
93
104
|
|
|
94
105
|
if (onConsoleLog && typeof onConsoleLog === 'function') {
|
|
@@ -123,6 +134,7 @@ class ScriptRuntime {
|
|
|
123
134
|
runtimeVariables: cleanJson(runtimeVariables),
|
|
124
135
|
visualizations,
|
|
125
136
|
globalEnvironmentVariables: cleanJson(globalEnvironmentVariables),
|
|
137
|
+
results: cleanJson(__brunoTestResults.getResults()),
|
|
126
138
|
nextRequestName: bru.nextRequest,
|
|
127
139
|
skipRequest: bru.skipRequest,
|
|
128
140
|
stopExecution: bru.stopExecution
|
|
@@ -178,6 +190,7 @@ class ScriptRuntime {
|
|
|
178
190
|
runtimeVariables: cleanJson(runtimeVariables),
|
|
179
191
|
visualizations,
|
|
180
192
|
globalEnvironmentVariables: cleanJson(globalEnvironmentVariables),
|
|
193
|
+
results: cleanJson(__brunoTestResults.getResults()),
|
|
181
194
|
nextRequestName: bru.nextRequest,
|
|
182
195
|
skipRequest: bru.skipRequest,
|
|
183
196
|
stopExecution: bru.stopExecution
|
|
@@ -209,6 +222,7 @@ class ScriptRuntime {
|
|
|
209
222
|
const folderVariables = request?.folderVariables || {};
|
|
210
223
|
const requestVariables = request?.requestVariables || {};
|
|
211
224
|
const iterationDetails = request?.runnerIterationDetails || {};
|
|
225
|
+
const assertionResults = request?.assertionResults || [];
|
|
212
226
|
const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, iterationDetails, collectionName);
|
|
213
227
|
const req = new BrunoRequest(request);
|
|
214
228
|
const res = new BrunoResponse(response);
|
|
@@ -231,10 +245,17 @@ class ScriptRuntime {
|
|
|
231
245
|
}
|
|
232
246
|
}
|
|
233
247
|
|
|
248
|
+
// extend bru with result getter methods
|
|
249
|
+
const { __brunoTestResults, test } = createBruTestResultMethods(bru, assertionResults, chai);
|
|
250
|
+
|
|
234
251
|
const context = {
|
|
235
252
|
bru,
|
|
236
253
|
req,
|
|
237
|
-
res
|
|
254
|
+
res,
|
|
255
|
+
test,
|
|
256
|
+
expect: chai.expect,
|
|
257
|
+
assert: chai.assert,
|
|
258
|
+
__brunoTestResults: __brunoTestResults
|
|
238
259
|
};
|
|
239
260
|
|
|
240
261
|
if (onConsoleLog && typeof onConsoleLog === 'function') {
|
|
@@ -269,6 +290,7 @@ class ScriptRuntime {
|
|
|
269
290
|
runtimeVariables: cleanJson(runtimeVariables),
|
|
270
291
|
visualizations,
|
|
271
292
|
globalEnvironmentVariables: cleanJson(globalEnvironmentVariables),
|
|
293
|
+
results: cleanJson(__brunoTestResults.getResults()),
|
|
272
294
|
nextRequestName: bru.nextRequest,
|
|
273
295
|
skipRequest: bru.skipRequest,
|
|
274
296
|
stopExecution: bru.stopExecution
|
|
@@ -324,6 +346,7 @@ class ScriptRuntime {
|
|
|
324
346
|
runtimeVariables: cleanJson(runtimeVariables),
|
|
325
347
|
visualizations,
|
|
326
348
|
globalEnvironmentVariables: cleanJson(globalEnvironmentVariables),
|
|
349
|
+
results: cleanJson(__brunoTestResults.getResults()),
|
|
327
350
|
nextRequestName: bru.nextRequest,
|
|
328
351
|
skipRequest: bru.skipRequest,
|
|
329
352
|
stopExecution: bru.stopExecution
|
|
@@ -15,7 +15,8 @@ const BrunoRequest = require('../bruno-request');
|
|
|
15
15
|
const BrunoResponse = require('../bruno-response');
|
|
16
16
|
const Test = require('../test');
|
|
17
17
|
const TestResults = require('../test-results');
|
|
18
|
-
const { cleanJson
|
|
18
|
+
const { cleanJson } = require('../utils');
|
|
19
|
+
const { createBruTestResultMethods } = require('../utils/results');
|
|
19
20
|
|
|
20
21
|
// Inbuilt Library Support
|
|
21
22
|
const ajv = require('ajv');
|
|
@@ -35,25 +36,6 @@ const cheerio = require('cheerio');
|
|
|
35
36
|
const tv4 = require('tv4');
|
|
36
37
|
const { executeQuickJsVmAsync } = require('../sandbox/quickjs');
|
|
37
38
|
|
|
38
|
-
const getResultsSummary = (results) => {
|
|
39
|
-
const summary = {
|
|
40
|
-
total: results.length,
|
|
41
|
-
passed: 0,
|
|
42
|
-
failed: 0,
|
|
43
|
-
skipped: 0,
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
results.forEach((r) => {
|
|
47
|
-
const passed = r.status === "pass";
|
|
48
|
-
if (passed) summary.passed += 1;
|
|
49
|
-
else if (r.status === "fail") summary.failed += 1;
|
|
50
|
-
else summary.skipped += 1;
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
return summary;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
39
|
class TestRuntime {
|
|
58
40
|
constructor(props) {
|
|
59
41
|
this.runtime = props?.runtime || 'vm2';
|
|
@@ -103,9 +85,8 @@ class TestRuntime {
|
|
|
103
85
|
}
|
|
104
86
|
}
|
|
105
87
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
const test = Test(__brunoTestResults, chai);
|
|
88
|
+
// extend bru with result getter methods
|
|
89
|
+
const { __brunoTestResults, test } = createBruTestResultMethods(bru, assertionResults, chai);
|
|
109
90
|
|
|
110
91
|
if (!testsFile || !testsFile.length) {
|
|
111
92
|
return {
|
|
@@ -118,36 +99,6 @@ class TestRuntime {
|
|
|
118
99
|
};
|
|
119
100
|
}
|
|
120
101
|
|
|
121
|
-
bru.getTestResults = async () => {
|
|
122
|
-
let results = await __brunoTestResults.getResults();
|
|
123
|
-
const summary = getResultsSummary(results);
|
|
124
|
-
return {
|
|
125
|
-
summary,
|
|
126
|
-
results: results?.map?.(r => ({
|
|
127
|
-
status: r?.status,
|
|
128
|
-
description: r?.description,
|
|
129
|
-
expected: r?.expected,
|
|
130
|
-
actual: r?.actual,
|
|
131
|
-
error: r?.error
|
|
132
|
-
}))
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
bru.getAssertionResults = async () => {
|
|
136
|
-
let results = assertionResults;
|
|
137
|
-
const summary = getResultsSummary(results);
|
|
138
|
-
return {
|
|
139
|
-
summary,
|
|
140
|
-
results: results?.map?.(r => ({
|
|
141
|
-
status: r?.status,
|
|
142
|
-
lhsExpr: r?.lhsExpr,
|
|
143
|
-
rhsExpr: r?.rhsExpr,
|
|
144
|
-
operator: r?.operator,
|
|
145
|
-
rhsOperand: r?.rhsOperand,
|
|
146
|
-
error: r?.error
|
|
147
|
-
}))
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
|
|
151
102
|
const context = {
|
|
152
103
|
test,
|
|
153
104
|
bru,
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
const TestResults = require('../test-results');
|
|
2
|
+
const Test = require('../test');
|
|
3
|
+
|
|
4
|
+
// Calculate summary statistics for test results
|
|
5
|
+
const getResultsSummary = (results) => {
|
|
6
|
+
const summary = {
|
|
7
|
+
total: results.length,
|
|
8
|
+
passed: 0,
|
|
9
|
+
failed: 0,
|
|
10
|
+
skipped: 0,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
results.forEach((r) => {
|
|
14
|
+
const passed = r.status === 'pass';
|
|
15
|
+
if (passed) summary.passed += 1;
|
|
16
|
+
else if (r.status === 'fail') summary.failed += 1;
|
|
17
|
+
else summary.skipped += 1;
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
return summary;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const createBruTestResultMethods = (bru, assertionResults, chai) => {
|
|
24
|
+
const __brunoTestResults = new TestResults();
|
|
25
|
+
const test = Test(__brunoTestResults, chai);
|
|
26
|
+
setupBruTestMethods(bru, __brunoTestResults, assertionResults);
|
|
27
|
+
|
|
28
|
+
return { __brunoTestResults, test };
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const setupBruTestMethods = (bru, __brunoTestResults, assertionResults) => {
|
|
32
|
+
const getTestResults = async () => {
|
|
33
|
+
let results = await __brunoTestResults.getResults();
|
|
34
|
+
const summary = getResultsSummary(results);
|
|
35
|
+
return {
|
|
36
|
+
summary,
|
|
37
|
+
results: results.map(r => ({
|
|
38
|
+
status: r.status,
|
|
39
|
+
description: r.description,
|
|
40
|
+
expected: r.expected,
|
|
41
|
+
actual: r.actual,
|
|
42
|
+
error: r.error
|
|
43
|
+
}))
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const getAssertionResults = async () => {
|
|
48
|
+
let results = assertionResults;
|
|
49
|
+
const summary = getResultsSummary(results);
|
|
50
|
+
return {
|
|
51
|
+
summary,
|
|
52
|
+
results: results.map(r => ({
|
|
53
|
+
status: r.status,
|
|
54
|
+
lhsExpr: r.lhsExpr,
|
|
55
|
+
rhsExpr: r.rhsExpr,
|
|
56
|
+
operator: r.operator,
|
|
57
|
+
rhsOperand: r.rhsOperand,
|
|
58
|
+
error: r.error
|
|
59
|
+
}))
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// Set methods on bru object if provided
|
|
64
|
+
if (bru) {
|
|
65
|
+
bru.getTestResults = getTestResults;
|
|
66
|
+
bru.getAssertionResults = getAssertionResults;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Also return the methods for direct use
|
|
70
|
+
return {
|
|
71
|
+
getTestResults,
|
|
72
|
+
getAssertionResults
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
module.exports = {
|
|
77
|
+
getResultsSummary,
|
|
78
|
+
createBruTestResultMethods,
|
|
79
|
+
setupBruTestMethods
|
|
80
|
+
};
|