# Phase 7: Testing & Polish

**Status:** ⬜ Not Started
**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
<!-- N/A — final phase -->
