@memberjunction/testing-engine 3.0.0 → 3.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/dist/__tests__/variable-resolver.test.d.ts +5 -0
- package/dist/__tests__/variable-resolver.test.d.ts.map +1 -0
- package/dist/__tests__/variable-resolver.test.js +412 -0
- package/dist/__tests__/variable-resolver.test.js.map +1 -0
- package/dist/drivers/AgentEvalDriver.d.ts +10 -0
- package/dist/drivers/AgentEvalDriver.d.ts.map +1 -1
- package/dist/drivers/AgentEvalDriver.js +47 -5
- package/dist/drivers/AgentEvalDriver.js.map +1 -1
- package/dist/engine/TestEngine.d.ts +12 -0
- package/dist/engine/TestEngine.d.ts.map +1 -1
- package/dist/engine/TestEngine.js +73 -6
- package/dist/engine/TestEngine.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +8 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/variable-resolver.d.ts +82 -0
- package/dist/utils/variable-resolver.d.ts.map +1 -0
- package/dist/utils/variable-resolver.js +298 -0
- package/dist/utils/variable-resolver.js.map +1 -0
- package/package.json +17 -12
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Variable resolution service for the Testing Framework
|
|
4
|
+
* @module @memberjunction/testing-engine
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.VariableResolver = exports.VariableResolutionError = void 0;
|
|
8
|
+
const global_1 = require("@memberjunction/global");
|
|
9
|
+
/**
|
|
10
|
+
* Error thrown when variable resolution fails
|
|
11
|
+
*/
|
|
12
|
+
class VariableResolutionError extends Error {
|
|
13
|
+
constructor(message, variableName, reason) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.variableName = variableName;
|
|
16
|
+
this.reason = reason;
|
|
17
|
+
this.name = 'VariableResolutionError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.VariableResolutionError = VariableResolutionError;
|
|
21
|
+
/**
|
|
22
|
+
* Service for resolving test variables through the inheritance hierarchy.
|
|
23
|
+
*
|
|
24
|
+
* Resolution order (highest to lowest priority):
|
|
25
|
+
* 1. Run-level values (CLI flags, API params)
|
|
26
|
+
* 2. Suite-level values (if running in a suite)
|
|
27
|
+
* 3. Test-level defaults
|
|
28
|
+
* 4. TestType defaults
|
|
29
|
+
*/
|
|
30
|
+
class VariableResolver {
|
|
31
|
+
/**
|
|
32
|
+
* Resolve variables for a test execution.
|
|
33
|
+
*
|
|
34
|
+
* @param typeVariablesSchemaJson - JSON string from TestType.VariablesSchema
|
|
35
|
+
* @param testVariablesJson - JSON string from Test.Variables (optional)
|
|
36
|
+
* @param suiteVariablesJson - JSON string from TestSuite.Variables (optional)
|
|
37
|
+
* @param runOptions - Runtime options containing user-provided variable values
|
|
38
|
+
* @returns Resolved variables with values and sources
|
|
39
|
+
* @throws VariableResolutionError if required variables are missing or values are invalid
|
|
40
|
+
*/
|
|
41
|
+
resolveVariables(typeVariablesSchemaJson, testVariablesJson, suiteVariablesJson, runOptions) {
|
|
42
|
+
// Parse schemas
|
|
43
|
+
const typeSchema = this.parseTypeSchema(typeVariablesSchemaJson);
|
|
44
|
+
const testConfig = this.parseTestConfig(testVariablesJson);
|
|
45
|
+
const suiteConfig = this.parseSuiteConfig(suiteVariablesJson);
|
|
46
|
+
// If no type schema, return empty resolved variables
|
|
47
|
+
if (!typeSchema || typeSchema.variables.length === 0) {
|
|
48
|
+
return { values: {}, sources: {} };
|
|
49
|
+
}
|
|
50
|
+
const values = {};
|
|
51
|
+
const sources = {};
|
|
52
|
+
// Process each variable defined in the type schema
|
|
53
|
+
for (const varDef of typeSchema.variables) {
|
|
54
|
+
const testOverride = testConfig?.variables?.[varDef.name];
|
|
55
|
+
// Check if test explicitly marks this variable as not exposed
|
|
56
|
+
if (testOverride && testOverride.exposed === false) {
|
|
57
|
+
continue; // Variable not exposed by this test, skip it
|
|
58
|
+
}
|
|
59
|
+
// Resolve the value through the priority hierarchy
|
|
60
|
+
const resolved = this.resolveValue(varDef, testOverride, suiteConfig, runOptions);
|
|
61
|
+
if (resolved.value !== undefined) {
|
|
62
|
+
values[varDef.name] = resolved.value;
|
|
63
|
+
sources[varDef.name] = resolved.source;
|
|
64
|
+
}
|
|
65
|
+
else if (varDef.required) {
|
|
66
|
+
throw new VariableResolutionError(`Required variable '${varDef.name}' has no value. ` +
|
|
67
|
+
`Provide a value via --var ${varDef.name}=<value> or set a default.`, varDef.name, 'missing_required');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return { values, sources };
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Parse the TestType.VariablesSchema JSON
|
|
74
|
+
*/
|
|
75
|
+
parseTypeSchema(json) {
|
|
76
|
+
if (!json) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
const parsed = (0, global_1.SafeJSONParse)(json);
|
|
80
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
// Validate schema version
|
|
84
|
+
if (parsed.schemaVersion !== '1.0') {
|
|
85
|
+
throw new VariableResolutionError(`Unsupported variables schema version: ${parsed.schemaVersion}. Expected '1.0'.`, undefined, 'parse_error');
|
|
86
|
+
}
|
|
87
|
+
return parsed;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Parse the Test.Variables JSON
|
|
91
|
+
*/
|
|
92
|
+
parseTestConfig(json) {
|
|
93
|
+
if (!json) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
const parsed = (0, global_1.SafeJSONParse)(json);
|
|
97
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
return parsed;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Parse the TestSuite.Variables JSON
|
|
104
|
+
*/
|
|
105
|
+
parseSuiteConfig(json) {
|
|
106
|
+
if (!json) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
const parsed = (0, global_1.SafeJSONParse)(json);
|
|
110
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
return parsed;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Resolve a single variable value through the priority hierarchy.
|
|
117
|
+
*
|
|
118
|
+
* Priority order:
|
|
119
|
+
* 1. If locked at test level, use test/type default (no override allowed)
|
|
120
|
+
* 2. Run-level value
|
|
121
|
+
* 3. Suite-level value
|
|
122
|
+
* 4. Test-level default
|
|
123
|
+
* 5. Type-level default
|
|
124
|
+
*/
|
|
125
|
+
resolveValue(varDef, testOverride, suiteConfig, runOptions) {
|
|
126
|
+
// If variable is locked at test level, use test default (or type default)
|
|
127
|
+
if (testOverride?.locked) {
|
|
128
|
+
const value = testOverride.defaultValue ?? varDef.defaultValue;
|
|
129
|
+
return {
|
|
130
|
+
value: value,
|
|
131
|
+
source: testOverride.defaultValue !== undefined ? 'test' : 'type'
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
// Priority 1: Run-level value
|
|
135
|
+
if (runOptions.variables?.[varDef.name] !== undefined) {
|
|
136
|
+
const value = runOptions.variables[varDef.name];
|
|
137
|
+
this.validateValue(varDef, testOverride, value, 'run');
|
|
138
|
+
return { value: value, source: 'run' };
|
|
139
|
+
}
|
|
140
|
+
// Priority 2: Suite-level value
|
|
141
|
+
if (suiteConfig?.variables?.[varDef.name] !== undefined) {
|
|
142
|
+
const value = suiteConfig.variables[varDef.name];
|
|
143
|
+
this.validateValue(varDef, testOverride, value, 'suite');
|
|
144
|
+
return { value: value, source: 'suite' };
|
|
145
|
+
}
|
|
146
|
+
// Priority 3: Test-level default
|
|
147
|
+
if (testOverride?.defaultValue !== undefined) {
|
|
148
|
+
return { value: testOverride.defaultValue, source: 'test' };
|
|
149
|
+
}
|
|
150
|
+
// Priority 4: Type-level default
|
|
151
|
+
if (varDef.defaultValue !== undefined) {
|
|
152
|
+
return { value: varDef.defaultValue, source: 'type' };
|
|
153
|
+
}
|
|
154
|
+
return { value: undefined, source: '' };
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Validate a variable value against its definition.
|
|
158
|
+
*/
|
|
159
|
+
validateValue(varDef, testOverride, value, source) {
|
|
160
|
+
// Type validation
|
|
161
|
+
this.validateDataType(varDef, value);
|
|
162
|
+
// Check against possible values (static source)
|
|
163
|
+
if (varDef.valueSource === 'static' && varDef.possibleValues && varDef.possibleValues.length > 0) {
|
|
164
|
+
// Get allowed values (test-restricted or all from type)
|
|
165
|
+
const allowedValues = testOverride?.restrictedValues
|
|
166
|
+
?? varDef.possibleValues.map(pv => pv.value);
|
|
167
|
+
if (!allowedValues.includes(value)) {
|
|
168
|
+
throw new VariableResolutionError(`Variable '${varDef.name}' value '${value}' (from ${source}) is not in allowed values: [${allowedValues.join(', ')}]`, varDef.name, 'invalid_value');
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Validate value matches the expected data type.
|
|
174
|
+
*/
|
|
175
|
+
validateDataType(varDef, value) {
|
|
176
|
+
const actualType = typeof value;
|
|
177
|
+
switch (varDef.dataType) {
|
|
178
|
+
case 'string':
|
|
179
|
+
if (actualType !== 'string') {
|
|
180
|
+
throw new VariableResolutionError(`Variable '${varDef.name}' expected type 'string' but got '${actualType}'`, varDef.name, 'invalid_type');
|
|
181
|
+
}
|
|
182
|
+
break;
|
|
183
|
+
case 'number':
|
|
184
|
+
if (actualType !== 'number' || isNaN(value)) {
|
|
185
|
+
throw new VariableResolutionError(`Variable '${varDef.name}' expected type 'number' but got '${actualType}'`, varDef.name, 'invalid_type');
|
|
186
|
+
}
|
|
187
|
+
break;
|
|
188
|
+
case 'boolean':
|
|
189
|
+
if (actualType !== 'boolean') {
|
|
190
|
+
throw new VariableResolutionError(`Variable '${varDef.name}' expected type 'boolean' but got '${actualType}'`, varDef.name, 'invalid_type');
|
|
191
|
+
}
|
|
192
|
+
break;
|
|
193
|
+
case 'date':
|
|
194
|
+
// Date can be a string (ISO format) or Date object
|
|
195
|
+
if (!(value instanceof Date) && (actualType !== 'string' || isNaN(Date.parse(value)))) {
|
|
196
|
+
throw new VariableResolutionError(`Variable '${varDef.name}' expected type 'date' but got '${actualType}'`, varDef.name, 'invalid_type');
|
|
197
|
+
}
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get available variables for a test (combines type and test configuration).
|
|
203
|
+
* Useful for CLI help and variable listing.
|
|
204
|
+
*/
|
|
205
|
+
getAvailableVariables(typeVariablesSchemaJson, testVariablesJson) {
|
|
206
|
+
const typeSchema = this.parseTypeSchema(typeVariablesSchemaJson);
|
|
207
|
+
const testConfig = this.parseTestConfig(testVariablesJson);
|
|
208
|
+
if (!typeSchema) {
|
|
209
|
+
return [];
|
|
210
|
+
}
|
|
211
|
+
// Filter to only exposed variables and apply test-level overrides
|
|
212
|
+
return typeSchema.variables
|
|
213
|
+
.filter(varDef => {
|
|
214
|
+
const testOverride = testConfig?.variables?.[varDef.name];
|
|
215
|
+
// Include if no override or explicitly exposed
|
|
216
|
+
return !testOverride || testOverride.exposed !== false;
|
|
217
|
+
})
|
|
218
|
+
.map(varDef => {
|
|
219
|
+
const testOverride = testConfig?.variables?.[varDef.name];
|
|
220
|
+
// Apply test-level overrides to the definition
|
|
221
|
+
if (testOverride) {
|
|
222
|
+
return {
|
|
223
|
+
...varDef,
|
|
224
|
+
defaultValue: testOverride.defaultValue ?? varDef.defaultValue,
|
|
225
|
+
// Restrict possible values if specified
|
|
226
|
+
possibleValues: testOverride.restrictedValues
|
|
227
|
+
? varDef.possibleValues?.filter(pv => testOverride.restrictedValues.includes(pv.value))
|
|
228
|
+
: varDef.possibleValues
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
return varDef;
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Parse a variable value from a CLI string.
|
|
236
|
+
* Converts string input to appropriate type based on variable definition.
|
|
237
|
+
*/
|
|
238
|
+
parseCliValue(varDef, cliValue) {
|
|
239
|
+
switch (varDef.dataType) {
|
|
240
|
+
case 'string':
|
|
241
|
+
return cliValue;
|
|
242
|
+
case 'number': {
|
|
243
|
+
const num = parseFloat(cliValue);
|
|
244
|
+
if (isNaN(num)) {
|
|
245
|
+
throw new VariableResolutionError(`Cannot parse '${cliValue}' as number for variable '${varDef.name}'`, varDef.name, 'invalid_type');
|
|
246
|
+
}
|
|
247
|
+
return num;
|
|
248
|
+
}
|
|
249
|
+
case 'boolean': {
|
|
250
|
+
const lower = cliValue.toLowerCase();
|
|
251
|
+
if (lower === 'true' || lower === '1' || lower === 'yes') {
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
if (lower === 'false' || lower === '0' || lower === 'no') {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
throw new VariableResolutionError(`Cannot parse '${cliValue}' as boolean for variable '${varDef.name}'. Use true/false, 1/0, or yes/no.`, varDef.name, 'invalid_type');
|
|
258
|
+
}
|
|
259
|
+
case 'date': {
|
|
260
|
+
const date = new Date(cliValue);
|
|
261
|
+
if (isNaN(date.getTime())) {
|
|
262
|
+
throw new VariableResolutionError(`Cannot parse '${cliValue}' as date for variable '${varDef.name}'`, varDef.name, 'invalid_type');
|
|
263
|
+
}
|
|
264
|
+
return date;
|
|
265
|
+
}
|
|
266
|
+
default:
|
|
267
|
+
return cliValue;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Parse CLI variable arguments (name=value format) into a variables object.
|
|
272
|
+
* If type schema is provided, values are converted to appropriate types.
|
|
273
|
+
*/
|
|
274
|
+
parseCliVariables(cliArgs, typeVariablesSchemaJson) {
|
|
275
|
+
const typeSchema = typeVariablesSchemaJson ? this.parseTypeSchema(typeVariablesSchemaJson) : null;
|
|
276
|
+
const result = {};
|
|
277
|
+
for (const arg of cliArgs) {
|
|
278
|
+
const eqIndex = arg.indexOf('=');
|
|
279
|
+
if (eqIndex === -1) {
|
|
280
|
+
throw new VariableResolutionError(`Invalid variable format: '${arg}'. Expected format: name=value`, undefined, 'parse_error');
|
|
281
|
+
}
|
|
282
|
+
const name = arg.substring(0, eqIndex);
|
|
283
|
+
const valueStr = arg.substring(eqIndex + 1);
|
|
284
|
+
// Find variable definition for type conversion
|
|
285
|
+
const varDef = typeSchema?.variables.find(v => v.name === name);
|
|
286
|
+
if (varDef) {
|
|
287
|
+
result[name] = this.parseCliValue(varDef, valueStr);
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
// No type info, keep as string
|
|
291
|
+
result[name] = valueStr;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return result;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
exports.VariableResolver = VariableResolver;
|
|
298
|
+
//# sourceMappingURL=variable-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variable-resolver.js","sourceRoot":"","sources":["../../src/utils/variable-resolver.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/testing-engine",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "MemberJunction Testing Framework Engine - Core test execution and evaluation engine supporting multiple test types",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -10,25 +10,30 @@
|
|
|
10
10
|
"scripts": {
|
|
11
11
|
"start": "ts-node-dev src/index.ts",
|
|
12
12
|
"build": "tsc",
|
|
13
|
-
"test": "
|
|
13
|
+
"test": "jest",
|
|
14
|
+
"test:watch": "jest --watch",
|
|
15
|
+
"test:coverage": "jest --coverage"
|
|
14
16
|
},
|
|
15
17
|
"author": "MemberJunction.com",
|
|
16
18
|
"license": "ISC",
|
|
17
19
|
"devDependencies": {
|
|
18
20
|
"ts-node-dev": "^2.0.0",
|
|
19
21
|
"typescript": "^5.4.5",
|
|
20
|
-
"@types/debug": "^4.1.12"
|
|
22
|
+
"@types/debug": "^4.1.12",
|
|
23
|
+
"@types/jest": "^29.5.12",
|
|
24
|
+
"jest": "^29.7.0",
|
|
25
|
+
"ts-jest": "^29.1.2"
|
|
21
26
|
},
|
|
22
27
|
"dependencies": {
|
|
23
|
-
"@memberjunction/ai": "3.
|
|
24
|
-
"@memberjunction/ai-agents": "3.
|
|
25
|
-
"@memberjunction/ai-core-plus": "3.
|
|
26
|
-
"@memberjunction/ai-prompts": "3.
|
|
27
|
-
"@memberjunction/aiengine": "3.
|
|
28
|
-
"@memberjunction/core": "3.
|
|
29
|
-
"@memberjunction/core-entities": "3.
|
|
30
|
-
"@memberjunction/global": "3.
|
|
31
|
-
"@memberjunction/testing-engine-base": "3.
|
|
28
|
+
"@memberjunction/ai": "3.1.0",
|
|
29
|
+
"@memberjunction/ai-agents": "3.1.0",
|
|
30
|
+
"@memberjunction/ai-core-plus": "3.1.0",
|
|
31
|
+
"@memberjunction/ai-prompts": "3.1.0",
|
|
32
|
+
"@memberjunction/aiengine": "3.1.0",
|
|
33
|
+
"@memberjunction/core": "3.1.0",
|
|
34
|
+
"@memberjunction/core-entities": "3.1.0",
|
|
35
|
+
"@memberjunction/global": "3.1.0",
|
|
36
|
+
"@memberjunction/testing-engine-base": "3.1.0",
|
|
32
37
|
"debug": "^4.4.0",
|
|
33
38
|
"rxjs": "^7.8.1",
|
|
34
39
|
"zod": "^3.23.8"
|