95 lines
3.6 KiB
Python
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"} |