From 7905f48684ea5b16a8b6217ac9526a5cb81cf29d Mon Sep 17 00:00:00 2001 From: Evan Hahn Date: Wed, 4 Sep 2024 14:32:49 +0000 Subject: [PATCH] test: properly test more `validate` errors Previously, we intended to test the validation of bad docs but weren't doing so correctly. This fixes that. --- test/index.test.js | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/test/index.test.js b/test/index.test.js index 0ea13aa..81689a4 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -20,6 +20,10 @@ import { badDocs, } from './fixtures/index.js' +/** @import { SchemaName } from '../dist/types.js' */ + +const schemaNames = /** @type {SchemaName[]} */ (Object.keys(dataTypeIds)) + test('Bad docs throw when encoding', () => { for (const { text, doc } of badDocs) { assert.throws(() => { @@ -29,19 +33,29 @@ test('Bad docs throw when encoding', () => { } }) -test(`Bad docs won't validate`, () => { +test('Bad docs throw when validating if bad schema name', () => { for (const { text, doc } of badDocs) { + const { schemaName } = doc + if (isSchemaName(schemaName)) continue + assert.throws(() => { - // @ts-expect-error - validate(doc) + validate(/** @type {any} */ (schemaName), doc) }, text) } }) -test('validate bad docs', () => { - for (const schemaName of Object.keys(currentSchemaVersions)) { +test(`Bad docs won't validate`, () => { + for (const { text, doc } of badDocs) { + const { schemaName } = doc + if (!isSchemaName(schemaName)) continue + + assert(!validate(schemaName, doc), text) + } +}) + +test('validate empty docs', () => { + for (const schemaName of schemaNames) { assert( - // @ts-ignore !validate(schemaName, {}), `${schemaName} with missing properties should not validate` ) @@ -225,6 +239,14 @@ test(`test encoding of wrongly formatted header`, async () => { }) }) +/** + * @param {unknown} value + * @returns {value is SchemaName} + */ +function isSchemaName(value) { + return schemaNames.includes(/** @type {any} */ (value)) +} + /** * Remove undefined properties (deeply) from an object, by round-tripping to * JSON. Also handles Buffers via JSON.parse reviver