from __future__ import annotations import json import pytest import torch from encode_audio import NativeTokenizerUnavailableError, encode_audio, main from round_trip_test import main as round_trip_main def _write_continuous_dav(path): torch.save( { "encoder.block.weight": torch.zeros(1), "mean_proj.weight": torch.zeros(1), "logs_proj.weight": torch.zeros(1), "dec_in_proj.weight": torch.zeros(1), "decoder.block.weight": torch.zeros(1), }, path, ) def test_encode_fails_before_touching_missing_audio(tmp_path): checkpoint = tmp_path / "dav.pth" nonexistent_audio = tmp_path / "does-not-exist.wav" _write_continuous_dav(checkpoint) with pytest.raises(NativeTokenizerUnavailableError, match="missing RVQ/VQ quantizer weights") as caught: encode_audio(nonexistent_audio, dav_path=checkpoint) assert caught.value.report is not None assert not nonexistent_audio.exists() def test_encode_cli_reports_blocked_json(tmp_path, capsys): checkpoint = tmp_path / "dav.pth" _write_continuous_dav(checkpoint) assert main([str(tmp_path / "missing.wav"), "--dav", str(checkpoint), "--json"]) == 2 payload = json.loads(capsys.readouterr().out) assert payload["status"] == "BLOCKED" assert payload["audio_was_read"] is False def test_round_trip_reports_blocked_before_wav_processing(tmp_path, capsys): checkpoint = tmp_path / "dav.pth" _write_continuous_dav(checkpoint) result = round_trip_main( [str(tmp_path / "missing.wav"), str(tmp_path / "out.wav"), "--dav", str(checkpoint), "--json"] ) assert result == 2 payload = json.loads(capsys.readouterr().out) assert payload["status"] == "BLOCKED" assert payload["wav_processing_started"] is False def test_missing_encoder_is_reported_without_continuous_claim(tmp_path): checkpoint = tmp_path / "decoder-only.pth" torch.save( { "dec_in_proj.weight": torch.zeros(1), "decoder.block.weight": torch.zeros(1), }, checkpoint, ) with pytest.raises(NativeTokenizerUnavailableError) as caught: encode_audio(tmp_path / "not-opened.wav", dav_path=checkpoint) reason = str(caught.value) assert "waveform/tokenizer encoder weights" in reason assert "continuous Flow-VAE analysis path" not in reason