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.

447 lines 18.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const vitest_1 = require("vitest"); const mock_runtime_1 = require("./mock-runtime"); (0, vitest_1.describe)('Custom Mock Runtime', () => { (0, vitest_1.describe)('generateMock', () => { (0, vitest_1.it)('generates mock from simple string schema', () => { const schema = { type: 'string' }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('string'); }); (0, vitest_1.it)('generates mock from number schema', () => { const schema = { type: 'number' }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('number'); }); (0, vitest_1.it)('generates mock from boolean schema', () => { const schema = { type: 'boolean' }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('boolean'); }); (0, vitest_1.it)('generates mock from object schema', () => { const schema = { type: 'object', properties: { name: { type: 'string' }, age: { type: 'number' }, }, required: ['name'], }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result).toHaveProperty('name'); (0, vitest_1.expect)(typeof result.name).toBe('string'); }); (0, vitest_1.it)('generates mock from array schema', () => { const schema = { type: 'array', items: { type: 'string' }, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(Array.isArray(result)).toBe(true); }); (0, vitest_1.it)('respects enum values', () => { const schema = { type: 'string', enum: ['active', 'inactive'], }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(['active', 'inactive']).toContain(result); }); (0, vitest_1.it)('uses default value when useDefault is true', () => { const schema = { type: 'string', default: 'default-value', }; const result = (0, mock_runtime_1.generateMock)(schema, { useDefault: true }); (0, vitest_1.expect)(result).toBe('default-value'); }); (0, vitest_1.it)('uses example value when useExamples is true', () => { const schema = { type: 'string', examples: ['example-value'], }; const result = (0, mock_runtime_1.generateMock)(schema, { useExamples: true }); (0, vitest_1.expect)(result).toBe('example-value'); }); (0, vitest_1.it)('respects minLength for strings', () => { const schema = { type: 'string', minLength: 10, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result.length).toBeGreaterThanOrEqual(10); }); (0, vitest_1.it)('respects maxLength for strings', () => { const schema = { type: 'string', maxLength: 5, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result.length).toBeLessThanOrEqual(5); }); (0, vitest_1.it)('respects minimum for numbers', () => { const schema = { type: 'number', minimum: 10, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result).toBeGreaterThanOrEqual(10); }); (0, vitest_1.it)('respects maximum for numbers', () => { const schema = { type: 'number', maximum: 100, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result).toBeLessThanOrEqual(100); }); (0, vitest_1.it)('handles requiredOnly option', () => { const schema = { type: 'object', properties: { required1: { type: 'string' }, optional1: { type: 'string' }, }, required: ['required1'], }; const result = (0, mock_runtime_1.generateMock)(schema, { requiredOnly: true }); (0, vitest_1.expect)(result).toHaveProperty('required1'); }); (0, vitest_1.it)('generates consistent types for schemas', () => { const schema = { type: 'object', properties: { id: { type: 'string', format: 'uuid' }, email: { type: 'string', format: 'email' }, count: { type: 'integer' }, }, required: ['id', 'email', 'count'], }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result.id).toBe('string'); (0, vitest_1.expect)(typeof result.email).toBe('string'); (0, vitest_1.expect)(typeof result.count).toBe('number'); }); (0, vitest_1.it)('handles nested objects', () => { const schema = { type: 'object', properties: { user: { type: 'object', properties: { name: { type: 'string' }, }, required: ['name'], }, }, required: ['user'], }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result).toHaveProperty('user'); (0, vitest_1.expect)(result.user).toHaveProperty('name'); }); (0, vitest_1.it)('handles arrays of objects', () => { const schema = { type: 'array', items: { type: 'object', properties: { name: { type: 'string' }, }, required: ['name'], }, minItems: 1, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(Array.isArray(result)).toBe(true); (0, vitest_1.expect)(result.length).toBeGreaterThanOrEqual(1); (0, vitest_1.expect)(result[0]).toHaveProperty('name'); }); (0, vitest_1.it)('handles null type', () => { const schema = { type: 'null' }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result).toBe(null); }); (0, vitest_1.it)('handles oneOf schemas', () => { const schema = { oneOf: [{ type: 'string' }, { type: 'number' }], }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(['string', 'number']).toContain(typeof result); }); (0, vitest_1.it)('handles anyOf schemas', () => { const schema = { anyOf: [{ type: 'string' }, { type: 'number' }], }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(['string', 'number']).toContain(typeof result); }); (0, vitest_1.it)('handles allOf schemas with merging', () => { const schema = { allOf: [ { type: 'object', properties: { name: { type: 'string' }, }, required: ['name'], }, { type: 'object', properties: { age: { type: 'number' }, }, }, ], }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result).toHaveProperty('name'); (0, vitest_1.expect)(typeof result.name).toBe('string'); }); (0, vitest_1.it)('respects minItems for arrays', () => { const schema = { type: 'array', items: { type: 'string' }, minItems: 5, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(Array.isArray(result)).toBe(true); (0, vitest_1.expect)(result.length).toBeGreaterThanOrEqual(5); }); (0, vitest_1.it)('respects maxItems for arrays', () => { const schema = { type: 'array', items: { type: 'string' }, maxItems: 2, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(Array.isArray(result)).toBe(true); (0, vitest_1.expect)(result.length).toBeLessThanOrEqual(2); }); (0, vitest_1.it)('handles integer type specifically', () => { const schema = { type: 'integer', }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('number'); (0, vitest_1.expect)(Number.isInteger(result)).toBe(true); }); (0, vitest_1.it)('respects minimum for numbers', () => { const schema = { type: 'number', minimum: 100, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result).toBeGreaterThanOrEqual(100); }); (0, vitest_1.it)('respects maximum for numbers', () => { const schema = { type: 'number', maximum: 10, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result).toBeLessThanOrEqual(10); }); (0, vitest_1.it)('respects minLength for strings', () => { const schema = { type: 'string', minLength: 20, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result.length).toBeGreaterThanOrEqual(20); }); (0, vitest_1.it)('respects maxLength for strings', () => { const schema = { type: 'string', maxLength: 5, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result.length).toBeLessThanOrEqual(5); }); (0, vitest_1.it)('handles pattern for strings with placeholder', () => { const schema = { type: 'string', pattern: '^[0-9]{3}$', }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result).toMatch(/^x+$/); }); (0, vitest_1.it)('handles uuid format with placeholder', () => { const schema = { type: 'string', format: 'uuid', }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result).toBe('00000000-0000-0000-0000-000000000000'); }); (0, vitest_1.it)('handles email format', () => { const schema = { type: 'string', format: 'email', }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result).toMatch(/@/); }); (0, vitest_1.it)('handles uri format', () => { const schema = { type: 'string', format: 'uri', }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(result).toMatch(/^https?:\/\//); }); (0, vitest_1.it)('handles date-time format', () => { const schema = { type: 'string', format: 'date-time', }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(!isNaN(Date.parse(result))).toBe(true); }); (0, vitest_1.it)('handles date format', () => { const schema = { type: 'string', format: 'date', }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(/^\d{4}-\d{2}-\d{2}$/.test(result)).toBe(true); }); (0, vitest_1.it)('handles time format', () => { const schema = { type: 'string', format: 'time', }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('string'); (0, vitest_1.expect)(/^\d{2}:\d{2}:\d{2}/.test(result)).toBe(true); }); (0, vitest_1.it)('applies overrides to nested properties', () => { }); (0, vitest_1.it)('handles schemas with const value', () => { const schema = { type: 'string', const: 'fixed-value', }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result).toBe('fixed-value'); }); (0, vitest_1.it)('handles schemas with default value', () => { const schema = { type: 'string', default: 'default-value', }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('string'); }); (0, vitest_1.it)('handles schemas with examples', () => { const schema = { type: 'string', examples: ['example1', 'example2'], }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('string'); }); (0, vitest_1.it)('handles deeply nested structures', () => { const schema = { type: 'object', properties: { level1: { type: 'object', properties: { level2: { type: 'object', properties: { level3: { type: 'string', }, }, required: ['level3'], }, }, required: ['level2'], }, }, required: ['level1'], }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result.level1.level2.level3).toBeDefined(); (0, vitest_1.expect)(typeof result.level1.level2.level3).toBe('string'); }); (0, vitest_1.it)('handles array within object within array', () => { const schema = { type: 'array', items: { type: 'object', properties: { tags: { type: 'array', items: { type: 'string' }, }, }, required: ['tags'], }, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(Array.isArray(result)).toBe(true); (0, vitest_1.expect)(result.length).toBeGreaterThan(0); (0, vitest_1.expect)(Array.isArray(result[0].tags)).toBe(true); }); (0, vitest_1.it)('returns null for unknown schema type', () => { const schema = { type: 'unknown-type', }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result).toBeNull(); }); (0, vitest_1.it)('handles exclusiveMinimum', () => { const schema = { type: 'number', exclusiveMinimum: 10, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result).toBeGreaterThan(10); }); (0, vitest_1.it)('handles exclusiveMaximum', () => { const schema = { type: 'number', exclusiveMaximum: 10, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result).toBeLessThan(10); }); (0, vitest_1.it)('handles multipleOf constraint', () => { const schema = { type: 'number', multipleOf: 5, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(result % 5).toBe(0); }); (0, vitest_1.it)('handles empty object schema', () => { const schema = { type: 'object', properties: {}, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(typeof result).toBe('object'); (0, vitest_1.expect)(result).toEqual({}); }); (0, vitest_1.it)('handles empty array items', () => { const schema = { type: 'array', items: {}, }; const result = (0, mock_runtime_1.generateMock)(schema); (0, vitest_1.expect)(Array.isArray(result)).toBe(true); }); }); }); //# sourceMappingURL=mock-runtime.test.js.map