Skip to content

Commit 4955beb

Browse files
committed
Mapped type tests
1 parent 894680c commit 4955beb

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

src/schemas.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -590,14 +590,14 @@ export class MappedSchema<K extends string | number | symbol, V> extends Schema<
590590
super(requiredMessage);
591591
}
592592

593-
public validate(value: unknown, context: ValidationContext): ErrorType<{ [Key in K]: V }, string> | undefined {
593+
public validate(value: unknown, context: ValidationContext = {}): ErrorType<{ [Key in K]: V }, string> | undefined {
594594
let v = this.validateNullable(value);
595595
if (v !== null) return v;
596596

597597
if (typeof value !== "object") return "Must be object";
598598

599599
let err: any = {};
600-
let keys = Object.keys(value!);
600+
let keys = Array.isArray(value) ? Array.from(value.keys()) : Object.keys(value!);
601601
for (let i = 0; i < keys.length; i++) {
602602
let key = keys[i];
603603
let keyError = this.keySchema.validate(key, context);

tests/object.test.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,17 @@ test("array", () => {
2323
expect(tv.array(tv.boolean()).validate([true, false, true])).toBeUndefined();
2424
expect(tv.array(tv.boolean()).validate([true, false, 0])).toStrictEqual({ 2: "Must be boolean" });
2525
});
26+
27+
test("mapped", () => {
28+
let t = tv.mapped(tv.value("a").or(tv.value("b")), tv.string());
29+
expect(t.validate(undefined)).toBe("Enter a value");
30+
expect(t.validate(null)).toBe("Null is not acceptable");
31+
expect(t.validate({ a: "nice" })).toBeUndefined();
32+
expect(t.validate({ b: "" })).toBeUndefined();
33+
expect(t.validate({ c: "" })).toStrictEqual({ c: "Does not match possible values" });
34+
expect(t.validate({ a: 100 })).toStrictEqual({ a: "Must be string" });
35+
expect(t.validate({ b: false })).toStrictEqual({ b: "Must be string" });
36+
37+
expect(tv.mapped(tv.number(), tv.array(tv.number())).validate([[100]])).toBeUndefined();
38+
expect(tv.mapped(tv.number(), tv.array(tv.number())).validate([[[100]]])).toStrictEqual({ 0: { 0: "Must be number" } });
39+
});

0 commit comments

Comments
 (0)