UNPKG

zod

Version:

TypeScript-first schema declaration and validation library with static type inference

164 lines (141 loc) 6.23 kB
import { expect, test } from "vitest"; import { z } from "../../../../index.js"; import hr from "../../../locales/hr.js"; test("Croatian locale - type name translations in too_small errors", () => { z.config(hr()); // Test string type translation const stringSchema = z.string().min(5); const stringResult = stringSchema.safeParse("abc"); expect(stringResult.success).toBe(false); if (!stringResult.success) { expect(stringResult.error.issues[0].message).toBe("Premalo: očekivano da tekst ima >=5 znakova"); } // Test number type translation const numberSchema = z.number().min(10); const numberResult = numberSchema.safeParse(5); expect(numberResult.success).toBe(false); if (!numberResult.success) { expect(numberResult.error.issues[0].message).toBe("Premalo: očekivano da broj bude >=10"); } // Test array type translation const arraySchema = z.array(z.string()).min(3); const arrayResult = arraySchema.safeParse(["a", "b"]); expect(arrayResult.success).toBe(false); if (!arrayResult.success) { expect(arrayResult.error.issues[0].message).toBe("Premalo: očekivano da niz ima >=3 stavki"); } // Test set type translation const setSchema = z.set(z.string()).min(2); const setResult = setSchema.safeParse(new Set(["a"])); expect(setResult.success).toBe(false); if (!setResult.success) { expect(setResult.error.issues[0].message).toBe("Premalo: očekivano da skup ima >=2 stavki"); } }); test("Croatian locale - type name translations in too_big errors", () => { z.config(hr()); // Test string type translation const stringSchema = z.string().max(3); const stringResult = stringSchema.safeParse("abcde"); expect(stringResult.success).toBe(false); if (!stringResult.success) { expect(stringResult.error.issues[0].message).toBe("Preveliko: očekivano da tekst ima <=3 znakova"); } // Test number type translation const numberSchema = z.number().max(10); const numberResult = numberSchema.safeParse(15); expect(numberResult.success).toBe(false); if (!numberResult.success) { expect(numberResult.error.issues[0].message).toBe("Preveliko: očekivano da broj bude <=10"); } // Test array type translation const arraySchema = z.array(z.string()).max(2); const arrayResult = arraySchema.safeParse(["a", "b", "c"]); expect(arrayResult.success).toBe(false); if (!arrayResult.success) { expect(arrayResult.error.issues[0].message).toBe("Preveliko: očekivano da niz ima <=2 stavki"); } }); test("Croatian locale - type name translations in invalid_type errors", () => { z.config(hr()); // Test string expected, number received const stringSchema = z.string(); const stringResult = stringSchema.safeParse(123); expect(stringResult.success).toBe(false); if (!stringResult.success) { expect(stringResult.error.issues[0].message).toBe("Neispravan unos: očekuje se tekst, a primljeno je broj"); } // Test number expected, string received const numberSchema = z.number(); const numberResult = numberSchema.safeParse("abc"); expect(numberResult.success).toBe(false); if (!numberResult.success) { expect(numberResult.error.issues[0].message).toBe("Neispravan unos: očekuje se broj, a primljeno je tekst"); } // Test boolean expected, null received const booleanSchema = z.boolean(); const booleanResult = booleanSchema.safeParse(null); expect(booleanResult.success).toBe(false); if (!booleanResult.success) { expect(booleanResult.error.issues[0].message).toBe("Neispravan unos: očekuje se boolean, a primljeno je null"); } // Test array expected, object received const arraySchema = z.array(z.string()); const arrayResult = arraySchema.safeParse({}); expect(arrayResult.success).toBe(false); if (!arrayResult.success) { expect(arrayResult.error.issues[0].message).toBe("Neispravan unos: očekuje se niz, a primljeno je objekt"); } }); test("Croatian locale - other error cases", () => { z.config(hr()); // Test invalid_element with tuple const tupleSchema = z.tuple([z.string(), z.number()]); const tupleResult = tupleSchema.safeParse(["abc", "not a number"]); expect(tupleResult.success).toBe(false); if (!tupleResult.success) { expect(tupleResult.error.issues[0].message).toContain("Neispravan unos"); } // Test invalid_value with enum const enumSchema = z.enum(["a", "b"]); const enumResult = enumSchema.safeParse("c"); expect(enumResult.success).toBe(false); if (!enumResult.success) { expect(enumResult.error.issues[0].message).toBe('Neispravna opcija: očekivano jedno od "a"|"b"'); } // Test not_multiple_of const multipleSchema = z.number().multipleOf(3); const multipleResult = multipleSchema.safeParse(10); expect(multipleResult.success).toBe(false); if (!multipleResult.success) { expect(multipleResult.error.issues[0].message).toBe("Neispravan broj: mora biti višekratnik od 3"); } // Test unrecognized_keys const strictSchema = z.object({ a: z.string() }).strict(); const strictResult = strictSchema.safeParse({ a: "test", b: "extra" }); expect(strictResult.success).toBe(false); if (!strictResult.success) { expect(strictResult.error.issues[0].message).toBe('Neprepoznat ključ: "b"'); } // Test invalid_union const unionSchema = z.union([z.string(), z.number()]); const unionResult = unionSchema.safeParse(true); expect(unionResult.success).toBe(false); if (!unionResult.success) { expect(unionResult.error.issues[0].message).toBe("Neispravan unos"); } // Test invalid_format with regex const regexSchema = z.string().regex(/^[a-z]+$/); const regexResult = regexSchema.safeParse("ABC123"); expect(regexResult.success).toBe(false); if (!regexResult.success) { expect(regexResult.error.issues[0].message).toBe("Neispravan tekst: mora odgovarati uzorku /^[a-z]+$/"); } // Test invalid_format with startsWith const startsWithSchema = z.string().startsWith("hello"); const startsWithResult = startsWithSchema.safeParse("world"); expect(startsWithResult.success).toBe(false); if (!startsWithResult.success) { expect(startsWithResult.error.issues[0].message).toBe('Neispravan tekst: mora započinjati s "hello"'); } });