mirror of
https://github.com/multipleof4/lynchmark.git
synced 2026-01-14 00:27:55 +00:00
Feat: Add JSON schema validator test
This commit is contained in:
32
tests/8_json_validator/test.js
Normal file
32
tests/8_json_validator/test.js
Normal file
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
functionName: 'validateJSON',
|
||||
prompt: `// Write an async JavaScript function 'validateJSON' that validates a JSON object against a JSON Schema.
|
||||
// - The function must accept a JSON object and a JSON Schema object.
|
||||
// - You MUST use dynamic import() to load one or more libraries from a CDN for JSON Schema validation.
|
||||
// - Return an object: { valid: boolean, errors: array } where errors contains validation error messages if invalid.
|
||||
// - Handle nested schemas, required fields, type validation, and pattern matching.`,
|
||||
runTest: async (validateJSON) => {
|
||||
const assert = {
|
||||
strictEqual: (a, e, m) => { if (a !== e) throw new Error(m || `FAIL: ${a} !== ${e}`) },
|
||||
ok: (v, m) => { if (!v) throw new Error(m) },
|
||||
};
|
||||
const schema = {
|
||||
type: 'object',
|
||||
required: ['name', 'age'],
|
||||
properties: {
|
||||
name: { type: 'string', minLength: 1 },
|
||||
age: { type: 'number', minimum: 0 },
|
||||
email: { type: 'string', pattern: '^[^@]+@[^@]+\\.[^@]+$' }
|
||||
}
|
||||
};
|
||||
const validData = { name: 'Alice', age: 30, email: 'alice@example.com' };
|
||||
const invalidData = { name: '', age: -5 };
|
||||
|
||||
const validResult = await validateJSON(validData, schema);
|
||||
assert.strictEqual(validResult.valid, true, 'Test Failed: Valid data marked as invalid.');
|
||||
|
||||
const invalidResult = await validateJSON(invalidData, schema);
|
||||
assert.strictEqual(invalidResult.valid, false, 'Test Failed: Invalid data marked as valid.');
|
||||
assert.ok(Array.isArray(invalidResult.errors) && invalidResult.errors.length > 0, 'Test Failed: No errors returned for invalid data.');
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user