# Phase 7: Testing & Polish **Status:** ✅ Done **Parent plan:** [PLAN.md](./PLAN.md) **Domain:** backend ## Objective Verify the full feature works end-to-end, write tests, fix any remaining issues, and clean up dead code. ## Tasks - [ ] Task 1: Write unit tests for each audio filter - Test each filter transforms AudioAnalysis correctly - Test stateful filters maintain and reset state - Test edge cases: empty spectrum, zero rms, all-zero input - Test filter option validation - [ ] Task 2: Write unit tests for AudioFilterPipeline - Test chain of filters produces expected output - Test empty pipeline passes through unchanged - Test reset() resets all stateful filters - [ ] Task 3: Write integration tests for AudioProcessingTemplateStore - CRUD operations - Template composition (audio_filter_template) expansion - Cycle detection in template composition - Reference validation - [ ] Task 4: Write integration tests for ProcessedAudioSource in AudioSourceStore - CRUD operations - Chain resolution (ProcessedAudioSource → ... → CaptureAudioSource) - Cycle detection in source chains - Reference validation (source + template must exist) - Cascade delete checks - [ ] Task 5: Write API tests for audio processing template endpoints - Create, read, update, delete - Validation errors (missing fields, invalid filter_ids) - Reference check on delete - [ ] Task 6: Write API tests for updated audio source endpoints - Create/update ProcessedAudioSource and CaptureAudioSource - Reject old types (mono, band_extract) - Validation of source/template references - [ ] Task 7: Verify backup/restore includes audio processing templates - Create templates, backup, restore, verify they survive - [ ] Task 8: Full build verification - `ruff check src/ tests/ --fix` passes - `npx tsc --noEmit` passes - `npm run build` succeeds - `py -3.13 -m pytest tests/ --no-cov -q` — all tests pass - [ ] Task 9: Clean up dead code - Remove any remaining imports of `MonoAudioSource`, `BandExtractAudioSource` - Remove old `band_filter.py` if fully superseded by the band_extract filter (or keep if still used elsewhere) - Remove unused schema classes - Verify no orphaned i18n keys - [ ] Task 10: Update system health/info endpoints if they enumerate audio source types ## Files to Modify/Create - `tests/test_audio_filters.py` — **create** — filter unit tests - `tests/test_audio_filter_pipeline.py` — **create** — pipeline tests - `tests/test_audio_processing_template_store.py` — **create** — store tests - `tests/test_audio_source_store.py` — **modify** — updated for new types - `tests/test_audio_processing_templates_api.py` — **create** — API tests - `tests/test_audio_sources_api.py` — **modify** — updated for new types - Various files — **modify** — dead code cleanup ## Acceptance Criteria - All new tests pass - All existing tests pass (no regressions) - Full build (Python + TypeScript) succeeds - Ruff linting passes - No dead code referencing removed types - Backup/restore round-trips correctly with audio processing templates ## Notes - This is the Big Bang verification phase — the first time build + tests are enforced - Expect some breakage from Phases 1-6 that needs fixing here - Focus on fixing real issues, not cosmetic cleanup - `band_filter.py` may still be used by the band_extract filter — check before removing ## Review Checklist - [ ] All tasks completed - [ ] Code follows project conventions - [ ] No unintended side effects - [ ] Build passes - [ ] Tests pass (new + existing) ## Handoff to Next Phase