UNPKG

alepha

Version:

Easy-to-use modern TypeScript framework for building many kind of applications.

153 lines (130 loc) 4.85 kB
import { z } from "alepha"; import { describe, test } from "vitest"; import { FakeProvider } from "../providers/FakeProvider.ts"; describe("FakeProvider - Key Name Intelligence", () => { test("generates contextual data based on key names", ({ expect }) => { const fake = new FakeProvider(); const schema = z.object({ firstName: z.text(), lastName: z.text(), email: z.text(), age: z.integer(), phone: z.text(), address: z.text(), city: z.text(), company: z.text(), username: z.text(), }); const result = fake.generate(schema); // Verify types expect(typeof result.firstName).toBe("string"); expect(typeof result.lastName).toBe("string"); expect(typeof result.email).toBe("string"); expect(typeof result.age).toBe("number"); expect(typeof result.phone).toBe("string"); expect(typeof result.address).toBe("string"); expect(typeof result.city).toBe("string"); expect(typeof result.company).toBe("string"); expect(typeof result.username).toBe("string"); // Verify email format (basic check) expect(result.email).toMatch(/@/); // Verify age is in expected range for context-aware generation expect(result.age).toBeGreaterThanOrEqual(18); expect(result.age).toBeLessThanOrEqual(99); }); test("format takes precedence over key name", ({ expect }) => { const fake = new FakeProvider(); const schema = z.object({ // Even though key is "email", format: uuid should generate UUID email: z.uuid(), // Even though key is "id", format: email should generate email id: z.email(), }); const result = fake.generate(schema); // email field should be UUID format expect(result.email).toMatch( /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, ); // id field should be email format expect(result.id).toMatch(/@/); }); test("enum values ignore key name context", ({ expect }) => { const fake = new FakeProvider(); const schema = z.object({ // Even though key is "email", enum should pick from values email: z.enum(["user1", "user2", "user3"]), }); const result = fake.generate(schema); expect(["user1", "user2", "user3"]).toContain(result.email); // Should NOT be an email format expect(result.email).not.toMatch(/@/); }); test("generates realistic user profiles", ({ expect }) => { const fake = new FakeProvider().configure({ seed: 67890 }); const userSchema = z.object({ firstName: z.shortText(), lastName: z.shortText(), fullName: z.text(), email: z.text(), username: z.text(), age: z.integer(), bio: z.longText(), avatar: z.text(), website: z.text(), jobTitle: z.text(), company: z.text(), address: z.text(), city: z.text(), state: z.text(), country: z.text(), zipCode: z.text(), phone: z.text(), }); const user = fake.generate(userSchema); // Verify structure expect(typeof user.firstName).toBe("string"); expect(typeof user.lastName).toBe("string"); expect(typeof user.fullName).toBe("string"); expect(typeof user.email).toBe("string"); expect(typeof user.username).toBe("string"); expect(typeof user.age).toBe("number"); expect(typeof user.bio).toBe("string"); expect(typeof user.avatar).toBe("string"); expect(typeof user.website).toBe("string"); expect(typeof user.jobTitle).toBe("string"); expect(typeof user.company).toBe("string"); expect(typeof user.address).toBe("string"); expect(typeof user.city).toBe("string"); expect(typeof user.state).toBe("string"); expect(typeof user.country).toBe("string"); expect(typeof user.zipCode).toBe("string"); expect(typeof user.phone).toBe("string"); // Check some specific patterns expect(user.email).toMatch(/@/); expect(user.website).toMatch(/^https?:\/\//); }); test("numeric key names influence generation", ({ expect }) => { const fake = new FakeProvider(); const schema = z.object({ age: z.integer(), year: z.integer(), month: z.integer(), day: z.integer(), price: z.number(), amount: z.number(), }); const result = fake.generate(schema); // Age should be in realistic range expect(result.age).toBeGreaterThanOrEqual(18); expect(result.age).toBeLessThanOrEqual(99); // Month should be 1-12 expect(result.month).toBeGreaterThanOrEqual(1); expect(result.month).toBeLessThanOrEqual(12); // Day should be 1-31 expect(result.day).toBeGreaterThanOrEqual(1); expect(result.day).toBeLessThanOrEqual(31); // Price/amount should be positive expect(result.price).toBeGreaterThan(0); expect(result.amount).toBeGreaterThan(0); }); });