fortify-schema
Version:
A modern TypeScript validation library designed around familiar interface syntax and powerful conditional validation. Experience schema validation that feels natural to TypeScript developers while unlocking advanced runtime validation capabilities.
68 lines (56 loc) โข 2.44 kB
text/typescript
// ====================================================================
// TEST ORIGINAL FAILING CASE
// ====================================================================
import { Interface } from "../../schema/mode/interfaces/Interface";
// bugs in logics and extension
const ComplexDefaultsSchema = Interface({
config: "any?",
// Object defaults
// @fortify-ignore
defaultSettings:
'when config.settings.$exists() *? any : ={"theme":"dark","lang":"en"}',
// Array defaults
// @fortify-ignore
defaultTags: 'when config.tags.$exists() *? string[] : =["default","user"]',
// Nested object defaults
defaultProfile:
'when config.profile.$exists() *? any : ={"name":"Anonymous","avatar":null}',
// Complex conditional defaults
advancedConfig:
'when config.advanced.$exists() *? any : ={"features":[],"permissions":{}}',
});
const config = {
// settings: "yes", //not exist
// advancedConfig: "yes", //not exist
defaultProfile: "yes",
defaultTags: "yes",
};
console.log("๐ Starting complex default tests...");
// Test 1: Wrong values (should fail with correct error messages)
console.log("๐งช Test 1: Wrong values (should fail)");
const result1 = ComplexDefaultsSchema.safeParse({
config,
defaultSettings: "", // WRONG: condition false, expects ={"theme":"dark","lang":"en"}
defaultTags: true, // WRONG: condition false, expects =["default","user"]
defaultProfile: true, // WRONG: condition false, expects ={"name":"Anonymous","avatar":null}
advancedConfig: "", // WRONG: condition false, expects ={"features":[],"permissions":{}}
});
if (result1.success) {
console.log("โ
Unexpected success:", result1.data);
} else {
console.log("โ Expected errors:", result1.errors);
}
// Test 2: Correct default values (should pass)
console.log("\n๐งช Test 2: Correct default values (should pass)");
const result2 = ComplexDefaultsSchema.safeParse({
config,
defaultSettings: { theme: "dark", lang: "en" }, // CORRECT: matches default
defaultTags: ["default", "user"], // CORRECT: matches default
defaultProfile: { name: "Anonymous", avatar: null }, // CORRECT: matches default
advancedConfig: { features: [], permissions: {} }, // CORRECT: matches default
});
if (result2.success) {
console.log("โ
Expected success:", result2.data);
} else {
console.log("โ Unexpected errors:", result2.errors);
}