Files
parenthese/frontend/src/utils/mediaUpload.test.js
T
IliesAllaliandClaude Opus 5.5 10f1fc5d14 Typo : plus de mot ni de signe seul en fin de ligne
- text-wrap-style pretty sur les paragraphes, listes, légendes et chapôs, balance sur les titres
  (landing, guides statiques, base pz.css de l'app). Longhand pour ne pas réactiver le retour
  à la ligne là où white-space: nowrap est posé. Les noms de l'arbre sont sur le canvas, non touchés.
- Espaces insécables du français dans le texte visible : fine insécable avant ? ! ;,
  insécable avant : et dans les guillemets, entre un nombre et son unité (Mo, Go, €, dpi).
  Landing (i18n.js, bloc fr hors meta) et pages guides FR (corps de page, hors script).
- App : frenchTypography() appliquée par t() en français, avant le remplacement des variables ;
  le dictionnaire anglais reste indexé sur le français tel qu'écrit. Tests mis à jour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 17:06:44 +02:00

54 lines
2.6 KiB
JavaScript

import { describe, expect, it } from 'vitest'
import {
getAcceptForMediaType,
getUploadMimeType,
inferMediaTypeFromMimeType,
resolveUploadMediaType,
validateMediaFile,
} from './mediaUpload'
describe('mediaUpload utils', () => {
it('infers media type from mime type', () => {
expect(inferMediaTypeFromMimeType('image/png')).toBe('photo')
expect(inferMediaTypeFromMimeType('video/mp4')).toBe('video')
expect(inferMediaTypeFromMimeType('audio/mpeg')).toBe('audio')
expect(inferMediaTypeFromMimeType('application/pdf')).toBe('document')
expect(inferMediaTypeFromMimeType('application/geo+json')).toBe('geojson')
expect(inferMediaTypeFromMimeType('application/gpx+xml')).toBe('gpx')
})
it('resolves explicit requested type first', () => {
expect(resolveUploadMediaType({ type: 'image/png' }, 'document')).toBe('document')
expect(resolveUploadMediaType({ type: 'image/png' }, 'auto')).toBe('photo')
})
it('builds fallback mime type when missing from file', () => {
expect(getUploadMimeType({ type: '' }, 'photo')).toBe('image/jpeg')
expect(getUploadMimeType({ type: '' }, 'video')).toBe('video/mp4')
expect(getUploadMimeType({ type: '' }, 'audio')).toBe('audio/mpeg')
expect(getUploadMimeType({ type: '' }, 'document')).toBe('application/octet-stream')
expect(getUploadMimeType({ type: '' }, 'geojson')).toBe('application/geo+json')
expect(getUploadMimeType({ type: '' }, 'gpx')).toBe('application/gpx+xml')
})
it('validates media size constraints', () => {
expect(validateMediaFile(null, 'photo')).toBe('Sélectionnez un fichier.')
expect(validateMediaFile({ size: 0 }, 'photo')).toBe('Fichier invalide.')
expect(validateMediaFile({ size: 25 * 1024 * 1024 }, 'document')).toBe('Fichier trop volumineux (max 20\u00A0Mo).')
expect(validateMediaFile({ size: 6 * 1024 * 1024 }, 'photo')).toBe('Image trop volumineuse (max 5\u00A0Mo).')
expect(validateMediaFile({ size: 4 * 1024 * 1024 }, 'photo')).toBe('')
expect(validateMediaFile(null, 'citation', { citationText: '' })).toBe('Saisissez le texte de la citation.')
expect(validateMediaFile(null, 'citation', { citationText: 'Toujours avancer' })).toBe('')
})
it('returns accept filter by media type', () => {
expect(getAcceptForMediaType('photo')).toBe('image/*')
expect(getAcceptForMediaType('video')).toBe('video/*')
expect(getAcceptForMediaType('audio')).toBe('audio/*')
expect(getAcceptForMediaType('document')).toContain('.pdf')
expect(getAcceptForMediaType('citation')).toBe('')
expect(getAcceptForMediaType('geojson')).toContain('.geojson')
expect(getAcceptForMediaType('gpx')).toContain('.gpx')
})
})