LLMBench / tests /test_api /test_datasets.py
jimmy2110's picture
Initial commit: LLMBench platform with Amber & Terra Cotta theme and Celery worker fixes
188fa4e
Raw
History Blame Contribute Delete
2.67 kB
from datetime import datetime, timezone
import pytest
from httpx import ASGITransport, AsyncClient
from unittest.mock import AsyncMock, patch
from backend.app.models.dataset import Dataset
from backend.app.schemas import dataset as schema_dataset
@pytest.mark.asyncio
async def test_create_dataset_success(client: AsyncClient) -> None:
"""Asserts that a valid dataset payload returns HTTP 201 and correct mock response."""
now = datetime.now(timezone.utc)
mock_dataset_db = Dataset(
id=1,
name="Test QA Dataset",
version="1.0.0",
description="Verify prompt safety",
category="safety",
created_at=now,
updated_at=now
)
with patch("backend.app.api.v1.datasets.crud_dataset.dataset.create", new_callable=AsyncMock) as mock_create:
mock_create.return_value = mock_dataset_db
payload = {
"name": "Test QA Dataset",
"version": "1.0.0",
"description": "Verify prompt safety",
"category": "safety"
}
response = await client.post("/api/v1/datasets/", json=payload)
assert response.status_code == 201
data = response.json()
assert data["name"] == "Test QA Dataset"
assert data["id"] == 1
assert data["category"] == "safety"
@pytest.mark.asyncio
async def test_list_datasets(client: AsyncClient) -> None:
"""Asserts listing datasets calls get_multi and returns dataset schemas."""
now = datetime.now(timezone.utc)
mock_list = [
Dataset(id=1, name="DS1", version="1.0", description="Desc1", category="factual", created_at=now, updated_at=now),
Dataset(id=2, name="DS2", version="2.0", description="Desc2", category="reasoning", created_at=now, updated_at=now)
]
with patch("backend.app.api.v1.datasets.crud_dataset.dataset.get_multi", new_callable=AsyncMock) as mock_multi:
mock_multi.return_value = mock_list
response = await client.get("/api/v1/datasets/")
assert response.status_code == 200
data = response.json()
assert len(data) == 2
assert data[0]["name"] == "DS1"
assert data[1]["name"] == "DS2"
@pytest.mark.asyncio
async def test_unauthorized_access() -> None:
"""Asserts that requests missing X-API-Key are blocked with HTTP 403."""
from backend.app.main import app
async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as autoless_client:
response = await autoless_client.get("/api/v1/datasets/")
assert response.status_code == 403
assert "credentials missing" in response.json()["detail"].lower()