Skip to content

Commit

Permalink
test: properly test more validate errors
Browse files Browse the repository at this point in the history
Previously, we intended to test the validation of bad docs but weren't
doing so correctly. This fixes that.
  • Loading branch information
EvanHahn committed Sep 4, 2024
1 parent 0691e74 commit 7905f48
Showing 1 changed file with 28 additions and 6 deletions.
34 changes: 28 additions & 6 deletions test/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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(() => {
Expand All @@ -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`
)
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 7905f48

Please sign in to comment.