Skip to content

Latest commit

 

History

History
75 lines (57 loc) · 16.5 KB

File metadata and controls

75 lines (57 loc) · 16.5 KB

🧪 Testing

📋 Commands

# Run all tests
npm test

# Watch mode
npm run test:watch

# With coverage report
npm run test:coverage

# Unit tests only
npm run test:unit

# Integration tests (matches src/**/*.integration.{test,spec}.{ts,tsx})
npm run test:integration

# E2E tests (requires build)
npm run test:e2e

Coverage reports are generated in coverage/:

  • coverage/index.html — browsable HTML
  • coverage/lcov.info — LCOV for IDE integration

✅ Test Suite

The suite is run by Vitest 4 (123 test files, 1603 tests, all passing). Coverage uses the v8 provider.

Area Files (tests) What's Covered
Shared errors.test.ts, constants.test.ts, codec-containers.test.ts, validation.test.ts, types.test.ts, logger.test.ts, ipc-channels.test.ts, estimate.test.ts Error normalization, all shared constants, codec/container mapping, validation helpers, type contracts, logger, IPC channel registry, estimation
Main cli.test.ts, index.test.ts, capabilities.test.ts, job-queue.test.ts, process-utils.test.ts, image-file-info.test.ts, image-info.test.ts, image-preview.test.ts, video-preview.test.ts, cli-logo.test.ts, media-binaries.test.ts, power-actions.test.ts, preview-cache.test.ts CLI entry, window lifecycle, encoder probing, queue semantics, process utilities, image/video preview generation, media binary resolution, power actions, preview cache
Main CLI cli/cli-cli.test.ts, cli/cli-options.test.ts, cli/cli-convert.test.ts, cli/cli-compress.test.ts, cli/cli-util.test.ts, cli/cli-integration.integration.test.ts CLI subcommand parsing, option handling, conversion/compress subcommands, utility functions, integration tests
Main IPC ipc/player.test.ts, ipc/image.test.ts, ipc/dialogs.test.ts, ipc/conversion.test.ts, ipc/window.test.ts, ipc/queue.test.ts, ipc/timeline.test.ts, ipc/send.test.ts, ipc/handlers.test.ts, ipc/system.test.ts, ipc/capabilities.test.ts Per-channel IPC handlers, event broadcasting, error wrapping, system handlers
Main transcoders transcoders/ffmpeg-core.test.ts, transcoders/hwaccel.test.ts, transcoders/ffmpeg-utils.test.ts, transcoders/fftool-core.test.ts, transcoders/bmf-core.test.ts, transcoders/ffprobe-mapper.test.ts, transcoders/factory.test.ts, transcoders/interface.test.ts, transcoders/integration-audio.test.ts All three cores, hardware-acceleration flag building, ffprobe mapping, factory dispatch, transcoder interface contract
Main player / queue / timeline player/frame-decoder.test.ts, queue/queue-transfer.test.ts, timeline/timeline-media.test.ts Rawvideo frame decoding, audio pipe, buffering, queue transfer, waveform extraction, thumbnail montage generation
Preload preload/index.test.ts Full electronAPI bridge surface, every IPC method
Renderer components VideoTimeline.test.tsx, MediaPlayer.test.tsx, CodecSelect.test.tsx, StreamDetails.test.tsx, ErrorBanner.test.tsx, AppDrawer.test.tsx, FileSummary.test.tsx, QueueJobCard.test.tsx, FileDropZone.test.tsx, BatchControls.test.tsx, ErrorSnackbar.test.tsx, ExifSection.test.tsx, FilePathField.test.tsx, TimeField.test.tsx, TitleBar.test.tsx, ConfirmDialog.test.tsx, ErrorBoundary.test.tsx, GroupedSelect.test.tsx, ProgressBar.test.tsx, ToastContainer.test.tsx, LanguageMenu.test.tsx, PageContainer.test.tsx, EllipsisTooltip.test.tsx, Footer.test.tsx, CloseConfirmDialog.test.tsx, BatchEncodingPanel.test.tsx, FormField.test.tsx, NavJobPopover.test.tsx, MediaPreview.test.tsx, ShortcutsHelpDialog.test.tsx, QueueDropArea.test.tsx, QueueAddReviewDialog.test.tsx, QueueJobOptionsDialog.test.tsx Rendering, interactions, error states, accessibility for all shared UI components
Renderer hooks useConversion.test.tsx, useErrorHandler.test.ts, useFormErrors.test.ts, useMediaTask.test.ts, useLanguageDirection.test.tsx, useHotkeys.test.tsx Conversion orchestration, error handling, form validation, media task lifecycle, RTL direction, keyboard shortcuts
Renderer pages VideoCut.test.tsx, Convert.test.tsx, ImageCompress.test.tsx, AudioExtract.test.tsx, Settings.test.tsx, BatchQueue.test.tsx, Logs.test.tsx, MediaInfo.test.tsx, Dashboard.test.tsx, About.test.tsx Full page flows: form state, validation, IPC invocation, settings persistence, about/update
Renderer stores conversionStore.test.ts, audioExtractStore.test.ts, settingsStore.test.ts, errorStore.test.ts, queueStore.test.ts, toastStore.test.ts, logStore.test.ts, videoCutStore.test.ts, taskStore.test.ts, batchConfig.test.ts, dismissedAlertsStore.test.ts Zustand store state transitions and persistence
Renderer utils formatters.test.ts, preview-cache.test.ts, lunar-calendar.test.ts, easter-egg-dates.test.ts, batch-options.test.ts, queue-reorder.test.ts Formatting helpers, preview cache, easter egg dates, batch options, queue reorder logic
Renderer app / misc App.test.tsx, colors.test.ts, sessionCleanup.test.ts, constants/shortcuts.test.ts App shell routing, color palette, session cleanup, keyboard shortcuts
Integration error-flow.test.ts Full pipeline: Error → formatError → store → display → clear

