XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
UTF-8
from __future__ import annotations

import asyncio
import unittest

from g4f.client import AsyncClient, ImagesResponse
from g4f.providers.retry_provider import IterListProvider
from .mocks import (
    YieldImageResponseProviderMock,
    MissingAuthProviderMock,
    AsyncRaiseExceptionProviderMock,
    YieldNoneProviderMock,
)

DEFAULT_MESSAGES = [{"role": "user", "content": "Hello"}]


class TestIterListProvider(unittest.IsolatedAsyncioTestCase):
    async def test_skip_provider(self):
        client = AsyncClient(
            image_provider=IterListProvider(
                [MissingAuthProviderMock, YieldImageResponseProviderMock], False
            )
        )
        response = await client.images.generate("Hello", "", response_format="orginal")
        self.assertIsInstance(response, ImagesResponse)
        self.assertEqual("Hello", response.data[0].url)

    async def test_only_one_result(self):
        client = AsyncClient(
            image_provider=IterListProvider(
                [YieldImageResponseProviderMock, YieldImageResponseProviderMock], False
            )
        )
        response = await client.images.generate("Hello", "", response_format="orginal")
        self.assertIsInstance(response, ImagesResponse)
        self.assertEqual("Hello", response.data[0].url)

    async def test_skip_none(self):
        client = AsyncClient(
            image_provider=IterListProvider(
                [YieldNoneProviderMock, YieldImageResponseProviderMock], False
            )
        )
        response = await client.images.generate("Hello", "", response_format="orginal")
        self.assertIsInstance(response, ImagesResponse)
        self.assertEqual("Hello", response.data[0].url)

    def test_raise_exception(self):
        async def run_exception():
            client = AsyncClient(
                image_provider=IterListProvider(
                    [YieldNoneProviderMock, AsyncRaiseExceptionProviderMock], False
                )
            )
            await client.images.generate("Hello", "")

        self.assertRaises(RuntimeError, asyncio.run, run_exception())


if __name__ == "__main__":
    unittest.main()