import { describe, it, expect } from 'vitest'; import { UploadsController } from './uploads.controller'; /** Accès à la méthode privée sans instancier le contrôleur complet */ function extract(yamlContent: string) { return (UploadsController.prototype as any).extractMetadata.call({}, yamlContent); } describe('UploadsController.extractMetadata()', () => { describe('version OpenAPI standard', () => { it('"1.2.3" → major=1, minor=2, patch=3', () => { const result = extract('info:\n title: Test\n version: "1.2.3"'); expect(result.versionMajor).toBe(1); expect(result.versionMinor).toBe(2); expect(result.versionPatch).toBe(3); }); it('"1.0" → major=1, minor=0, patch=null', () => { const result = extract('info:\n title: Test\n version: "1.0"'); expect(result.versionMajor).toBe(1); expect(result.versionMinor).toBe(0); expect(result.versionPatch).toBeNull(); }); it('"2" → major=2, minor=null, patch=null', () => { const result = extract('info:\n title: Test\n version: "2"'); expect(result.versionMajor).toBe(2); expect(result.versionMinor).toBeNull(); expect(result.versionPatch).toBeNull(); }); it('"0.0.0" → major=0, minor=0, patch=0', () => { const result = extract('info:\n title: Test\n version: "0.0.0"'); expect(result.versionMajor).toBe(0); expect(result.versionMinor).toBe(0); expect(result.versionPatch).toBe(0); }); }); describe('extraction du nom et description', () => { it('title présent → name extrait', () => { const result = extract('info:\n title: Mon API\n version: "1.0.0"'); expect(result.name).toBe('Mon API'); }); it('title absent → name=null', () => { const result = extract('info:\n version: "1.0.0"'); expect(result.name).toBeNull(); }); it('description présente → description extraite', () => { const result = extract('info:\n title: Test\n version: "1.0.0"\n description: Une description'); expect(result.description).toBe('Une description'); }); it('description absente → description=null', () => { const result = extract('info:\n title: Test\n version: "1.0.0"'); expect(result.description).toBeNull(); }); }); describe('cas limite de version', () => { it('version non numérique ("alpha") → major=null, minor=null, patch=null', () => { const result = extract('info:\n title: Test\n version: alpha'); expect(result.versionMajor).toBeNull(); expect(result.versionMinor).toBeNull(); expect(result.versionPatch).toBeNull(); }); it('version absente → tout null', () => { const result = extract('info:\n title: Test'); expect(result.versionMajor).toBeNull(); expect(result.versionMinor).toBeNull(); expect(result.versionPatch).toBeNull(); }); it('version vide string "" → tout null', () => { const result = extract('info:\n title: Test\n version: ""'); expect(result.versionMajor).toBeNull(); expect(result.versionMinor).toBeNull(); expect(result.versionPatch).toBeNull(); }); it('info absent → tout null', () => { const result = extract('asyncapi: "3.0.0"'); expect(result.name).toBeNull(); expect(result.description).toBeNull(); expect(result.versionMajor).toBeNull(); expect(result.versionMinor).toBeNull(); expect(result.versionPatch).toBeNull(); }); }); });