112 lines
3.3 KiB
TypeScript
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;
|