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
JavaScript
"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