🛠️ Test Setup

The test environment (src/test-setup.ts) provides:

  • Mocked useTranslation from react-i18next with English key mapping and interpolation
  • Mocked electronAPI on globalThis covering all IPC methods
  • Registers @testing-library/jest-dom/vitest matchers

🌐 E2E Tests

Playwright-based end-to-end tests live in e2e/ (node environment, 60s timeouts) and are gated behind the E2E env var or CI:

File What's Covered
e2e/cli.spec.ts CLI mode: --help/-h, subcommands (convert, info, capabilities, compress, extract-audio, batch), legacy flat syntax, global flags (--quiet, --no-color, --theme)
e2e/specs/shell.spec.ts App shell: window title, electronAPI presence, all nav routes, drawer navigation, window controls, language menu
e2e/specs/convert.spec.ts Convert page: file selection, output auto-suggestion, codec/bitrate/scale/pixel/transcoder options, lossless copy, conversion with progress, pause/resume, cancel
e2e/specs/batch.spec.ts Batch queue: empty state, add files via review dialog, queue events, live progress, cancel all, status filter, remove job, drag reorder, window close confirmation
e2e/specs/audio-extract.spec.ts Audio extraction: disabled button, video selection with audio streams, codec/bitrate changes, extraction with success toast
e2e/specs/image-compress.spec.ts Image compression: dropzone, image selection with preview, format/quality/scale changes, compression with success toast
e2e/specs/media-info.spec.ts Media info: video analysis (streams, codec details), image analysis (EXIF data)
e2e/specs/settings.spec.ts Settings: theme cards, theme switching, always-on-top, launch-at-login, hwaccel mode persistence
e2e/specs/logs.spec.ts Logs: emit entries, level filtering, clear all, download with toast
e2e/specs/video-cut.spec.ts Video cut: disabled button, timeline + waveform + thumbnails, duration/end-time toggle, playhead scrubbing, cut with progress, cancel, clear form
e2e/specs/real-convert.spec.ts Tier B (real): actual FFmpeg conversion without mocks (gated behind E2E_REAL=1)