Fix tests.

This commit is contained in:
Robin Huang 2024-08-10 13:20:05 -07:00
parent e37dd27efb
commit 9d67d9618d
2 changed files with 52 additions and 32 deletions

View File

@ -1,6 +0,0 @@
import sys
import os
# Add the project root directory to the Python path
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
sys.path.insert(0, project_root)

View File

@ -2,26 +2,30 @@ import pytest
from aiohttp import web from aiohttp import web
from unittest.mock import MagicMock, patch from unittest.mock import MagicMock, patch
from api_server.routes.internal.internal_routes import InternalRoutes from api_server.routes.internal.internal_routes import InternalRoutes
from api_server.services.file_service import FileService
from folder_paths import models_dir, user_directory, output_directory from folder_paths import models_dir, user_directory, output_directory
@pytest.fixture @pytest.fixture
def internal_routes(): def internal_routes():
print("Creating InternalRoutes instance")
return InternalRoutes() return InternalRoutes()
@pytest.fixture @pytest.fixture
async def client(aiohttp_client, internal_routes): def aiohttp_client_factory(aiohttp_client, internal_routes):
async def _get_client():
app = internal_routes.get_app() app = internal_routes.get_app()
return await aiohttp_client(app) return await aiohttp_client(app)
return _get_client
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_list_files_valid_directory(client, internal_routes): async def test_list_files_valid_directory(aiohttp_client_factory, internal_routes):
mock_file_list = [ mock_file_list = [
{"name": "file1.txt", "path": "file1.txt", "type": "file", "size": 100}, {"name": "file1.txt", "path": "file1.txt", "type": "file", "size": 100},
{"name": "dir1", "path": "dir1", "type": "directory"} {"name": "dir1", "path": "dir1", "type": "directory"}
] ]
internal_routes.file_service.list_files = MagicMock(return_value=mock_file_list) internal_routes.file_service.list_files = MagicMock(return_value=mock_file_list)
client = await aiohttp_client_factory()
resp = await client.get('/files?directory=models') resp = await client.get('/files?directory=models')
assert resp.status == 200 assert resp.status == 200
data = await resp.json() data = await resp.json()
@ -30,9 +34,9 @@ async def test_list_files_valid_directory(client, internal_routes):
assert data['files'] == mock_file_list assert data['files'] == mock_file_list
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_list_files_invalid_directory(client, internal_routes): async def test_list_files_invalid_directory(aiohttp_client_factory, internal_routes):
internal_routes.file_service.list_files = MagicMock(side_effect=ValueError("Invalid directory key")) internal_routes.file_service.list_files = MagicMock(side_effect=ValueError("Invalid directory key"))
client = await aiohttp_client_factory()
resp = await client.get('/files?directory=invalid') resp = await client.get('/files?directory=invalid')
assert resp.status == 400 assert resp.status == 400
data = await resp.json() data = await resp.json()
@ -40,9 +44,9 @@ async def test_list_files_invalid_directory(client, internal_routes):
assert data['error'] == "Invalid directory key" assert data['error'] == "Invalid directory key"
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_list_files_exception(client, internal_routes): async def test_list_files_exception(aiohttp_client_factory, internal_routes):
internal_routes.file_service.list_files = MagicMock(side_effect=Exception("Unexpected error")) internal_routes.file_service.list_files = MagicMock(side_effect=Exception("Unexpected error"))
client = await aiohttp_client_factory()
resp = await client.get('/files?directory=models') resp = await client.get('/files?directory=models')
assert resp.status == 500 assert resp.status == 500
data = await resp.json() data = await resp.json()
@ -50,25 +54,16 @@ async def test_list_files_exception(client, internal_routes):
assert data['error'] == "Unexpected error" assert data['error'] == "Unexpected error"
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_list_files_no_directory_param(client, internal_routes): async def test_list_files_no_directory_param(aiohttp_client_factory, internal_routes):
mock_file_list = [] mock_file_list = []
internal_routes.file_service.list_files = MagicMock(return_value=mock_file_list) internal_routes.file_service.list_files = MagicMock(return_value=mock_file_list)
client = await aiohttp_client_factory()
resp = await client.get('/files') resp = await client.get('/files')
assert resp.status == 200 assert resp.status == 200
data = await resp.json() data = await resp.json()
assert 'files' in data assert 'files' in data
assert len(data['files']) == 0 assert len(data['files']) == 0
@patch('server.routes.internal_routes.FileService')
def test_file_service_initialization(mock_file_service):
InternalRoutes()
mock_file_service.assert_called_once_with({
"models": models_dir,
"user": user_directory,
"output": output_directory
})
def test_setup_routes(internal_routes): def test_setup_routes(internal_routes):
internal_routes.setup_routes() internal_routes.setup_routes()
routes = internal_routes.routes routes = internal_routes.routes
@ -84,11 +79,42 @@ def test_get_app_reuse(internal_routes):
app2 = internal_routes.get_app() app2 = internal_routes.get_app()
assert app1 is app2 assert app1 is app2
# Additional test to check if routes are added to the application
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_routes_added_to_app(aiohttp_client, internal_routes): async def test_routes_added_to_app(aiohttp_client_factory, internal_routes):
app = internal_routes.get_app() print("Starting test_routes_added_to_app")
client = await aiohttp_client(app)
# This will raise an exception if the route doesn't exist # Create the client
await client.get('/files') client = await aiohttp_client_factory()
print("Attempting to send GET request to /files")
try:
resp = await client.get('/files')
print(f"Response received: status {resp.status}")
except Exception as e:
print(f"Exception occurred during GET request: {e}")
raise
# We're not checking the response content here, just that the route exists
# and returns a response (even if it's an error response)
print(f"Asserting response status is not 404")
assert resp.status != 404, "Route /files does not exist"
print("Test completed successfully")
@pytest.mark.asyncio
async def test_file_service_initialization():
with patch('api_server.routes.internal.internal_routes.FileService') as MockFileService:
# Create a mock instance
mock_file_service_instance = MagicMock(spec=FileService)
MockFileService.return_value = mock_file_service_instance
internal_routes = InternalRoutes()
# Check if FileService was initialized with the correct parameters
MockFileService.assert_called_once_with({
"models": models_dir,
"user": user_directory,
"output": output_directory
})
# Verify that the file_service attribute of InternalRoutes is set
assert internal_routes.file_service == mock_file_service_instance