Skip to content

Commit

Permalink
Common test script for v3.1 and vNext
Browse files Browse the repository at this point in the history
  • Loading branch information
ralfhandl committed Feb 6, 2025
1 parent 57cd90c commit 8440252
Show file tree
Hide file tree
Showing 49 changed files with 67 additions and 115 deletions.
4 changes: 2 additions & 2 deletions scripts/schema-test-coverage.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ for schemaDir in schemas/v3* ; do
version=$(basename "$schemaDir")
echo $version

node scripts/schema-test-coverage.mjs $schemaDir/schema.yaml tests/$version/pass
node scripts/schema-test-coverage.mjs $schemaDir/schema.yaml tests/schemas/$version/pass

echo
done

echo vNext
node scripts/schema-test-coverage.mjs src/schemas/validation/schema.yaml tests/vNext/pass
node scripts/schema-test-coverage.mjs src/schemas/validation/schema.yaml tests/schemas/vNext/pass
64 changes: 64 additions & 0 deletions tests/schemas/schema.test.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import { readdirSync, readFileSync } from "node:fs";
import YAML from "yaml";
import { validate, setMetaSchemaOutputFormat } from "@hyperjump/json-schema/openapi-3-1";
import { BASIC } from "@hyperjump/json-schema/experimental";
import { describe, test, expect } from "vitest";

import contentTypeParser from "content-type";
import { addMediaTypePlugin } from "@hyperjump/browser";
import { buildSchemaDocument } from "@hyperjump/json-schema/experimental";

addMediaTypePlugin("application/schema+yaml", {
parse: async (response) => {
const contentType = contentTypeParser.parse(response.headers.get("content-type") ?? "");
const contextDialectId = contentType.parameters.schema ?? contentType.parameters.profile;

const foo = YAML.parse(await response.text());
return buildSchemaDocument(foo, response.url, contextDialectId);
},
fileMatcher: (path) => path.endsWith(".yaml")
});

const parseYamlFromFile = (filePath) => {
const schemaYaml = readFileSync(filePath, "utf8");
return YAML.parse(schemaYaml, { prettyErrors: true });
};

setMetaSchemaOutputFormat(BASIC);

const SCHEMAS = [
{ schema: "./schemas/v3.1/schema.yaml", tests: "./tests/schemas/v3.1" },
{ schema: "./src/schemas/validation/schema.yaml", tests: "./tests/schemas/vNext" }
];


for (const s of SCHEMAS) {
const validateOpenApi = await validate(s.schema);
const folder = s.tests;

describe(folder, () => {
describe("Pass", () => {
readdirSync(`${folder}/pass`, { withFileTypes: true })
.filter((entry) => entry.isFile() && /\.yaml$/.test(entry.name))
.forEach((entry) => {
test(entry.name, () => {
const instance = parseYamlFromFile(`${folder}/pass/${entry.name}`);
const output = validateOpenApi(instance, BASIC);
expect(output).to.deep.equal({ valid: true });
});
});
});

describe("Fail", () => {
readdirSync(`${folder}/fail`, { withFileTypes: true })
.filter((entry) => entry.isFile() && /\.yaml$/.test(entry.name))
.forEach((entry) => {
test(entry.name, () => {
const instance = parseYamlFromFile(`${folder}/fail/${entry.name}`);
const output = validateOpenApi(instance, BASIC);
expect(output.valid).to.equal(false);
});
});
});
});
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ const parseYamlFromFile = (filePath) => {
setMetaSchemaOutputFormat(BASIC);

const validateOpenApi = await validate("./schemas/v3.0/schema.yaml");
const folder = './tests/v3.0/pass/';
const folder = './tests/schemas/v3.0/pass/';

describe("pass", async () => {
readdirSync(folder, { withFileTypes: true })
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
56 changes: 0 additions & 56 deletions tests/v3.1/schema.test.mjs

This file was deleted.

56 changes: 0 additions & 56 deletions tests/vNext/schema.test.mjs

This file was deleted.

0 comments on commit 8440252

Please sign in to comment.