@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usebruno/js",
3
- "version": "0.31.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.6.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, appendAwaitToTestFunc } = require('../utils');
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
- const __brunoTestResults = new TestResults();
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
+ };