import {test} from 'node:test';
import assert from 'node:assert/strict';
import {validate, required, minLength, integer} from './main.js';
/** The error that fn throws; the test fails when fn throws nothing. */
function caught(fn) {
try {
fn();
} catch (error) {
return error;
}
assert.fail('es wurde nichts geworfen');
}
const schema = {name: [required(), minLength(2)], age: [required(), integer(16, 120)]};
test('gültige Daten kommen unverändert zurück', () => {
assert.deepEqual(validate(schema, {name: 'Ada', age: 36}), {name: 'Ada', age: 36}, 'validate sollte die Daten zurückgeben');
});
test('zwei verletzte Felder ergeben einen AggregateError mit zwei Fehlern', () => {
const error = caught(() => validate(schema, {name: 'A', age: 15}));
assert.ok(error instanceof AggregateError, `validate warf ${error.name}, keinen AggregateError`);
assert.equal(error.message, '2 invalid fields');
assert.deepEqual(error.errors.map((e) => e.field), ['name', 'age']);
});
test('ein Problem pro Feld, und der Singular bei einem Feld', () => {
const error = caught(() => validate(schema, {age: 30}));
assert.ok(error instanceof AggregateError, `validate warf ${error.name}, keinen AggregateError`);
assert.equal(error.message, '1 invalid field');
assert.deepEqual(error.errors.map((e) => e.message), ['name: is required']);
});