Skip to content

Commit 8136caa

Browse files
committed
Use full schema-base to run schema tests
1 parent c504ea4 commit 8136caa

File tree

1 file changed

+60
-3
lines changed

1 file changed

+60
-3
lines changed

tests/schema/schema.test.mjs

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { readdirSync, readFileSync } from "node:fs";
22
import YAML from "yaml";
3-
import { validate, setMetaSchemaOutputFormat } from "@hyperjump/json-schema/openapi-3-1";
4-
import { BASIC } from "@hyperjump/json-schema/experimental";
3+
import { registerSchema, validate, setMetaSchemaOutputFormat } from "@hyperjump/json-schema/openapi-3-1";
4+
import { BASIC, addKeyword, defineVocabulary } from "@hyperjump/json-schema/experimental";
55
import { describe, test, expect } from "vitest";
66

77
import contentTypeParser from "content-type";
@@ -26,7 +26,64 @@ const parseYamlFromFile = (filePath) => {
2626

2727
setMetaSchemaOutputFormat(BASIC);
2828

29-
const validateOpenApi = await validate("./src/schemas/validation/schema.yaml");
29+
addKeyword({
30+
id: "https://spec.openapis.org/oas/schema/vocab/keyword/discriminator",
31+
interpret: (discriminator, instance, context) => {
32+
return true;
33+
},
34+
/* discriminator is not exactly an annotation, but it's not allowed
35+
* to change the validation outcome (hence returing true from interopret())
36+
* and for our purposes of testing, this is sufficient.
37+
*/
38+
annotation: (discriminator) => {
39+
return discriminator;
40+
},
41+
});
42+
43+
addKeyword({
44+
id: "https://spec.openapis.org/oas/schema/vocab/keyword/example",
45+
interpret: (example, instance, context) => {
46+
return true;
47+
},
48+
annotation: (example) => {
49+
return example;
50+
},
51+
});
52+
53+
addKeyword({
54+
id: "https://spec.openapis.org/oas/schema/vocab/keyword/externalDocs",
55+
interpret: (externalDocs, instance, context) => {
56+
return true;
57+
},
58+
annotation: (externalDocs) => {
59+
return externalDocs;
60+
},
61+
});
62+
63+
addKeyword({
64+
id: "https://spec.openapis.org/oas/schema/vocab/keyword/xml",
65+
interpret: (xml, instance, context) => {
66+
return true;
67+
},
68+
annotation: (xml) => {
69+
return xml;
70+
},
71+
});
72+
73+
defineVocabulary(
74+
"https://spec.openapis.org/oas/3.1/vocab/base",
75+
{
76+
"discriminator": "https://spec.openapis.org/oas/schema/vocab/keyword/discriminator",
77+
"example": "https://spec.openapis.org/oas/schema/vocab/keyword/example",
78+
"externalDocs": "https://spec.openapis.org/oas/schema/vocab/keyword/externalDocs",
79+
"xml": "https://spec.openapis.org/oas/schema/vocab/keyword/xml",
80+
},
81+
);
82+
83+
registerSchema(parseYamlFromFile("./src/schemas/validation/meta.yaml"));
84+
registerSchema(parseYamlFromFile("./src/schemas/validation/dialect.yaml"));
85+
registerSchema(parseYamlFromFile("./src/schemas/validation/schema.yaml"));
86+
const validateOpenApi = await validate("./src/schemas/validation/schema-base.yaml");
3087
const fixtures = './tests/schema';
3188

3289
describe("v3.1", () => {

0 commit comments

Comments
 (0)