Files
datacat/back/src/modules/uploads/uploads.controller.spec.ts
z3n 1a8bd0b7b4 test(uploads): extraire extractMetadata() + tests unitaires
Refactoring minimal : le bloc de parsing de métadonnées (titre, version,
description) est extrait en méthode privée extractMetadata() dans
UploadsController. Le comportement de validate() est identique.

12 tests unitaires couvrent tous les cas : version standard (1.2.3, 1.0, 2,
0.0.0), extraction nom/description, et cas limites (version non-numérique,
absente, vide, info absent).

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-06-24 13:18:59 +00:00

94 lines
3.4 KiB
TypeScript

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();
});
});
});