UNPKG

@autodev/backend-generator

Version:

Backend project generator with support for parsing and generating project configurations

109 lines (96 loc) 3.5 kB
import { describe, it, expect } from 'vitest'; import { ProjectParser, ProjectParseError } from '../parser/project-parser.js'; import { Project } from '../types/project-config.js'; describe('ProjectParser', () => { const validProjectData: Project = { projectConfig: { name: 'test-project', description: 'A test project', type: 'microservice', language: 'java', framework: 'spring3', }, features: ['authentication-authorization', 'database-integration'], structure: { directories: ['src/main/java', 'src/test/java'], files: ['pom.xml', 'README.md'], }, dependencies: { 'spring-boot-starter': '3.0.0', 'spring-boot-starter-web': '3.0.0', }, configurations: { 'application.properties': [ 'server.port=8080', 'spring.application.name=test-project', ], }, }; describe('parseFromJson', () => { it('should parse valid JSON string', () => { const jsonString = JSON.stringify(validProjectData); const result = ProjectParser.parseFromJson(jsonString); expect(result).toEqual(validProjectData); }); it('should throw error for invalid JSON', () => { const invalidJson = '{ invalid json }'; expect(() => ProjectParser.parseFromJson(invalidJson)).toThrow(ProjectParseError); }); }); describe('parseFromObject', () => { it('should parse valid project object', () => { const result = ProjectParser.parseFromObject(validProjectData); expect(result).toEqual(validProjectData); }); it('should throw error for missing required fields', () => { const invalidData = { ...validProjectData, projectConfig: { ...validProjectData.projectConfig, name: undefined as any } }; delete invalidData.projectConfig.name; expect(() => ProjectParser.parseFromObject(invalidData)).toThrow(ProjectParseError); }); it('should throw error for invalid project type', () => { const invalidData = { ...validProjectData, projectConfig: { ...validProjectData.projectConfig, type: 'invalid-type' as any, }, }; expect(() => ProjectParser.parseFromObject(invalidData)).toThrow(ProjectParseError); }); it('should throw error for invalid language', () => { const invalidData = { ...validProjectData, projectConfig: { ...validProjectData.projectConfig, language: 'invalid-language' as any, }, }; expect(() => ProjectParser.parseFromObject(invalidData)).toThrow(ProjectParseError); }); }); describe('validate', () => { it('should return success for valid data', () => { const result = ProjectParser.validate(validProjectData); expect(result.success).toBe(true); expect(result.data).toEqual(validProjectData); expect(result.error).toBeUndefined(); }); it('should return error for invalid data', () => { const invalidData = { ...validProjectData, projectConfig: undefined as any }; delete invalidData.projectConfig; const result = ProjectParser.validate(invalidData); expect(result.success).toBe(false); expect(result.error).toBeDefined(); expect(result.data).toBeUndefined(); }); }); });