| 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()
|
|
|