const test = require('node:test'); const assert = require('node:assert/strict'); const { sanitizeText, parseList, isValidDateInput, isFutureDateInput, isValidPersonName, } = require('../validation/commonValidation'); test('sanitizeText trims and normalizes nullish values', () => { assert.equal(sanitizeText(' hello '), 'hello'); assert.equal(sanitizeText(null), ''); assert.equal(sanitizeText(undefined), ''); }); test('parseList handles arrays and delimited strings', () => { assert.deepEqual(parseList([' a ', 'b', ''], /,/), ['a', 'b']); assert.deepEqual(parseList('one, two,,three', /,/), ['one', 'two', 'three']); }); test('isValidDateInput accepts parseable dates and rejects impossible dates', () => { assert.equal(isValidDateInput('2026-04-03'), true); assert.equal(isValidDateInput('2026/04/03'), true); assert.equal(isValidDateInput('2026-13-40'), false); assert.equal(isValidDateInput('invalid'), false); }); test('isFutureDateInput detects dates in the future', () => { const toLocalDateInput = (date) => { const local = new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000); return local.toISOString().slice(0, 10); }; const today = new Date(); const tomorrow = toLocalDateInput(new Date(today.getTime() + 24 * 60 * 60 * 1000)); const yesterday = toLocalDateInput(new Date(today.getTime() - 24 * 60 * 60 * 1000)); assert.equal(isFutureDateInput(tomorrow), true); assert.equal(isFutureDateInput(yesterday), false); }); test('isValidPersonName rejects numbers and accepts basic punctuation', () => { assert.equal(isValidPersonName('Juan dela Cruz'), true); assert.equal(isValidPersonName("O'Neil, Jr."), true); assert.equal(isValidPersonName('John 123'), false); });