veza/apps/web/e2e/fixtures/file-helpers.ts
2025-12-22 22:00:50 +01:00

112 lines
3.3 KiB
TypeScript

import { writeFileSync } from 'fs';
/**
* Crée un fichier MP3 simulé pour les tests
* Utilise un buffer MP3 valide (frame MP3 avec silence) pour que le backend
* puisse extraire les métadonnées (durée, etc.) sans bloquer
*/
export function createMockMP3File(filePath: string): void {
// Petit buffer représentant une frame MP3 valide (silence)
// Ce buffer contient des headers MP3 valides et des métadonnées ID3
// qui permettront au backend d'extraire les informations nécessaires
const validMp3Buffer = Buffer.from(
'//OEAAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAAEAAABIADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD//OEAAAAAAAAAAAAAAAAAAAAAAAATGF2YzU4LjU0AAAAAAAAAAAAAAAAJAAAAAAAAAAAASAAAAAAAASAAAAAAA//OEAAAAAAAAAAAAAAAAAAAAAAAALAAA',
'base64',
);
writeFileSync(filePath, validMp3Buffer);
}
/**
* Crée un buffer MP3 valide pour les tests d'upload
* Utilisé avec setInputFiles() dans Playwright
*/
export function createMockMP3Buffer(): Buffer {
// Buffer MP3 valide minimal (Header ID3 + Frame Silence)
return Buffer.from(
'4944330300000000000a544954320000000500000054657374fffb90440000000000000000000000000000000000000000',
'hex',
);
}
/**
* Crée un fichier MP3 plus volumineux pour tester le chunked upload
* @param filePath - Chemin où créer le fichier
* @param sizeInMB - Taille du fichier en MB (défaut: 15 MB)
*/
export function createLargeMockMP3File(filePath: string, sizeInMB: number = 15): void {
const sizeInBytes = sizeInMB * 1024 * 1024;
const baseBuffer = createMockMP3Buffer();
// Répéter le buffer pour atteindre la taille désirée
const chunks = Math.ceil(sizeInBytes / baseBuffer.length);
const buffers: Buffer[] = [];
for (let i = 0; i < chunks; i++) {
buffers.push(baseBuffer);
}
const largeBuffer = Buffer.concat(buffers).slice(0, sizeInBytes);
writeFileSync(filePath, largeBuffer);
}
/**
* Crée un buffer MP3 large pour les tests d'upload chunké (in-memory)
* Utilisé avec setInputFiles() dans Playwright pour les gros fichiers
*
* @param sizeInMB - Taille du fichier en MB (défaut: 15 MB)
* @returns Buffer - Buffer MP3 valide de la taille spécifiée
*
* @example
* const largeBuffer = createLargeMockMP3Buffer(20); // 20 MB
* await fileInput.setInputFiles({
* name: 'large-track.mp3',
* mimeType: 'audio/mpeg',
* buffer: largeBuffer,
* });
*/
export function createLargeMockMP3Buffer(sizeInMB: number = 15): Buffer {
const sizeInBytes = sizeInMB * 1024 * 1024;
const baseBuffer = createMockMP3Buffer();
// Répéter le buffer pour atteindre la taille désirée
const chunks = Math.ceil(sizeInBytes / baseBuffer.length);
const buffers: Buffer[] = [];
for (let i = 0; i < chunks; i++) {
buffers.push(baseBuffer);
}
const largeBuffer = Buffer.concat(buffers).slice(0, sizeInBytes);
return largeBuffer;
}
/**
* Formats de fichiers audio supportés pour les tests
*/
export const SUPPORTED_AUDIO_FORMATS = {
mp3: {
mimeType: 'audio/mpeg',
extension: '.mp3',
},
flac: {
mimeType: 'audio/flac',
extension: '.flac',
},
wav: {
mimeType: 'audio/wav',
extension: '.wav',
},
ogg: {
mimeType: 'audio/ogg',
extension: '.ogg',
},
m4a: {
mimeType: 'audio/mp4',
extension: '.m4a',
},
aac: {
mimeType: 'audio/aac',
extension: '.aac',
},
} as const;