Spaces:
Sleeping
Sleeping
| import pytest | |
| from httpx import AsyncClient, ASGITransport | |
| from main import app | |
| from unittest.mock import MagicMock, patch | |
| def mock_asr_pipeline(): | |
| with patch("main.get_asr_pipeline") as mock: | |
| mock_pipeline = MagicMock() | |
| mock_pipeline.return_value = {"text": "టెస్ట్ ట్రాన్స్క్రిప్షన్"} | |
| mock.return_value = mock_pipeline | |
| yield mock_pipeline | |
| def mock_ffmpeg(): | |
| with patch("subprocess.run") as mock: | |
| mock_result = MagicMock() | |
| mock_result.returncode = 0 | |
| mock.return_value = mock_result | |
| yield mock | |
| def mock_requests_post(): | |
| with patch("requests.post") as mock: | |
| mock_resp = MagicMock() | |
| mock_resp.status_code = 200 | |
| mock_resp.json.return_value = {"id": "123", "status": "stored"} | |
| mock.return_value = mock_resp | |
| yield mock | |
| async def test_health(): | |
| async with AsyncClient( | |
| transport=ASGITransport(app=app), base_url="http://test" | |
| ) as ac: | |
| response = await ac.get("/health") | |
| assert response.status_code == 200 | |
| assert response.json()["status"] == "ok" | |
| async def test_transcribe(mock_asr_pipeline, mock_ffmpeg): | |
| # Create a dummy audio file | |
| audio_content = b"fake audio content" | |
| files = {"audio": ("test.webm", audio_content, "audio/webm")} | |
| async with AsyncClient( | |
| transport=ASGITransport(app=app), base_url="http://test" | |
| ) as ac: | |
| # We need to mock the file read as well if needed, but UploadFile handles it | |
| response = await ac.post("/transcribe", files=files) | |
| assert response.status_code == 200 | |
| assert "text" in response.json() | |
| assert response.json()["text"] == "టెస్ట్ ట్రాన్స్క్రిప్షన్" | |
| async def test_transcribe_and_store(mock_asr_pipeline, mock_ffmpeg, mock_requests_post): | |
| with patch("main.SWECHA_AUTH_TOKEN", "fake_token"): | |
| audio_content = b"fake audio content" | |
| files = {"audio": ("test.webm", audio_content, "audio/webm")} | |
| data = {"title": "Test Title", "description": "Test Description"} | |
| async with AsyncClient( | |
| transport=ASGITransport(app=app), base_url="http://test" | |
| ) as ac: | |
| response = await ac.post("/transcribe-and-store", files=files, data=data) | |
| assert response.status_code == 200 | |
| assert response.json()["text"] == "టెస్ట్ ట్రాన్స్క్రిప్షన్" | |
| assert response.json()["swecha_response"]["id"] == "123" | |
| async def test_transcribe_empty_file(): | |
| files = {"audio": ("test.webm", b"", "audio/webm")} | |
| async with AsyncClient( | |
| transport=ASGITransport(app=app), base_url="http://test" | |
| ) as ac: | |
| response = await ac.post("/transcribe", files=files) | |
| assert response.status_code == 400 | |
| assert response.json()["detail"] == "Empty audio file" | |