Spaces:
Sleeping
Sleeping
| from unittest.mock import MagicMock, mock_open, patch | |
| import pytest | |
| from frontend.app import predict | |
| # --- FIXTURES --- | |
| def mock_api_url(): | |
| with patch("frontend.app.API_URL", "http://test-api.com") as mock_url: | |
| yield mock_url | |
| def test_predict_happy_path( | |
| mock_sleep, mock_file_open, mock_shutil, mock_get, mock_post, mock_api_url | |
| ): | |
| mock_post_response = MagicMock() | |
| mock_post_response.status_code = 202 | |
| mock_post_response.json.return_value = {"task_id": "123-abc"} | |
| mock_post.return_value = mock_post_response | |
| resp_processing = MagicMock() | |
| resp_processing.json.return_value = {"status": "processing"} | |
| resp_processing.status_code = 200 | |
| resp_completed = MagicMock() | |
| resp_completed.json.return_value = { | |
| "status": "completed", | |
| "result_url": "/res/vid.mp4", | |
| } | |
| resp_completed.status_code = 200 | |
| resp_download = MagicMock() | |
| resp_download.status_code = 200 | |
| resp_download.raise_for_status = MagicMock() | |
| resp_download.raw = MagicMock() | |
| mock_get.side_effect = [resp_processing, resp_completed, resp_download] | |
| result = predict("test_video.mp4") | |
| mock_post.assert_called_once() | |
| assert "http://test-api.com/api/v1/detect" in mock_post.call_args[0][0] | |
| mock_shutil.assert_called_once() | |
| assert result == "result_123-abc.mp4" | |
| def test_predict_upload_failed(mock_post, mock_api_url): | |
| mock_post.side_effect = Exception("Connection refused") | |
| with patch("builtins.open", mock_open(read_data=b"data")): | |
| result = predict("video.mp4") | |
| assert result is None | |
| def test_predict_processing_failed(mock_sleep, mock_get, mock_post, mock_api_url): | |
| mock_post.return_value.status_code = 202 | |
| mock_post.return_value.json.return_value = {"task_id": "fail-task"} | |
| mock_get.return_value.status_code = 200 | |
| mock_get.return_value.json.return_value = { | |
| "status": "failed", | |
| "error_message": "Error", | |
| } | |
| with patch("builtins.open", mock_open(read_data=b"data")): | |
| result = predict("video.mp4") | |
| assert result is None | |