98 lines
1.8 KiB
TypeScript
98 lines
1.8 KiB
TypeScript
import {
|
|
assertEquals,
|
|
assertNotEquals,
|
|
} from "https://deno.land/std@0.53.0/testing/asserts.ts";
|
|
import {
|
|
validate,
|
|
Validatable,
|
|
ArraySymbol,
|
|
isString,
|
|
isNumber,
|
|
isInteger,
|
|
isRequired,
|
|
} from "./mod.ts";
|
|
|
|
Deno.test("validate schema (match)", async () => {
|
|
const values: [any, Validatable][] = [
|
|
[
|
|
"string",
|
|
isString(),
|
|
],
|
|
[
|
|
"string",
|
|
[isString()],
|
|
],
|
|
[
|
|
["arr", "ay"],
|
|
{ [ArraySymbol]: isString() },
|
|
],
|
|
[
|
|
{ foo: 3.1415, lorem: "ipsum" },
|
|
{ foo: isNumber(), lorem: [isString()] },
|
|
],
|
|
[
|
|
{},
|
|
{ optional: [isString()] },
|
|
],
|
|
[
|
|
{ foo: { bar: "" } },
|
|
{ foo: { bar: [isRequired(), isString()] } },
|
|
],
|
|
[
|
|
{ foo: { bar: "" } },
|
|
{ foo: { bar: [isString()] } },
|
|
],
|
|
[
|
|
{ foo: {} },
|
|
{ foo: { bar: [isString()] } },
|
|
],
|
|
[
|
|
{},
|
|
{ foo: { bar: [isString()] } },
|
|
],
|
|
];
|
|
for (const [value, constraints] of values) {
|
|
assertEquals([], await validate(value, constraints));
|
|
}
|
|
});
|
|
|
|
Deno.test("validate schema (no match)", async () => {
|
|
const values: [any, Validatable][] = [
|
|
[
|
|
6,
|
|
isString(),
|
|
],
|
|
[
|
|
false,
|
|
[isString()],
|
|
],
|
|
[
|
|
["arr", ["ay"]],
|
|
{ [ArraySymbol]: isString() },
|
|
],
|
|
[
|
|
{ foo: 3.1415, lorem: "ipsum" },
|
|
{ foo: isInteger(), lorem: [isString()] },
|
|
],
|
|
[
|
|
{},
|
|
{ required: [isRequired(), isString()] },
|
|
],
|
|
[
|
|
{ foo: { bar: 1 } },
|
|
{ foo: { bar: [isRequired(), isString()] } },
|
|
],
|
|
[
|
|
{ foo: {} },
|
|
{ foo: { bar: [isRequired(), isString()] } },
|
|
],
|
|
[
|
|
{},
|
|
{ foo: { bar: [isRequired(), isString()] } },
|
|
],
|
|
];
|
|
for (const [value, constraints] of values) {
|
|
assertNotEquals([], await validate(value, constraints));
|
|
}
|
|
});
|