Skip to content

Commit

Permalink
Fix Ajv validation warning (#576)
Browse files Browse the repository at this point in the history
* Fix Ajv validation warning

* Add test
  • Loading branch information
toasted-nutbread authored Jan 27, 2024
1 parent 39ea53f commit 3c76b87
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 0 deletions.
2 changes: 2 additions & 0 deletions ext/data/schemas/dictionary-term-bank-v3-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,8 @@
{
"type": "array",
"description": "Deinflection of the term to an uninflected term.",
"minItems": 2,
"maxItems": 2,
"items": [
{
"type": "string",
Expand Down
71 changes: 71 additions & 0 deletions test/ajv-schemas.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* Copyright (C) 2024 Yomitan Authors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

import Ajv from 'ajv';
import standaloneCode from 'ajv/dist/standalone/index.js';
import {readFileSync, readdirSync} from 'fs';
import {dirname, join} from 'path';
import {fileURLToPath} from 'url';
import {describe, test} from 'vitest';
import {parseJson} from '../dev/json.js';

/**
* @param {string} path
* @returns {import('ajv').AnySchema}
*/
function loadSchema(path) {
return parseJson(readFileSync(path, {encoding: 'utf8'}));
}

const extDir = join(dirname(fileURLToPath(import.meta.url)), '..', 'ext');

describe('Ajv schema compilation', () => {
const schemaDir = join(extDir, 'data/schemas/');
const schemaFileNames = readdirSync(schemaDir);
/** @type {{name: string, schema: import('ajv').AnySchema}[]} */
const schemaTestCases = [];
for (const schemaFileName of schemaFileNames) {
schemaTestCases.push({name: schemaFileName, schema: loadSchema(join(schemaDir, schemaFileName))});
}

describe.each(schemaTestCases)('Validating $name', ({schema}) => {
test('Compiles without warnings', ({expect}) => {
/** @type {string[]} */
const messages = [];
/**
* @param {...unknown} args
*/
const log = (...args) => {
messages.push(args.join(' '));
};
const ajv = new Ajv({
schemas: [schema],
code: {source: true, esm: true},
allowUnionTypes: true,
logger: {
log,
warn: log,
error: log
}
});
standaloneCode(ajv);
if (messages.length > 0) {
expect.fail(messages.join('\n'));
}
});
});
});

0 comments on commit 3c76b87

Please sign in to comment.