"""Tests for waveform peak extraction (no Essentia required).""" import json import numpy as np import pytest from worker.pipeline.waveform import extract_peaks, generate_waveform_file, peaks_to_json def test_extract_peaks_returns_correct_length(sine_440hz): audio, sr = sine_440hz peaks = extract_peaks(audio, num_points=500) assert len(peaks) == 500 def test_extract_peaks_normalized_between_0_and_1(sine_440hz): audio, sr = sine_440hz peaks = extract_peaks(audio, num_points=200) assert all(0.0 <= p <= 1.0 for p in peaks) assert max(peaks) == pytest.approx(1.0, abs=0.01) def test_extract_peaks_empty_audio(): audio = np.array([], dtype=np.float32) peaks = extract_peaks(audio, num_points=100) assert len(peaks) == 100 assert all(p == 0.0 for p in peaks) def test_peaks_to_json_valid_structure(sine_440hz): audio, _ = sine_440hz peaks = extract_peaks(audio) json_str = peaks_to_json(peaks) data = json.loads(json_str) assert data["version"] == 2 assert data["channels"] == 1 assert len(data["data"]) == len(peaks) @pytest.mark.asyncio async def test_generate_waveform_file_writes_json(tmp_path, sine_440hz): audio, _ = sine_440hz output = str(tmp_path / "waveform.json") await generate_waveform_file(audio, output) with open(output) as f: data = json.load(f) assert data["version"] == 2 assert len(data["data"]) == 1000