import pytest import base64 import json import struct from io import BytesIO from PIL import Image from aiohttp import web from unittest.mock import patch from app.model_manager import ModelFileManager from app.database.models import Base, Model, Tag from comfy.cli_args import args from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker pytestmark = ( pytest.mark.asyncio ) # This applies the asyncio mark to all test functions in the module @pytest.fixture def session(): # Configure in-memory database args.database_url = "sqlite:///:memory:" # Create engine and session factory engine = create_engine(args.database_url) Session = sessionmaker(bind=engine) # Create all tables Base.metadata.create_all(engine) # Patch Session factory with patch('app.database.db.Session', Session): yield Session() Base.metadata.drop_all(engine) @pytest.fixture def model_manager(): return ModelFileManager() @pytest.fixture def app(model_manager): app = web.Application() routes = web.RouteTableDef() model_manager.add_routes(routes) app.add_routes(routes) return app async def test_get_model_preview_safetensors(aiohttp_client, app, tmp_path): img = Image.new('RGB', (100, 100), 'white') img_byte_arr = BytesIO() img.save(img_byte_arr, format='PNG') img_byte_arr.seek(0) img_b64 = base64.b64encode(img_byte_arr.getvalue()).decode('utf-8') safetensors_file = tmp_path / "test_model.safetensors" header_bytes = json.dumps({ "__metadata__": { "ssmd_cover_images": json.dumps([img_b64]) } }).encode('utf-8') length_bytes = struct.pack('