UNPKG

hey-api-builders

Version:

A custom plugin for @hey-api/openapi-ts that generates mock data builders with a lightweight custom runtime, Zod integration, or static mock generation.

576 lines 34.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const vitest_1 = require("vitest"); const zod_mock_generator_1 = require("./zod-mock-generator"); (0, vitest_1.describe)('Zod Mock Generator', () => { (0, vitest_1.describe)('generateZodSchema', () => { (0, vitest_1.it)('generates z.string() for string type', () => { const schema = { type: 'string' }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.string()'); }); (0, vitest_1.it)('generates z.number() for number type', () => { const schema = { type: 'number' }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.number()'); }); (0, vitest_1.it)('generates z.number().int() for integer type', () => { const schema = { type: 'integer' }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toContain('z.number().int()'); }); (0, vitest_1.it)('generates z.boolean() for boolean type', () => { const schema = { type: 'boolean' }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.boolean()'); }); (0, vitest_1.it)('generates z.null() for null type', () => { const schema = { type: 'null' }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.null()'); }); (0, vitest_1.it)('handles string with uuid format', () => { const schema = { type: 'string', format: 'uuid' }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.string().uuid()'); }); (0, vitest_1.it)('handles string with email format', () => { const schema = { type: 'string', format: 'email' }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.string().email()'); }); (0, vitest_1.it)('handles string with url format', () => { const schema = { type: 'string', format: 'url' }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.string().url()'); }); (0, vitest_1.it)('handles string with date format', () => { const schema = { type: 'string', format: 'date' }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.string().date()'); }); (0, vitest_1.it)('handles string with date-time format', () => { const schema = { type: 'string', format: 'date-time' }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.string().datetime()'); }); (0, vitest_1.it)('handles string with phone format', () => { const schema = { type: 'string', format: 'phone' }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toContain('z.string().regex'); (0, vitest_1.expect)(result).toContain('\\+?[1-9]\\d{1,14}'); }); (0, vitest_1.it)('handles string with minLength', () => { const schema = { type: 'string', minLength: 5 }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.string().min(5)'); }); (0, vitest_1.it)('handles string with maxLength', () => { const schema = { type: 'string', maxLength: 100 }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.string().max(100)'); }); (0, vitest_1.it)('handles string with pattern', () => { const schema = { type: 'string', pattern: '^[A-Z]+$' }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toContain('.regex(/^[A-Z]+$/)'); }); (0, vitest_1.it)('handles number with minimum', () => { const schema = { type: 'number', minimum: 0 }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.number().min(0)'); }); (0, vitest_1.it)('handles number with maximum', () => { const schema = { type: 'number', maximum: 100 }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.number().max(100)'); }); (0, vitest_1.it)('handles number with exclusive minimum', () => { const schema = { type: 'number', exclusiveMinimum: 0 }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.number().gt(0)'); }); (0, vitest_1.it)('handles number with exclusive maximum', () => { const schema = { type: 'number', exclusiveMaximum: 100 }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.number().lt(100)'); }); (0, vitest_1.it)('handles object with properties', () => { const schema = { type: 'object', properties: { name: { type: 'string' }, age: { type: 'number' }, }, required: ['name'], }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toContain('z.object({'); (0, vitest_1.expect)(result).toContain('name: z.string()'); (0, vitest_1.expect)(result).toContain('age: z.number().optional()'); }); (0, vitest_1.it)('handles array type', () => { const schema = { type: 'array', items: { type: 'string' }, }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toBe('z.array(z.string())'); }); (0, vitest_1.it)('handles array with minItems', () => { const schema = { type: 'array', items: { type: 'string' }, minItems: 1, }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toContain('.min(1)'); }); (0, vitest_1.it)('handles array with maxItems', () => { const schema = { type: 'array', items: { type: 'string' }, maxItems: 10, }; const result = (0, zod_mock_generator_1.generateZodSchema)(schema); (0, vitest_1.expect)(result).toContain('.max(10)'); }); }); (0, vitest_1.describe)('generateMockFromZodSchema', () => { (0, vitest_1.beforeEach)(() => { vitest_1.vi.spyOn(Math, 'random').mockReturnValue(0.5); }); (0, vitest_1.describe)('primitive types', () => { (0, vitest_1.it)('generates mock for z.string()', () => { const zodSchema = 'z.string()'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result).toBeTruthy(); }); (0, vitest_1.it)('generates mock for z.number()', () => { const zodSchema = 'z.number()'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('number'); }); (0, vitest_1.it)('generates mock for z.boolean()', () => { const zodSchema = 'z.boolean()'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('boolean'); }); (0, vitest_1.it)('generates null for z.null()', () => { const zodSchema = 'z.null()'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(result).toBe(null); }); (0, vitest_1.it)('omits null when omitNulls option is true', () => { const zodSchema = 'z.null()'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema, {}, { omitNulls: true }); (0, vitest_1.expect)(result).toBe(undefined); }); }); (0, vitest_1.describe)('string validations', () => { (0, vitest_1.it)('generates email for z.string().email()', () => { const zodSchema = 'z.string().email()'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result).toMatch(/^[\w.-]+@[\w.-]+\.\w+$/); }); (0, vitest_1.it)('generates UUID for z.string().uuid()', () => { const zodSchema = 'z.string().uuid()'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/); }); (0, vitest_1.it)('generates URL for z.string().url()', () => { const zodSchema = 'z.string().url()'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result).toMatch(/^https?:\/\/.+/); }); (0, vitest_1.it)('generates date for z.string().date()', () => { const zodSchema = 'z.string().date()'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result).toMatch(/^\d{4}-\d{2}-\d{2}$/); }); (0, vitest_1.it)('generates datetime for z.string().datetime()', () => { const zodSchema = 'z.string().datetime()'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/); }); (0, vitest_1.it)('generates string with min length for z.string().min()', () => { const zodSchema = 'z.string().min(10)'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result.length).toBeGreaterThanOrEqual(10); }); (0, vitest_1.it)('generates string with max length for z.string().max()', () => { const zodSchema = 'z.string().max(5)'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result.length).toBeLessThanOrEqual(5); }); }); (0, vitest_1.describe)('number validations', () => { (0, vitest_1.it)('generates number with min for z.number().min()', () => { const zodSchema = 'z.number().min(10)'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('number'); (0, vitest_1.expect)(result).toBeGreaterThanOrEqual(10); }); (0, vitest_1.it)('generates number with max for z.number().max()', () => { const zodSchema = 'z.number().max(100)'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('number'); (0, vitest_1.expect)(result).toBeLessThanOrEqual(100); }); (0, vitest_1.it)('generates integer for z.number().int()', () => { const zodSchema = 'z.number().int()'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('number'); (0, vitest_1.expect)(Number.isInteger(result)).toBe(true); }); (0, vitest_1.it)('generates number greater than for z.number().gt()', () => { const zodSchema = 'z.number().gt(5)'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('number'); (0, vitest_1.expect)(result).toBeGreaterThan(5); }); (0, vitest_1.it)('generates number less than for z.number().lt()', () => { const zodSchema = 'z.number().lt(10)'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('number'); (0, vitest_1.expect)(result).toBeLessThan(10); }); }); (0, vitest_1.describe)('enum types', () => { (0, vitest_1.it)('generates mock for z.enum()', () => { const zodSchema = 'z.enum(["active", "inactive", "pending"])'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(['active', 'inactive', 'pending']).toContain(result); }); (0, vitest_1.it)('generates mock for single value enum', () => { const zodSchema = 'z.enum(["single"])'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(result).toBe('single'); }); }); (0, vitest_1.describe)('array types', () => { (0, vitest_1.it)('generates empty array when items schema cannot be parsed', () => { const zodSchema = 'z.array(z.string())'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(Array.isArray(result)).toBe(true); }); (0, vitest_1.it)('generates array with overrides using items property', () => { const zodSchema = 'z.array(z.string())'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema, { items: ['a', 'b', 'c'] }); (0, vitest_1.expect)(Array.isArray(result)).toBe(true); (0, vitest_1.expect)(result).toEqual(['a', 'b', 'c']); }); (0, vitest_1.it)('respects maxItems constraint when specified', () => { const zodSchema = 'z.array(z.string()).max(2)'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(Array.isArray(result)).toBe(true); (0, vitest_1.expect)(result.length).toBeLessThanOrEqual(2); }); (0, vitest_1.it)('generates array with default length between min and max', () => { const zodSchema = 'z.array(z.number())'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(Array.isArray(result)).toBe(true); (0, vitest_1.expect)(result.length).toBeGreaterThanOrEqual(1); (0, vitest_1.expect)(result.length).toBeLessThanOrEqual(3); }); }); (0, vitest_1.describe)('object types', () => { (0, vitest_1.it)('generates mock for z.object()', () => { const zodSchema = 'z.object({ name: z.string(), age: z.number() })'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('object'); (0, vitest_1.expect)(result).toHaveProperty('name'); (0, vitest_1.expect)(result).toHaveProperty('age'); (0, vitest_1.expect)(typeof result.name).toBe('string'); (0, vitest_1.expect)(typeof result.age).toBe('number'); }); (0, vitest_1.it)('handles optional fields', () => { const zodSchema = 'z.object({ name: z.string(), age: z.number().optional() })'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('object'); (0, vitest_1.expect)(result).toHaveProperty('name'); }); (0, vitest_1.it)('always includes optionals when alwaysIncludeOptionals is true', () => { const zodSchema = 'z.object({ name: z.string(), age: z.number().optional() })'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema, {}, { alwaysIncludeOptionals: true }); (0, vitest_1.expect)(typeof result).toBe('object'); (0, vitest_1.expect)(result).toHaveProperty('name'); (0, vitest_1.expect)(result).toHaveProperty('age'); }); (0, vitest_1.it)('handles nested objects', () => { const zodSchema = 'z.object({ user: z.object({ name: z.string(), email: z.string() }) })'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('object'); (0, vitest_1.expect)(result).toHaveProperty('user'); (0, vitest_1.expect)(typeof result.user).toBe('object'); (0, vitest_1.expect)(result.user).toHaveProperty('name'); (0, vitest_1.expect)(result.user).toHaveProperty('email'); }); (0, vitest_1.it)('handles properties with special characters', () => { const zodSchema = 'z.object({ "user-name": z.string(), "my.email": z.string() })'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('object'); (0, vitest_1.expect)(result).toHaveProperty('user-name'); (0, vitest_1.expect)(result).toHaveProperty('my.email'); }); (0, vitest_1.it)('applies overrides to object properties', () => { const zodSchema = 'z.object({ name: z.string(), age: z.number() })'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema, { name: 'John', age: 30 }); (0, vitest_1.expect)(result.name).toBe('John'); (0, vitest_1.expect)(result.age).toBe(30); }); (0, vitest_1.it)('applies partial overrides', () => { const zodSchema = 'z.object({ name: z.string(), age: z.number() })'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema, { name: 'John' }); (0, vitest_1.expect)(result.name).toBe('John'); (0, vitest_1.expect)(result).toHaveProperty('age'); (0, vitest_1.expect)(typeof result.age).toBe('number'); }); }); (0, vitest_1.describe)('union types', () => { (0, vitest_1.it)('generates mock for z.union()', () => { const zodSchema = 'z.union([z.string(), z.number()])'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(['string', 'number']).toContain(typeof result); }); (0, vitest_1.it)('handles nullable unions', () => { const zodSchema = 'z.union([z.string(), z.null()])'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(['string', 'object']).toContain(typeof result); }); (0, vitest_1.it)('omits null in nullable unions when omitNulls is true', () => { const zodSchema = 'z.union([z.string(), z.null()])'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema, {}, { omitNulls: true }); if (result === null) { (0, vitest_1.expect)(result).toBe(undefined); } else { (0, vitest_1.expect)(typeof result).toBe('string'); } }); }); (0, vitest_1.describe)('complex nested schemas', () => { (0, vitest_1.it)('generates mock for complex object structure', () => { const zodSchema = `z.object({ id: z.string().uuid(), user: z.object({ name: z.string(), email: z.string().email(), age: z.number().int().min(0).max(120) }), tags: z.array(z.string()), status: z.enum(["active", "inactive"]), metadata: z.object({ createdAt: z.string().datetime(), updatedAt: z.string().datetime() }).optional() })`; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('object'); (0, vitest_1.expect)(result).toHaveProperty('id'); (0, vitest_1.expect)(result).toHaveProperty('user'); (0, vitest_1.expect)(result).toHaveProperty('tags'); (0, vitest_1.expect)(result).toHaveProperty('status'); const obj = result; (0, vitest_1.expect)(typeof obj.id).toBe('string'); (0, vitest_1.expect)(obj.id).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/); (0, vitest_1.expect)(Array.isArray(obj.tags)).toBe(true); (0, vitest_1.expect)(['active', 'inactive']).toContain(obj.status); }); (0, vitest_1.it)('generates array using overrides for simple types', () => { const zodSchema = `z.array(z.number())`; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema, { items: [1, 2, 3], }); (0, vitest_1.expect)(Array.isArray(result)).toBe(true); (0, vitest_1.expect)(result.length).toBe(3); (0, vitest_1.expect)(result).toEqual([1, 2, 3]); }); }); (0, vitest_1.describe)('options handling', () => { (0, vitest_1.it)('respects optionalsProbability option', () => { const zodSchema = 'z.object({ optional1: z.string().optional(), optional2: z.string().optional(), optional3: z.string().optional() })'; vitest_1.vi.spyOn(Math, 'random').mockReturnValue(0.9); const _result1 = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema, {}, { optionalsProbability: 0 }); vitest_1.vi.spyOn(Math, 'random').mockReturnValue(0.5); const _result2 = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema, {}, { optionalsProbability: 1 }); }); (0, vitest_1.it)('handles optionalsProbability as false', () => { const zodSchema = 'z.object({ optional: z.string().optional() })'; vitest_1.vi.spyOn(Math, 'random').mockReturnValue(0.5); const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema, {}, { optionalsProbability: false }); (0, vitest_1.expect)(typeof result).toBe('object'); }); }); (0, vitest_1.describe)('edge cases', () => { (0, vitest_1.it)('handles empty object schema', () => { const zodSchema = 'z.object({})'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('object'); (0, vitest_1.expect)(Object.keys(result).length).toBe(0); }); (0, vitest_1.it)('handles unknown schema types', () => { const zodSchema = 'z.unknown()'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(result).toBe(null); }); (0, vitest_1.it)('handles malformed schema strings gracefully', () => { const zodSchema = 'not a valid schema'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(result).toBe(null); }); (0, vitest_1.it)('handles deeply nested property paths', () => { const zodSchema = `z.object({ level1: z.object({ level2: z.object({ level3: z.object({ value: z.string() }) }) }) })`; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('object'); const obj = result; (0, vitest_1.expect)(obj).toHaveProperty('level1'); }); (0, vitest_1.it)('generates consistent mock values with overrides', () => { const zodSchema = 'z.object({ a: z.string(), b: z.string(), c: z.string() })'; const overrides = { b: 'fixed-value' }; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema, overrides); (0, vitest_1.expect)(result.b).toBe('fixed-value'); (0, vitest_1.expect)(typeof result.a).toBe('string'); (0, vitest_1.expect)(typeof result.c).toBe('string'); }); (0, vitest_1.it)('handles empty string schema', () => { const zodSchema = ''; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(result).toBe(null); }); (0, vitest_1.it)('handles string with only whitespace', () => { const zodSchema = ' '; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(result).toBe(null); }); (0, vitest_1.it)('handles numeric enum values', () => { const zodSchema = 'z.enum([1, 2, 3])'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)([1, 2, 3]).toContain(result); }); (0, vitest_1.it)('handles boolean enum values', () => { const zodSchema = 'z.enum([true, false])'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)([true, false]).toContain(result); }); (0, vitest_1.it)('handles mixed type enum values', () => { const zodSchema = 'z.enum(["active", 1, true])'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(['active', 1, true]).toContain(result); }); }); (0, vitest_1.describe)('string regex patterns', () => { (0, vitest_1.it)('generates phone number for phone regex pattern', () => { const zodSchema = 'z.string().regex(/^\\+?[1-9]\\d{1,14}$/)'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result).toMatch(/^\+1\d{10}$/); }); (0, vitest_1.it)('generates random string for custom regex pattern', () => { const zodSchema = 'z.string().regex(/^[A-Z]{5}$/)'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result.length).toBe(10); }); }); (0, vitest_1.describe)('string length constraints', () => { (0, vitest_1.it)('generates string respecting both min and max length', () => { const zodSchema = 'z.string().min(8).max(12)'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('string'); const len = result.length; (0, vitest_1.expect)(len).toBeGreaterThanOrEqual(8); (0, vitest_1.expect)(len).toBeLessThanOrEqual(12); }); (0, vitest_1.it)('generates string with exact length when min equals max', () => { const zodSchema = 'z.string().min(10).max(10)'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result.length).toBe(10); }); }); (0, vitest_1.describe)('number constraints', () => { (0, vitest_1.it)('handles number with both min and max', () => { const zodSchema = 'z.number().min(10).max(20)'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('number'); (0, vitest_1.expect)(result).toBeGreaterThanOrEqual(10); (0, vitest_1.expect)(result).toBeLessThanOrEqual(20); }); (0, vitest_1.it)('handles number with both gt and lt', () => { const zodSchema = 'z.number().gt(5).lt(10)'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('number'); (0, vitest_1.expect)(result).toBeGreaterThan(5); (0, vitest_1.expect)(result).toBeLessThan(10); }); (0, vitest_1.it)('handles integer with constraints', () => { const zodSchema = 'z.number().int().min(1).max(10)'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('number'); (0, vitest_1.expect)(Number.isInteger(result)).toBe(true); (0, vitest_1.expect)(result).toBeGreaterThanOrEqual(1); (0, vitest_1.expect)(result).toBeLessThanOrEqual(10); }); (0, vitest_1.it)('generates negative numbers when range is negative', () => { const zodSchema = 'z.number().min(-100).max(-50)'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(typeof result).toBe('number'); (0, vitest_1.expect)(result).toBeGreaterThanOrEqual(-100); (0, vitest_1.expect)(result).toBeLessThanOrEqual(-50); }); }); (0, vitest_1.describe)('union type variations', () => { (0, vitest_1.it)('handles union with multiple types', () => { const zodSchema = 'z.union([z.string(), z.number(), z.boolean()])'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(['string', 'number', 'boolean']).toContain(typeof result); }); (0, vitest_1.it)('handles union with complex types', () => { const zodSchema = 'z.union([z.string().email(), z.number().int()])'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); if (typeof result === 'string') { (0, vitest_1.expect)(result).toMatch(/^[\w.-]+@[\w.-]+\.\w+$/); } else { (0, vitest_1.expect)(Number.isInteger(result)).toBe(true); } }); (0, vitest_1.it)('handles union with empty array returns null', () => { const zodSchema = 'z.union([])'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(result).toBe(null); }); }); (0, vitest_1.describe)('nullable types', () => { (0, vitest_1.it)('handles nullable string', () => { const zodSchema = 'z.string().nullable()'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(['string', 'object']).toContain(typeof result); }); (0, vitest_1.it)('handles nullable number', () => { const zodSchema = 'z.number().nullable()'; const result = (0, zod_mock_generator_1.generateMockFromZodSchema)(zodSchema); (0, vitest_1.expect)(['number', 'object']).toContain(typeof result); }); }); }); }); //# sourceMappingURL=zod-mock-generator.test.js.map