import pytest import respx from httpx import Response from nonebug.app import App from .utils import get_file, get_json @pytest.fixture def mcbbsnews(app: App): from nonebot_bison.platform import platform_manager return platform_manager["mcbbsnews"] @pytest.fixture(scope="module") def raw_post_list(): return get_json("mcbbsnews_raw_post_list.json") @pytest.fixture(scope="module") def javanews_post_0(): return get_file("mcbbsnews_java_post-0.txt") @pytest.fixture(scope="module") def javanews_post_1(): return get_file("mcbbsnews_java_post-1.txt") @pytest.fixture(scope="module") def bedrocknews_post(): return get_file("mcbbsnews_bedrock_post.txt") @pytest.mark.asyncio async def test_javanews_parser(mcbbsnews, raw_post_list, javanews_post_0): post = await mcbbsnews.parse(raw_post_list[3]) assert post.text == javanews_post_0 @pytest.mark.asyncio async def test_bedrocknews_parser(mcbbsnews, raw_post_list, bedrocknews_post): post = await mcbbsnews.parse(raw_post_list[4]) assert post.text == bedrocknews_post @pytest.mark.asyncio async def test_express_merch_parser(mcbbsnews, raw_post_list): java_express_post = await mcbbsnews.parse(raw_post_list[0]) bedrock_express_post = await mcbbsnews.parse(raw_post_list[13]) mc_merch_post = await mcbbsnews.parse(raw_post_list[26]) assert java_express_post.text == get_file("mcbbsnews_java_express_post.txt") assert bedrock_express_post.text == get_file("mcbbsnews_bedrock_express_post.txt") assert mc_merch_post.text == get_file("mcbbsnews_merch_post.txt") @pytest.mark.asyncio @respx.mock async def test_fetch_new(mcbbsnews, dummy_user_subinfo, javanews_post_1): news_router = respx.get("https://www.mcbbs.net/forum-news-1.html") news_router.mock( return_value=Response(200, text=get_file("mcbbsnews_post_list_html-0.html")) ) new_post = respx.get("https://www.mcbbs.net/thread-1340927-1-1.html") new_post.mock( return_value=Response(200, text=get_file("mcbbsnews_new_post_html.html")) ) target = "" res = await mcbbsnews.fetch_new_post(target, [dummy_user_subinfo]) assert news_router.called assert len(res) == 0 news_router.mock( return_value=Response(200, text=get_file("mcbbsnews_post_list_html-1.html")) ) res = await mcbbsnews.fetch_new_post(target, [dummy_user_subinfo]) assert news_router.called post = res[0][1][0] assert post.target_type == "MCBBS幻翼块讯" assert post.text == javanews_post_1 assert post.url == "https://www.mcbbs.net/thread-1340927-1-1.html" assert post.target_name == "Java版本资讯"