prediqai / tests /api /test_api_data.py
ganesh-vilje's picture
Deploy to Hugging Face Main
f8f02c0
import pytest
from unittest.mock import AsyncMock, patch, MagicMock
from fastapi import FastAPI
from fastapi.testclient import TestClient
from app.api.v1.data import data_router
app = FastAPI()
app.include_router(data_router, prefix="/v1")
@pytest.fixture
def data_client():
from app.api.v1.data import acccess_token_bearer
# Override authentication and authorization
app.dependency_overrides[acccess_token_bearer] = lambda: {"user_id": "test_user"}
with TestClient(app) as client:
yield client
app.dependency_overrides.clear()
@pytest.fixture
def mock_data_service():
with patch("app.api.v1.data.data_service") as mock_service:
yield mock_service
def test_read_from_url(data_client, mock_data_service):
mock_data_service.read_file = AsyncMock(return_value={"data": "parsed contents"})
response = data_client.get("/v1/data/read-file?url=http://example.com/data.csv")
assert response.status_code == 200
assert response.json()["status"] is True
assert response.json()["data"] == "parsed contents"
mock_data_service.read_file.assert_called_once_with("http://example.com/data.csv")
def test_save_metadata(data_client, mock_data_service):
mock_data_service.save_metadata = AsyncMock(return_value="mock_id_123")
payload = {
"columns": {"feature_1": "float"},
"target_columns": ["target"],
"file_url": "http://example.com/data.csv"
}
response = data_client.post("/v1/data/metadata", json=payload)
assert response.status_code == 200
assert response.json()["message"] == "Metadata saved successfully"
mock_data_service.save_metadata.assert_called_once()
def test_update_metadata_success(data_client, mock_data_service):
mock_data_service.update_metadata = AsyncMock(return_value=True)
payload = {
"metadata_id": "meta_1",
"columns": {"feature_1": "float", "feature_2": "int"}
}
response = data_client.put("/v1/data/metadata", json=payload)
assert response.status_code == 200
assert response.json()["message"] == "Metadata updated successfully"
def test_get_column_types(data_client):
response = data_client.get("/v1/data/column-types")
assert response.status_code == 200
assert response.json()["status"] is True
assert "data" in response.json()