fortify-schema
Version:
TypeScript interface-like schema validation system that's easier to use than Zod
65 lines (55 loc) ⢠2.31 kB
text/typescript
import { Interface } from "../schema/mode/interfaces/Interface";
console.log("š DEBUG: Conditional Logic");
console.log("===========================\n");
// Simple test case that should FAIL
const TestSchema = Interface({
role: "admin|user",
permissions: "when:role=admin:string[]:string[]?"
});
console.log("Testing conditional validation logic...\n");
// This should PASS (role=admin, permissions=string[])
const adminTest = TestSchema.safeParse({
role: "admin",
permissions: ["read", "write"]
});
console.log("1. Admin with permissions:", adminTest.success);
if (!adminTest.success) {
console.log(" Errors:", adminTest.errors);
}
// This should PASS (role=user, permissions=undefined - optional)
const userNoPermissions = TestSchema.safeParse({
role: "user"
// No permissions field
});
console.log("2. User without permissions:", userNoPermissions.success);
if (!userNoPermissions.success) {
console.log(" Errors:", userNoPermissions.errors);
}
// This should FAIL (role=user, permissions=string[] - not allowed for user)
const userWithPermissions = TestSchema.safeParse({
role: "user",
permissions: ["read"] // This should fail because user role shouldn't have permissions
});
console.log("3. User WITH permissions (should FAIL):", userWithPermissions.success);
if (!userWithPermissions.success) {
console.log(" Errors:", userWithPermissions.errors);
} else {
console.log(" ā ERROR: This should have failed but passed!");
}
// This should FAIL (role=admin, permissions=undefined - admin needs permissions)
const adminNoPermissions = TestSchema.safeParse({
role: "admin"
// No permissions - admin should require permissions
});
console.log("4. Admin without permissions (should FAIL):", adminNoPermissions.success);
if (!adminNoPermissions.success) {
console.log(" Errors:", adminNoPermissions.errors);
} else {
console.log(" ā ERROR: This should have failed but passed!");
}
console.log("\nšÆ Expected Results:");
console.log("1. Admin with permissions: ā
PASS");
console.log("2. User without permissions: ā
PASS");
console.log("3. User WITH permissions: ā FAIL");
console.log("4. Admin without permissions: ā FAIL");
console.log("\nIf tests 3 and 4 are passing, the conditional logic is broken!");