import pytest
import respx
from httpx import Response
from nonebug.app import App

from .utils import get_json


@pytest.fixture
def bili_live(app: App):
    from nonebot_bison.platform import platform_manager

    return platform_manager["bilibili-live"]


@pytest.mark.asyncio
@respx.mock
async def test_fetch_bilibili_live_status(bili_live, dummy_user_subinfo):
    mock_bili_live_status = get_json("bili_live_status.json")

    bili_live_router = respx.get(
        "https://api.bilibili.com/x/space/acc/info?mid=13164144"
    )
    bili_live_router.mock(return_value=Response(200, json=mock_bili_live_status))

    bilibili_main_page_router = respx.get("https://www.bilibili.com/")
    bilibili_main_page_router.mock(return_value=Response(200))

    target = "13164144"
    res = await bili_live.fetch_new_post(target, [dummy_user_subinfo])
    assert bili_live_router.called
    assert len(res) == 0
    mock_bili_live_status["data"]["live_room"]["liveStatus"] = 1
    bili_live_router.mock(return_value=Response(200, json=mock_bili_live_status))
    res2 = await bili_live.fetch_new_post(target, [dummy_user_subinfo])
    post = res2[0][1][0]
    assert post.target_type == "Bilibili直播"
    assert post.text == "【Zc】早朝危机合约!"
    assert post.url == "https://live.bilibili.com/3044248"
    assert post.target_name == "魔法Zc目录"
    assert post.pics == [
        "http://i0.hdslb.com/bfs/live/new_room_cover/cf7d4d3b2f336c6dba299644c3af952c5db82612.jpg"
    ]
    assert post.compress == True