| 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 |
|
|
| pytestmark = ( |
| pytest.mark.asyncio |
| ) |
|
|
| @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('<Q', len(header_bytes)) |
| with open(safetensors_file, 'wb') as f: |
| f.write(length_bytes) |
| f.write(header_bytes) |
|
|
| with patch('folder_paths.folder_names_and_paths', { |
| 'test_folder': ([str(tmp_path)], None) |
| }): |
| client = await aiohttp_client(app) |
| response = await client.get('/experiment/models/preview/test_folder/0/test_model.safetensors') |
|
|
| |
| assert response.status == 200 |
| assert response.content_type == 'image/webp' |
|
|
| |
| img_bytes = BytesIO(await response.read()) |
| img = Image.open(img_bytes) |
| assert img.format |
| assert img.format.lower() == 'webp' |
|
|
| |
| img.close() |
|
|