Spaces:
Running
Running
| from unittest.mock import patch, MagicMock | |
| import io | |
| HEADERS = {"x-api-key": "test-key"} | |
| # βββ /batch/upload βββββββββββββββββββββββββββββββββββββββββββ | |
| def test_batch_upload_success(mock_process, client, mock_db): | |
| csv_content = b"text\nI love this product\nThis is terrible" | |
| file = io.BytesIO(csv_content) | |
| response = client.post( | |
| "/batch/upload", | |
| data={"model":"RoBERTa Transformer"}, | |
| files={"file": ("test.csv", file, "text/csv")}, | |
| headers=HEADERS | |
| ) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert "job_id" in data | |
| assert data["status"] == "pending" | |
| assert data["total_rows"] == 2 | |
| def test_batch_upload_non_csv(client): | |
| file = io.BytesIO(b"some content") | |
| response = client.post( | |
| "/batch/upload", | |
| data={"model":"RoBERTa Transformer"}, | |
| files={"file": ("test.txt", file, "text/plain")}, | |
| headers=HEADERS | |
| ) | |
| assert response.status_code == 400 | |
| def test_batch_upload_missing_text_column(client): | |
| csv_content = b"review\nI love this\nTerrible" | |
| file = io.BytesIO(csv_content) | |
| response = client.post( | |
| "/batch/upload", | |
| data={"model":"RoBERTa Transformer"}, | |
| files={"file": ("test.csv", file, "text/csv")}, | |
| headers=HEADERS | |
| ) | |
| assert response.status_code == 400 | |
| # βββ /batch/job/{job_id} βββββββββββββββββββββββββββββββββββββ | |
| def test_get_batch_job_not_found(client, mock_db): | |
| mock_db.query.return_value.filter.return_value.first.return_value = None | |
| response = client.get("/batch/job/999", headers=HEADERS) | |
| assert response.status_code == 404 | |
| def test_get_batch_job_success(client, mock_db): | |
| mock_job = MagicMock() | |
| mock_job.id = 1 | |
| mock_job.filename = "test.csv" | |
| mock_job.status = "completed" | |
| mock_job.model_name = "roberta" | |
| mock_job.total_rows = 2 | |
| mock_job.processed_rows = 2 | |
| mock_job.progress = 100.0 | |
| mock_job.all_columns = 1 | |
| mock_job.text_column = "text" | |
| mock_job.inference_time = 0.1 | |
| mock_job.ml_processing_time = 0.1 | |
| mock_job.db_time = 0.05 | |
| mock_job.overhead_time = 0.01 | |
| mock_job.upload_time = 0.02 | |
| mock_job.file_validation_time = 0.01 | |
| mock_job.text_preprocessing_time = 0.01 | |
| mock_job.vectorization_time = 0.01 | |
| mock_job.tokenization_time = 0.01 | |
| mock_job.sequence_padding_time = 0.01 | |
| mock_job.throughput = 20.0 | |
| mock_job.processing_time = 0.5 | |
| mock_job.created_at = None | |
| mock_job.completed_at = None | |
| mock_job.error_message = None | |
| mock_job.ai_insights = "Test insight" | |
| mock_db.query.return_value.filter.return_value.first.return_value = mock_job | |
| response = client.get("/batch/job/1", headers=HEADERS) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["job_id"] == 1 | |
| assert data["status"] == "completed" |