ai_giga_tcg/tests/test_set_label_routes.py
2025-04-17 00:09:16 -04:00

95 lines
3.6 KiB
Python

from fastapi.testclient import TestClient
from unittest.mock import patch, MagicMock
from app.main import app
from app.services.set_label_service import SetLabelService
from sqlalchemy.orm import Session
from app.db.database import get_db
import asyncio
client = TestClient(app)
def test_generate_set_labels_success():
# Mock the SetLabelService
with patch('app.routes.set_label_routes.set_label_service') as mock_service:
# Setup mock
mock_service.generate_labels.return_value = asyncio.Future()
mock_service.generate_labels.return_value.set_result([
"app/data/cache/set_labels/MH1.pdf",
"app/data/cache/set_labels/NEO.pdf"
])
# Make request
response = client.post("/api/set-labels/generate", json={"sets": ["MH1", "NEO"]})
# Assert response
assert response.status_code == 200
assert response.json() == {
"message": "Labels generated successfully",
"files": [
"app/data/cache/set_labels/MH1.pdf",
"app/data/cache/set_labels/NEO.pdf"
]
}
# Verify service was called correctly
mock_service.generate_labels.assert_called_once_with(["MH1", "NEO"])
def test_generate_set_labels_error():
# Mock the SetLabelService to raise an exception
with patch('app.routes.set_label_routes.set_label_service') as mock_service:
mock_service.generate_labels.side_effect = Exception("Test error")
# Make request
response = client.post("/api/set-labels/generate", json={"sets": ["MH1", "NEO"]})
# Assert response
assert response.status_code == 500
assert response.json() == {"detail": "Test error"}
def test_get_available_sets_success():
# Mock the database session and SetLabelService
with patch('app.routes.set_label_routes.set_label_service') as mock_service, \
patch('app.db.database.get_db') as mock_get_db:
# Setup mock database session
mock_db = MagicMock(spec=Session)
mock_get_db.return_value = mock_db
# Setup mock service
mock_sets = [
{"code": "MH1", "name": "Modern Horizons"},
{"code": "NEO", "name": "Kamigawa: Neon Dynasty"}
]
mock_service.get_available_sets.return_value = asyncio.Future()
mock_service.get_available_sets.return_value.set_result(mock_sets)
# Override the dependency injection
app.dependency_overrides[get_db] = lambda: mock_db
try:
# Make request
response = client.get("/api/set-labels/available-sets")
# Assert response
assert response.status_code == 200
assert response.json() == {
"message": "Available sets retrieved successfully",
"sets": mock_sets
}
# Verify service was called correctly
mock_service.get_available_sets.assert_called_once_with(mock_db)
finally:
# Clean up dependency override
app.dependency_overrides.clear()
def test_get_available_sets_error():
# Mock the SetLabelService to raise an exception
with patch('app.routes.set_label_routes.set_label_service') as mock_service:
mock_service.get_available_sets.side_effect = Exception("Test error")
# Make request
response = client.get("/api/set-labels/available-sets")
# Assert response
assert response.status_code == 500
assert response.json() == {"detail": "Test error"}