fix KV API to unified format, and test

This commit is contained in:
Pierre
2026-01-24 18:15:21 +01:00
parent 24b1c2fcea
commit 1c51d09719
13 changed files with 4064 additions and 83 deletions
+93
View File
@@ -0,0 +1,93 @@
# FFmpeg Plugin Tests
Integration tests for the FFmpeg metadata extraction plugin.
## Requirements
Tests require FFprobe to be installed. Since FFprobe is typically only available in the Docker container, tests are designed to run inside Docker.
## Running Tests
### Quick Start (Recommended)
```bash
# From the plugin directory
./test.sh
```
This builds a test Docker image and runs all tests inside it.
### Options
```bash
./test.sh --no-cache # Rebuild without Docker cache
./test.sh --shell # Start interactive shell for debugging
```
### Running Locally (if FFprobe is installed)
```bash
npm install
npm test
```
## Test Structure
```
test/
├── fixtures/
│ ├── generate-test-video.sh # Generates test video files
│ ├── simple.mp4 # Basic video + audio (generated)
│ ├── multi-audio.mkv # Multiple audio tracks (generated)
│ ├── with-subs.mkv # Video with subtitles (generated)
│ └── audio-only.mp3 # Audio file for skip tests (generated)
├── integration.test.ts # Integration tests
└── README.md # This file
```
## Test Categories
### Integration Tests (`integration.test.ts`)
1. **Prerequisites** - Verify FFprobe and fixtures are available
2. **Manifest** - Validate plugin manifest structure
3. **Skip Logic** - Test that non-video files are skipped
4. **FFprobe Validation** - Direct FFprobe output verification
5. **Output Format** - Validate FFprobe JSON matches plugin expectations
## Test Fixtures
Test fixtures are generated automatically during Docker build using `generate-test-video.sh`. The script creates:
- `simple.mp4` - 2-second 320x240 H.264 video with AAC audio
- `multi-audio.mkv` - Video with two audio tracks (English + Japanese)
- `with-subs.mkv` - Video with embedded SRT subtitles
- `audio-only.mp3` - Audio file (for testing skip logic)
## Writing New Tests
```typescript
import { describe, it, expect } from 'vitest';
import path from 'path';
const FIXTURES_DIR = path.join(__dirname, 'fixtures');
describe('My New Test', () => {
it('does something', async () => {
// Your test here
});
});
```
## Debugging
Start an interactive shell in the test container:
```bash
./test.sh --shell
# Inside container:
npm test # Run all tests
npx vitest run -t "skip" # Run tests matching "skip"
ffprobe test/fixtures/simple.mp4 # Manually inspect video
```