@memberjunction/testing-engine 4.2.0 → 4.3.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,7 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/testing-engine",
3
3
  "type": "module",
4
- "version": "4.2.0",
4
+ "version": "4.3.0",
5
5
  "description": "MemberJunction Testing Framework Engine - Core test execution and evaluation engine supporting multiple test types",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -11,9 +11,9 @@
11
11
  "scripts": {
12
12
  "start": "ts-node-dev src/index.ts",
13
13
  "build": "tsc && tsc-alias -f",
14
- "test": "jest",
15
- "test:watch": "jest --watch",
16
- "test:coverage": "jest --coverage"
14
+ "test": "vitest run",
15
+ "test:watch": "vitest",
16
+ "test:coverage": "vitest run --coverage"
17
17
  },
18
18
  "author": "MemberJunction.com",
19
19
  "license": "ISC",
@@ -21,20 +21,18 @@
21
21
  "ts-node-dev": "^2.0.0",
22
22
  "typescript": "^5.9.3",
23
23
  "@types/debug": "^4.1.12",
24
- "@types/jest": "^30.0.0",
25
- "jest": "^30.2.0",
26
- "ts-jest": "^29.4.6"
24
+ "vitest": "^4.0.18"
27
25
  },
28
26
  "dependencies": {
29
- "@memberjunction/ai": "4.2.0",
30
- "@memberjunction/ai-agents": "4.2.0",
31
- "@memberjunction/ai-core-plus": "4.2.0",
32
- "@memberjunction/ai-prompts": "4.2.0",
33
- "@memberjunction/aiengine": "4.2.0",
34
- "@memberjunction/core": "4.2.0",
35
- "@memberjunction/core-entities": "4.2.0",
36
- "@memberjunction/global": "4.2.0",
37
- "@memberjunction/testing-engine-base": "4.2.0",
27
+ "@memberjunction/ai": "4.3.0",
28
+ "@memberjunction/ai-agents": "4.3.0",
29
+ "@memberjunction/ai-core-plus": "4.3.0",
30
+ "@memberjunction/ai-prompts": "4.3.0",
31
+ "@memberjunction/aiengine": "4.3.0",
32
+ "@memberjunction/core": "4.3.0",
33
+ "@memberjunction/core-entities": "4.3.0",
34
+ "@memberjunction/global": "4.3.0",
35
+ "@memberjunction/testing-engine-base": "4.3.0",
38
36
  "debug": "^4.4.3",
39
37
  "rxjs": "^7.8.2",
40
38
  "zod": "~3.24.4"
@@ -1,5 +0,0 @@
1
- /**
2
- * Unit tests for VariableResolver
3
- */
4
- export {};
5
- //# sourceMappingURL=variable-resolver.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"variable-resolver.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/variable-resolver.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,410 +0,0 @@
1
- /**
2
- * Unit tests for VariableResolver
3
- */
4
- import { VariableResolver, VariableResolutionError } from '../utils/variable-resolver.js';
5
- describe('VariableResolver', () => {
6
- let resolver;
7
- beforeEach(() => {
8
- resolver = new VariableResolver();
9
- });
10
- // ============================================================================
11
- // Schema Parsing Tests
12
- // ============================================================================
13
- describe('parseTypeSchema', () => {
14
- it('should return null for null input', () => {
15
- const result = resolver.parseTypeSchema(null);
16
- expect(result).toBeNull();
17
- });
18
- it('should return null for empty string', () => {
19
- const result = resolver.parseTypeSchema('');
20
- expect(result).toBeNull();
21
- });
22
- it('should return null for invalid JSON', () => {
23
- const result = resolver.parseTypeSchema('not valid json');
24
- expect(result).toBeNull();
25
- });
26
- it('should parse valid schema', () => {
27
- const schema = {
28
- schemaVersion: '1.0',
29
- variables: [
30
- {
31
- name: 'TestVar',
32
- displayName: 'Test Variable',
33
- dataType: 'string',
34
- valueSource: 'freeform',
35
- required: false
36
- }
37
- ]
38
- };
39
- const result = resolver.parseTypeSchema(JSON.stringify(schema));
40
- expect(result).toEqual(schema);
41
- });
42
- it('should throw for unsupported schema version', () => {
43
- const schema = {
44
- schemaVersion: '2.0',
45
- variables: []
46
- };
47
- expect(() => resolver.parseTypeSchema(JSON.stringify(schema)))
48
- .toThrow(VariableResolutionError);
49
- });
50
- });
51
- describe('parseTestConfig', () => {
52
- it('should return null for null input', () => {
53
- const result = resolver.parseTestConfig(null);
54
- expect(result).toBeNull();
55
- });
56
- it('should parse valid config', () => {
57
- const config = {
58
- variables: {
59
- TestVar: { exposed: true, defaultValue: 'test' }
60
- }
61
- };
62
- const result = resolver.parseTestConfig(JSON.stringify(config));
63
- expect(result).toEqual(config);
64
- });
65
- });
66
- describe('parseSuiteConfig', () => {
67
- it('should return null for null input', () => {
68
- const result = resolver.parseSuiteConfig(null);
69
- expect(result).toBeNull();
70
- });
71
- it('should parse valid config', () => {
72
- const config = {
73
- variables: {
74
- TestVar: 'suite-value'
75
- }
76
- };
77
- const result = resolver.parseSuiteConfig(JSON.stringify(config));
78
- expect(result).toEqual(config);
79
- });
80
- });
81
- // ============================================================================
82
- // Variable Resolution Tests
83
- // ============================================================================
84
- describe('resolveVariables', () => {
85
- const baseTypeSchema = {
86
- schemaVersion: '1.0',
87
- variables: [
88
- {
89
- name: 'AIConfiguration',
90
- displayName: 'AI Configuration',
91
- dataType: 'string',
92
- valueSource: 'static',
93
- possibleValues: [
94
- { value: 'claude', label: 'Claude' },
95
- { value: 'gpt4', label: 'GPT-4' },
96
- { value: 'gemini', label: 'Gemini' }
97
- ],
98
- defaultValue: 'claude',
99
- required: false
100
- },
101
- {
102
- name: 'Temperature',
103
- displayName: 'Temperature',
104
- dataType: 'number',
105
- valueSource: 'freeform',
106
- defaultValue: 0.7,
107
- required: false
108
- },
109
- {
110
- name: 'RequiredVar',
111
- displayName: 'Required Variable',
112
- dataType: 'string',
113
- valueSource: 'freeform',
114
- required: true
115
- }
116
- ]
117
- };
118
- it('should return empty result for null type schema', () => {
119
- const result = resolver.resolveVariables(null, null, null, {});
120
- expect(result).toEqual({ values: {}, sources: {} });
121
- });
122
- it('should return empty result for empty variables array', () => {
123
- const schema = {
124
- schemaVersion: '1.0',
125
- variables: []
126
- };
127
- const result = resolver.resolveVariables(JSON.stringify(schema), null, null, {});
128
- expect(result).toEqual({ values: {}, sources: {} });
129
- });
130
- it('should use type defaults when no overrides provided', () => {
131
- const result = resolver.resolveVariables(JSON.stringify(baseTypeSchema), null, null, { variables: { RequiredVar: 'required-value' } });
132
- expect(result.values['AIConfiguration']).toBe('claude');
133
- expect(result.sources['AIConfiguration']).toBe('type');
134
- expect(result.values['Temperature']).toBe(0.7);
135
- expect(result.sources['Temperature']).toBe('type');
136
- });
137
- it('should throw for missing required variable', () => {
138
- expect(() => resolver.resolveVariables(JSON.stringify(baseTypeSchema), null, null, {})).toThrow(VariableResolutionError);
139
- });
140
- it('should use run-level values over all others', () => {
141
- const testConfig = {
142
- variables: {
143
- AIConfiguration: { exposed: true, defaultValue: 'test-default' }
144
- }
145
- };
146
- const suiteConfig = {
147
- variables: { AIConfiguration: 'gpt4' }
148
- };
149
- const result = resolver.resolveVariables(JSON.stringify(baseTypeSchema), JSON.stringify(testConfig), JSON.stringify(suiteConfig), { variables: { AIConfiguration: 'gemini', RequiredVar: 'value' } });
150
- expect(result.values['AIConfiguration']).toBe('gemini');
151
- expect(result.sources['AIConfiguration']).toBe('run');
152
- });
153
- it('should use suite-level values over test and type defaults', () => {
154
- const testConfig = {
155
- variables: {
156
- AIConfiguration: { exposed: true, defaultValue: 'test-default' }
157
- }
158
- };
159
- const suiteConfig = {
160
- variables: { AIConfiguration: 'gpt4' }
161
- };
162
- const result = resolver.resolveVariables(JSON.stringify(baseTypeSchema), JSON.stringify(testConfig), JSON.stringify(suiteConfig), { variables: { RequiredVar: 'value' } });
163
- expect(result.values['AIConfiguration']).toBe('gpt4');
164
- expect(result.sources['AIConfiguration']).toBe('suite');
165
- });
166
- it('should use test-level defaults over type defaults', () => {
167
- const testConfig = {
168
- variables: {
169
- Temperature: { exposed: true, defaultValue: 0.5 }
170
- }
171
- };
172
- const result = resolver.resolveVariables(JSON.stringify(baseTypeSchema), JSON.stringify(testConfig), null, { variables: { RequiredVar: 'value' } });
173
- expect(result.values['Temperature']).toBe(0.5);
174
- expect(result.sources['Temperature']).toBe('test');
175
- });
176
- it('should skip variables marked as not exposed', () => {
177
- const testConfig = {
178
- variables: {
179
- AIConfiguration: { exposed: false },
180
- Temperature: { exposed: true }
181
- }
182
- };
183
- const result = resolver.resolveVariables(JSON.stringify(baseTypeSchema), JSON.stringify(testConfig), null, { variables: { RequiredVar: 'value' } });
184
- expect(result.values['AIConfiguration']).toBeUndefined();
185
- expect(result.values['Temperature']).toBe(0.7);
186
- });
187
- it('should respect locked variables and ignore run/suite overrides', () => {
188
- const testConfig = {
189
- variables: {
190
- AIConfiguration: { exposed: true, defaultValue: 'claude', locked: true }
191
- }
192
- };
193
- const suiteConfig = {
194
- variables: { AIConfiguration: 'gpt4' }
195
- };
196
- const result = resolver.resolveVariables(JSON.stringify(baseTypeSchema), JSON.stringify(testConfig), JSON.stringify(suiteConfig), { variables: { AIConfiguration: 'gemini', RequiredVar: 'value' } });
197
- // Should use test default despite run/suite trying to override
198
- expect(result.values['AIConfiguration']).toBe('claude');
199
- expect(result.sources['AIConfiguration']).toBe('test');
200
- });
201
- });
202
- // ============================================================================
203
- // Value Validation Tests
204
- // ============================================================================
205
- describe('validateValue', () => {
206
- it('should accept valid static values', () => {
207
- const varDef = {
208
- name: 'Model',
209
- displayName: 'Model',
210
- dataType: 'string',
211
- valueSource: 'static',
212
- possibleValues: [
213
- { value: 'a' },
214
- { value: 'b' },
215
- { value: 'c' }
216
- ],
217
- required: false
218
- };
219
- // Should not throw
220
- expect(() => resolver.validateValue(varDef, undefined, 'a', 'run')).not.toThrow();
221
- expect(() => resolver.validateValue(varDef, undefined, 'b', 'run')).not.toThrow();
222
- });
223
- it('should reject invalid static values', () => {
224
- const varDef = {
225
- name: 'Model',
226
- displayName: 'Model',
227
- dataType: 'string',
228
- valueSource: 'static',
229
- possibleValues: [
230
- { value: 'a' },
231
- { value: 'b' }
232
- ],
233
- required: false
234
- };
235
- expect(() => resolver.validateValue(varDef, undefined, 'invalid', 'run'))
236
- .toThrow(VariableResolutionError);
237
- });
238
- it('should respect test-level restricted values', () => {
239
- const varDef = {
240
- name: 'Model',
241
- displayName: 'Model',
242
- dataType: 'string',
243
- valueSource: 'static',
244
- possibleValues: [
245
- { value: 'a' },
246
- { value: 'b' },
247
- { value: 'c' }
248
- ],
249
- required: false
250
- };
251
- const testOverride = {
252
- exposed: true,
253
- restrictedValues: ['a', 'b'] // Only a and b allowed
254
- };
255
- // 'a' should be allowed
256
- expect(() => resolver.validateValue(varDef, testOverride, 'a', 'run')).not.toThrow();
257
- // 'c' should be rejected even though it's in type possibleValues
258
- expect(() => resolver.validateValue(varDef, testOverride, 'c', 'run'))
259
- .toThrow(VariableResolutionError);
260
- });
261
- });
262
- describe('validateDataType', () => {
263
- it('should validate string type', () => {
264
- const varDef = { name: 'V', displayName: 'V', dataType: 'string', valueSource: 'freeform', required: false };
265
- expect(() => resolver.validateDataType(varDef, 'hello')).not.toThrow();
266
- expect(() => resolver.validateDataType(varDef, 123)).toThrow(VariableResolutionError);
267
- });
268
- it('should validate number type', () => {
269
- const varDef = { name: 'V', displayName: 'V', dataType: 'number', valueSource: 'freeform', required: false };
270
- expect(() => resolver.validateDataType(varDef, 123)).not.toThrow();
271
- expect(() => resolver.validateDataType(varDef, 0.5)).not.toThrow();
272
- expect(() => resolver.validateDataType(varDef, 'hello')).toThrow(VariableResolutionError);
273
- expect(() => resolver.validateDataType(varDef, NaN)).toThrow(VariableResolutionError);
274
- });
275
- it('should validate boolean type', () => {
276
- const varDef = { name: 'V', displayName: 'V', dataType: 'boolean', valueSource: 'freeform', required: false };
277
- expect(() => resolver.validateDataType(varDef, true)).not.toThrow();
278
- expect(() => resolver.validateDataType(varDef, false)).not.toThrow();
279
- expect(() => resolver.validateDataType(varDef, 'true')).toThrow(VariableResolutionError);
280
- });
281
- it('should validate date type', () => {
282
- const varDef = { name: 'V', displayName: 'V', dataType: 'date', valueSource: 'freeform', required: false };
283
- expect(() => resolver.validateDataType(varDef, new Date())).not.toThrow();
284
- expect(() => resolver.validateDataType(varDef, '2025-01-13')).not.toThrow();
285
- expect(() => resolver.validateDataType(varDef, 'not-a-date')).toThrow(VariableResolutionError);
286
- });
287
- });
288
- // ============================================================================
289
- // Available Variables Tests
290
- // ============================================================================
291
- describe('getAvailableVariables', () => {
292
- const typeSchema = {
293
- schemaVersion: '1.0',
294
- variables: [
295
- { name: 'Var1', displayName: 'Variable 1', dataType: 'string', valueSource: 'freeform', required: false },
296
- { name: 'Var2', displayName: 'Variable 2', dataType: 'number', valueSource: 'freeform', defaultValue: 10, required: false },
297
- { name: 'Var3', displayName: 'Variable 3', dataType: 'string', valueSource: 'static', possibleValues: [{ value: 'a' }, { value: 'b' }, { value: 'c' }], required: false }
298
- ]
299
- };
300
- it('should return empty array for null type schema', () => {
301
- const result = resolver.getAvailableVariables(null, null);
302
- expect(result).toEqual([]);
303
- });
304
- it('should return all variables when no test config', () => {
305
- const result = resolver.getAvailableVariables(JSON.stringify(typeSchema), null);
306
- expect(result).toHaveLength(3);
307
- });
308
- it('should filter out non-exposed variables', () => {
309
- const testConfig = {
310
- variables: {
311
- Var1: { exposed: false },
312
- Var2: { exposed: true }
313
- }
314
- };
315
- const result = resolver.getAvailableVariables(JSON.stringify(typeSchema), JSON.stringify(testConfig));
316
- expect(result).toHaveLength(2);
317
- expect(result.find(v => v.name === 'Var1')).toBeUndefined();
318
- expect(result.find(v => v.name === 'Var2')).toBeDefined();
319
- expect(result.find(v => v.name === 'Var3')).toBeDefined();
320
- });
321
- it('should apply test-level default overrides', () => {
322
- const testConfig = {
323
- variables: {
324
- Var2: { exposed: true, defaultValue: 20 }
325
- }
326
- };
327
- const result = resolver.getAvailableVariables(JSON.stringify(typeSchema), JSON.stringify(testConfig));
328
- const var2 = result.find(v => v.name === 'Var2');
329
- expect(var2?.defaultValue).toBe(20);
330
- });
331
- it('should apply restricted values from test config', () => {
332
- const testConfig = {
333
- variables: {
334
- Var3: { exposed: true, restrictedValues: ['a', 'b'] }
335
- }
336
- };
337
- const result = resolver.getAvailableVariables(JSON.stringify(typeSchema), JSON.stringify(testConfig));
338
- const var3 = result.find(v => v.name === 'Var3');
339
- expect(var3?.possibleValues).toHaveLength(2);
340
- expect(var3?.possibleValues?.map(pv => pv.value)).toEqual(['a', 'b']);
341
- });
342
- });
343
- // ============================================================================
344
- // CLI Parsing Tests
345
- // ============================================================================
346
- describe('parseCliValue', () => {
347
- it('should parse string values', () => {
348
- const varDef = { name: 'V', displayName: 'V', dataType: 'string', valueSource: 'freeform', required: false };
349
- expect(resolver.parseCliValue(varDef, 'hello')).toBe('hello');
350
- });
351
- it('should parse number values', () => {
352
- const varDef = { name: 'V', displayName: 'V', dataType: 'number', valueSource: 'freeform', required: false };
353
- expect(resolver.parseCliValue(varDef, '123')).toBe(123);
354
- expect(resolver.parseCliValue(varDef, '0.5')).toBe(0.5);
355
- });
356
- it('should throw for invalid number', () => {
357
- const varDef = { name: 'V', displayName: 'V', dataType: 'number', valueSource: 'freeform', required: false };
358
- expect(() => resolver.parseCliValue(varDef, 'not-a-number')).toThrow(VariableResolutionError);
359
- });
360
- it('should parse boolean values', () => {
361
- const varDef = { name: 'V', displayName: 'V', dataType: 'boolean', valueSource: 'freeform', required: false };
362
- expect(resolver.parseCliValue(varDef, 'true')).toBe(true);
363
- expect(resolver.parseCliValue(varDef, 'TRUE')).toBe(true);
364
- expect(resolver.parseCliValue(varDef, '1')).toBe(true);
365
- expect(resolver.parseCliValue(varDef, 'yes')).toBe(true);
366
- expect(resolver.parseCliValue(varDef, 'false')).toBe(false);
367
- expect(resolver.parseCliValue(varDef, '0')).toBe(false);
368
- expect(resolver.parseCliValue(varDef, 'no')).toBe(false);
369
- });
370
- it('should throw for invalid boolean', () => {
371
- const varDef = { name: 'V', displayName: 'V', dataType: 'boolean', valueSource: 'freeform', required: false };
372
- expect(() => resolver.parseCliValue(varDef, 'maybe')).toThrow(VariableResolutionError);
373
- });
374
- it('should parse date values', () => {
375
- const varDef = { name: 'V', displayName: 'V', dataType: 'date', valueSource: 'freeform', required: false };
376
- const result = resolver.parseCliValue(varDef, '2025-01-13');
377
- expect(result).toBeInstanceOf(Date);
378
- expect(result.getFullYear()).toBe(2025);
379
- });
380
- });
381
- describe('parseCliVariables', () => {
382
- it('should parse name=value format', () => {
383
- const result = resolver.parseCliVariables(['name=value', 'other=123']);
384
- expect(result).toEqual({ name: 'value', other: '123' });
385
- });
386
- it('should throw for invalid format (no equals)', () => {
387
- expect(() => resolver.parseCliVariables(['invalid']))
388
- .toThrow(VariableResolutionError);
389
- });
390
- it('should handle values with equals signs', () => {
391
- const result = resolver.parseCliVariables(['equation=a=b+c']);
392
- expect(result).toEqual({ equation: 'a=b+c' });
393
- });
394
- it('should convert types when schema provided', () => {
395
- const schema = {
396
- schemaVersion: '1.0',
397
- variables: [
398
- { name: 'num', displayName: 'Number', dataType: 'number', valueSource: 'freeform', required: false },
399
- { name: 'bool', displayName: 'Boolean', dataType: 'boolean', valueSource: 'freeform', required: false }
400
- ]
401
- };
402
- const result = resolver.parseCliVariables(['num=42', 'bool=true'], JSON.stringify(schema));
403
- expect(result['num']).toBe(42);
404
- expect(typeof result['num']).toBe('number');
405
- expect(result['bool']).toBe(true);
406
- expect(typeof result['bool']).toBe('boolean');
407
- });
408
- });
409
- });
410
- //# sourceMappingURL=variable-resolver.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"variable-resolver.test.js","sourceRoot":"","sources":["../../src/__tests__/variable-resolver.test.ts"],"names":[],"mappings":"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"}