from typing import Literal

import pytest
from nonebug import App


@pytest.mark.asyncio
async def test_registry_new_theme(app: App):
    from nonebot_bison.theme import Theme, ThemeRegistrationError, theme_manager

    class MockTheme(Theme):
        name: Literal["mock_theme"] = "mock_theme"

        async def render(self, _):
            return ""

    assert len(theme_manager) == 5
    assert "arknights" in theme_manager
    assert "basic" in theme_manager
    assert "brief" in theme_manager
    assert "ceobecanteen" in theme_manager
    assert "ht2i" in theme_manager
    assert "mock_theme" not in theme_manager

    theme_manager.register(MockTheme())
    assert len(theme_manager) == 6
    assert "mock_theme" in theme_manager

    # duplicated registration
    with pytest.raises(ThemeRegistrationError, match="duplicate"):
        theme_manager.register(MockTheme())

    theme_manager.unregister("mock_theme")