from pathlib import Path import pytest from nonebug.app import App from .utils import get_file, get_json async def test_subs_export(app: App, init_scheduler): import time from nonebot_bison.config.db_config import config from nonebot_bison.config.db_model import User from nonebot_bison.config.subs_io import subscribes_export from nonebot_bison.types import Target as TTarget await config.add_subscribe( user=123, user_type="group", target=TTarget("weibo_id"), target_name="weibo_name", platform_name="weibo", cats=[], tags=[], ) await config.add_subscribe( user=234, user_type="group", target=TTarget("weibo_id"), target_name="weibo_name", platform_name="weibo", cats=[], tags=["kaltsit", "amiya"], ) await config.add_subscribe( user=234, user_type="group", target=TTarget("bilibili_id"), target_name="bilibili_name", platform_name="bilibili", cats=[1, 2], tags=[], ) data = await config.list_subs_with_all_info() assert len(data) == 3 nbesf_data = await subscribes_export(lambda x: x) assert nbesf_data.dict() == get_json("subs_export.json") nbesf_data_user_234 = await subscribes_export( lambda stmt: stmt.where(User.uid == 234, User.type == "group") ) assert len(nbesf_data_user_234.groups) == 1 assert len(nbesf_data_user_234.groups[0].subs) == 2 assert nbesf_data_user_234.groups[0].user.dict() == {"uid": 234, "type": "group"} async def test_subs_import(app: App, init_scheduler): from nonebot_bison.config.db_config import config from nonebot_bison.config.subs_io import nbesf_parser, subscribes_import nbesf_data = nbesf_parser(get_json("subs_export.json")) await subscribes_import(nbesf_data) data = await config.list_subs_with_all_info() assert len(data) == 3 async def test_subs_import_dup_err(app: App, init_scheduler): from nonebot_bison.config.db_config import config from nonebot_bison.config.subs_io import nbesf_parser, subscribes_import nbesf_data = nbesf_parser(get_json("subs_export_has_subdup_err.json")) await subscribes_import(nbesf_data) data = await config.list_subs_with_all_info() assert len(data) == 4 async def test_subs_import_all_fail(app: App, init_scheduler): """只要文件格式有任何一个错误, 都不会进行订阅""" from nonebot_bison.config.subs_io import nbesf_parser from nonebot_bison.config.subs_io.nbesf_model import NBESFParseErr with pytest.raises(NBESFParseErr): nbesf_data = nbesf_parser(get_json("subs_export_all_illegal.json"))