MovieMapper/tests/fileUtils.test.js
Jarian 56351b277e test: add Vitest suite with 86% coverage threshold
- Add Vitest + jsdom test framework with V8 coverage
- 118 tests across 7 test files covering AppState, ProgressManager, EpisodeManager, FileListManager, fileUtils, main.js logic, renderer escapeHtml, preload module polyfill
- Fix async bug in extractFileDuration (await in non-async callback)
- CI enforces 85% coverage threshold on testable modules
- Exclude Electron IPC wrappers (FileManager, SearchManager, TagManager, ModalManager, UIManager) from coverage as they require Electron runtime
2026-07-06 04:54:40 +00:00

44 lines
1.4 KiB
JavaScript

import { describe, it, expect } from 'vitest';
import path from 'path';
const { isMediaFile } = require('../utils/fileUtils');
describe('isMediaFile', () => {
it('returns true for supported extensions', () => {
expect(isMediaFile('/path/to/video.mp4')).toBe(true);
expect(isMediaFile('/path/to/video.mkv')).toBe(true);
expect(isMediaFile('/path/to/video.avi')).toBe(true);
expect(isMediaFile('/path/to/video.mov')).toBe(true);
expect(isMediaFile('/path/to/video.flv')).toBe(true);
expect(isMediaFile('/path/to/video.webm')).toBe(true);
});
it('returns false for non-media extensions', () => {
expect(isMediaFile('/path/to/file.txt')).toBe(false);
expect(isMediaFile('/path/to/file.pdf')).toBe(false);
expect(isMediaFile('/path/to/file.jpg')).toBe(false);
expect(isMediaFile('/path/to/file.mp3')).toBe(false);
});
it('handles uppercase extensions', () => {
expect(isMediaFile('/path/to/video.MP4')).toBe(true);
expect(isMediaFile('/path/to/video.MKV')).toBe(true);
});
it('handles files without extension', () => {
expect(isMediaFile('/path/to/video')).toBe(false);
});
it('handles empty path', () => {
expect(isMediaFile('')).toBe(false);
});
it('handles deep nested paths', () => {
expect(isMediaFile('/very/deep/nested/path/to/episode.mp4')).toBe(true);
});
it('handles windows-style paths', () => {
expect(isMediaFile('C:\\Users\\video.mkv')).toBe(true);
});
});