All files / src/services testFilesApi.ts

95.52% Statements 64/67
76.47% Branches 13/17
100% Functions 3/3
95.52% Lines 64/67

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102                            2x 2x     2x 2x 2x 2x 2x 2x 2x   2x   2x 10x 10x 10x 4x 4x 4x   4x 4x 4x 4x 4x 4x 4x 10x 5x 5x 10x   2x 2x       2x         3x 3x 3x 3x 1x 1x   1x 1x 3x 2x 2x 2x 3x         1x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x   3x   12x 6x 6x     12x 12x   12x 3x 3x  
/**
 * API pour gérer les fichiers de test
 */
 
export interface TestFileInfo {
  name: string
  size: number
  type: string
  lastModified: number
}
 
/**
 * Récupère la liste des fichiers disponibles dans le dossier test-files
 */
export async function getTestFilesList(): Promise<TestFileInfo[]> {
  try {
    // En mode développement, on peut utiliser une API pour lister les fichiers
    // Pour l'instant, on utilise une approche simple avec les fichiers connus
    const knownFiles = [
      'IMG_20250902_162159.jpg',
      'IMG_20250902_162210.jpg', 
      'sample.md',
      'sample.pdf',
      'sample.txt'
    ]
    
    const files: TestFileInfo[] = []
    
    for (const fileName of knownFiles) {
      try {
        const response = await fetch(`/test-files/${fileName}`, { method: 'HEAD' })
        if (response.ok) {
          const contentLength = response.headers.get('content-length')
          const contentType = response.headers.get('content-type')
          const lastModified = response.headers.get('last-modified')
          
          files.push({
            name: fileName,
            size: contentLength ? parseInt(contentLength, 10) : 0,
            type: contentType || 'application/octet-stream',
            lastModified: lastModified ? new Date(lastModified).getTime() : Date.now()
          })
        }
      } catch (error) {
        console.warn(`Impossible de vérifier le fichier ${fileName}:`, error)
      }
    }
    
    return files
  } catch (error) {
    console.error('Erreur lors de la récupération de la liste des fichiers de test:', error)
    return []
  }
}
 
/**
 * Charge un fichier de test par son nom
 */
export async function loadTestFile(fileName: string): Promise<File | null> {
  try {
    const response = await fetch(`/test-files/${fileName}`)
    if (!response.ok) {
      throw new Error(`Fichier non trouvé: ${fileName}`)
    }
    
    const blob = await response.blob()
    return new File([blob], fileName, { type: blob.type })
  } catch (error) {
    console.error(`Erreur lors du chargement du fichier ${fileName}:`, error)
    return null
  }
}
 
/**
 * Filtre les fichiers par type MIME supporté
 */
export function filterSupportedFiles(files: TestFileInfo[]): TestFileInfo[] {
  const supportedTypes = [
    'application/pdf',
    'image/jpeg',
    'image/jpg', 
    'image/png',
    'image/tiff',
    'text/plain',
    'text/markdown',
    'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
  ]
  
  return files.filter(file => {
    // Vérifier le type MIME
    if (supportedTypes.includes(file.type)) {
      return true
    }
    
    // Vérifier l'extension si le type MIME n'est pas fiable
    const extension = file.name.split('.').pop()?.toLowerCase()
    const supportedExtensions = ['pdf', 'jpg', 'jpeg', 'png', 'tiff', 'txt', 'md', 'docx']
    
    return extension && supportedExtensions.includes(extension)
  })
}