"""Unit tests for AudioVersionRead schema — waveform peaks serialization.""" import uuid from datetime import datetime, timezone from unittest.mock import MagicMock import pytest from rehearsalhub.db.models import AudioVersion from rehearsalhub.schemas.audio_version import AudioVersionRead def _make_version(peaks=None, peaks_mini=None) -> MagicMock: """Build a mock AudioVersion ORM object.""" v = MagicMock(spec=AudioVersion) v.id = uuid.uuid4() v.song_id = uuid.uuid4() v.version_number = 1 v.label = None v.nc_file_path = "/bands/test/v1.wav" v.nc_file_etag = "abc123" v.cdn_hls_base = None v.waveform_url = None v.waveform_peaks = peaks v.waveform_peaks_mini = peaks_mini v.duration_ms = 5000 v.format = "wav" v.file_size_bytes = 1024 v.analysis_status = "done" v.uploaded_by = None v.uploaded_at = datetime.now(timezone.utc) return v def test_audio_version_read_includes_waveform_peaks(): peaks = [float(i) / 500 for i in range(500)] peaks_mini = [float(i) / 100 for i in range(100)] v = _make_version(peaks=peaks, peaks_mini=peaks_mini) schema = AudioVersionRead.model_validate(v) assert schema.waveform_peaks is not None assert len(schema.waveform_peaks) == 500 assert schema.waveform_peaks_mini is not None assert len(schema.waveform_peaks_mini) == 100 def test_audio_version_read_peaks_default_null(): v = _make_version(peaks=None, peaks_mini=None) schema = AudioVersionRead.model_validate(v) assert schema.waveform_peaks is None assert schema.waveform_peaks_mini is None def test_audio_version_read_peaks_values_preserved(): peaks = [0.0, 0.5, 1.0] v = _make_version(peaks=peaks, peaks_mini=[0.25, 0.75]) schema = AudioVersionRead.model_validate(v) assert schema.waveform_peaks == [0.0, 0.5, 1.0] assert schema.waveform_peaks_mini == [0.25, 0.75]