CoolFace
Apppublic

NhanNguyen1309/audio-separation-api

sourceHugging Faceupdated 4mo agoView on Hugging Face
0likes
test_separation_validation.py65 linesDownload Raw Back to tests
1from pathlib import Path2from unittest import mock3import tempfile4import unittest5 6from app.errors import ApiError7from app.separation_validation import validate_separation_outputs8 9 10class SeparationValidationTests(unittest.TestCase):11    def test_missing_required_output_is_rejected(self):12        with tempfile.TemporaryDirectory() as temp_dir:13            vocals = Path(temp_dir) / "vocals.wav"14            vocals.write_bytes(b"x" * 2048)15 16            with self.assertRaises(ApiError) as raised:17                validate_separation_outputs(18                    {"vocals": vocals, "instrumental": Path(temp_dir) / "instrumental.wav"},19                    input_duration_sec=10.0,20                )21 22        self.assertIn("instrumental.wav", raised.exception.message)23 24    def test_duration_mismatch_is_rejected(self):25        with tempfile.TemporaryDirectory() as temp_dir:26            vocals = Path(temp_dir) / "vocals.wav"27            instrumental = Path(temp_dir) / "instrumental.wav"28            vocals.write_bytes(b"x" * 2048)29            instrumental.write_bytes(b"x" * 2048)30 31            with (32                mock.patch("app.separation_validation.ensure_decodable"),33                mock.patch("app.separation_validation.probe_duration_seconds", return_value=15.0),34                self.assertRaises(ApiError) as raised,35            ):36                validate_separation_outputs(37                    {"vocals": vocals, "instrumental": instrumental},38                    input_duration_sec=10.0,39                )40 41        self.assertIn("duration", raised.exception.message)42 43    def test_valid_outputs_are_returned(self):44        with tempfile.TemporaryDirectory() as temp_dir:45            vocals = Path(temp_dir) / "vocals.wav"46            instrumental = Path(temp_dir) / "instrumental.wav"47            vocals.write_bytes(b"x" * 2048)48            instrumental.write_bytes(b"x" * 2048)49 50            with (51                mock.patch("app.separation_validation.ensure_decodable"),52                mock.patch("app.separation_validation.probe_duration_seconds", return_value=10.5),53            ):54                outputs = validate_separation_outputs(55                    {"vocals": vocals, "instrumental": instrumental},56                    input_duration_sec=10.0,57                )58 59        self.assertEqual(outputs["vocals"], vocals)60        self.assertEqual(outputs["instrumental"], instrumental)61 62 63if __name__ == "__main__":64    unittest.main()65