mediaDrop/tests/media-types.test.ts
Nicolas fe8bd26bb7 Initial commit: mediaDrop — serveur de dépôt de fichiers médias
Serveur TypeScript (Fastify 5) permettant de déposer des fichiers médias
dans des dossiers nommés, via une page web de glisser-déposer.

- Authentification OpenID Connect gérée côté serveur (Authorization Code +
  PKCE, client confidentiel, openid-client) ; session via cookie chiffré
  (@fastify/secure-session).
- Configuration dans un fichier JSON (schéma fourni) ; l'environnement ne
  porte que le pointeur MEDIADROP_CONFIG.
- Cibles de dépôt nommées : liste { name, label, dir }, sélection par
  ?target=, première cible par défaut.
- Upload multipart en streaming : nom de fichier dérivé côté serveur (pas
  de path traversal), liste blanche de types MIME, plafond de taille.
- TypeScript strict, ESLint + Prettier sans warning, 46 tests Vitest.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-09 23:06:53 +02:00

30 lines
1.1 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { DEFAULT_ALLOWED_MIME, extensionForMime, isAllowedMedia } from '../src/lib/media-types.js';
describe('isAllowedMedia', () => {
it('accepte un type présent dans la liste blanche', () => {
expect(isAllowedMedia('image/png', DEFAULT_ALLOWED_MIME)).toBe(true);
expect(isAllowedMedia('video/mp4', DEFAULT_ALLOWED_MIME)).toBe(true);
});
it('refuse un type absent de la liste blanche', () => {
expect(isAllowedMedia('application/zip', DEFAULT_ALLOWED_MIME)).toBe(false);
expect(isAllowedMedia('image/png', ['image/jpeg'])).toBe(false);
});
it('accepte tout avec la politique "all"', () => {
expect(isAllowedMedia('application/x-msdownload', 'all')).toBe(true);
});
});
describe('extensionForMime', () => {
it('renvoie une extension sûre pour un type connu', () => {
expect(extensionForMime('image/jpeg')).toBe('.jpg');
expect(extensionForMime('video/quicktime')).toBe('.mov');
});
it('renvoie null pour un type inconnu', () => {
expect(extensionForMime('application/x-unknown')).toBeNull();
});
});