import asyncio import base64 from io import BytesIO from pathlib import Path from unittest.mock import AsyncMock import pytest from PIL import Image as PILImage from astrbot.api.event import MessageChain from astrbot.api.message_components import Image from astrbot.core.platform.sources.mattermost.client import MattermostClient from astrbot.core.platform.sources.satori.satori_event import SatoriPlatformEvent from astrbot.core.platform.sources.slack.slack_event import SlackMessageEvent from astrbot.core.platform.sources.webchat import webchat_event @pytest.mark.asyncio async def test_satori_image_data_url_preserves_png_mime_type(): image_buffer = BytesIO() PILImage.new("RGBA", (2, 2), (255, 0, 0, 128)).save( image_buffer, format="PNG", ) image_ref = ( "data:image/png;base64," + base64.b64encode(image_buffer.getvalue()).decode() ) result = await SatoriPlatformEvent._convert_component_to_satori_static( Image(file=image_ref), ) assert result.startswith('