mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2025-06-02 09:26:12 +08:00
✅ 初步实现添加cookie的单元测试
This commit is contained in:
parent
2cfd58373f
commit
dd802a9c17
@ -47,7 +47,7 @@ do_del_sub(del_sub_matcher)
|
||||
add_cookie_matcher = on_command(
|
||||
"添加cookie",
|
||||
aliases={"添加Cookie"},
|
||||
rule=configurable_to_me,
|
||||
rule=to_me(),
|
||||
permission=SUPERUSER,
|
||||
priority=5,
|
||||
block=True,
|
||||
@ -57,7 +57,7 @@ do_add_cookie(add_cookie_matcher)
|
||||
add_cookie_target_matcher = on_command(
|
||||
"关联cookie",
|
||||
aliases={"关联Cookie"},
|
||||
rule=configurable_to_me,
|
||||
rule=to_me(),
|
||||
permission=SUPERUSER,
|
||||
priority=5,
|
||||
block=True,
|
||||
@ -67,7 +67,7 @@ do_add_cookie_target(add_cookie_target_matcher)
|
||||
del_cookie_target_matcher = on_command(
|
||||
"取消关联cookie",
|
||||
aliases={"取消关联Cookie"},
|
||||
rule=configurable_to_me,
|
||||
rule=to_me(),
|
||||
permission=SUPERUSER,
|
||||
priority=5,
|
||||
block=True,
|
||||
@ -77,7 +77,7 @@ do_del_cookie_target(del_cookie_target_matcher)
|
||||
del_cookie_matcher = on_command(
|
||||
"删除cookie",
|
||||
aliases={"删除Cookie"},
|
||||
rule=configurable_to_me,
|
||||
rule=to_me(),
|
||||
permission=SUPERUSER,
|
||||
priority=5,
|
||||
block=True,
|
||||
@ -167,4 +167,8 @@ __all__ = [
|
||||
"del_sub_matcher",
|
||||
"group_manage_matcher",
|
||||
"no_permission_matcher",
|
||||
"add_cookie_matcher",
|
||||
"add_cookie_target_matcher",
|
||||
"del_cookie_target_matcher",
|
||||
"del_cookie_matcher",
|
||||
]
|
||||
|
@ -57,7 +57,7 @@ def do_add_cookie(add_cookie: type[Matcher]):
|
||||
)
|
||||
cookie_text = cookie.extract_plain_text()
|
||||
if not await client_mgr.validate_cookie(cookie_text):
|
||||
await add_cookie.reject("无效的 Cookie,请检查后重新输入,详情见<待添加的文档>")
|
||||
await add_cookie.reject(state["site"].cookie_format_prompt)
|
||||
state["cookie"] = cookie_text
|
||||
|
||||
@add_cookie.handle()
|
||||
|
@ -156,6 +156,7 @@ class Site(metaclass=RegistryMeta, base=True):
|
||||
client_mgr: type[ClientManager] = DefaultClientManager
|
||||
require_browser: bool = False
|
||||
registry: list[type["Site"]]
|
||||
cookie_format_prompt = "无效的 Cookie,请检查后重新输入,详情见<待添加的文档>"
|
||||
|
||||
def __str__(self):
|
||||
return f"[{self.name}]-{self.name}-{self.schedule_setting}"
|
||||
|
212
tests/sub_manager/test_add_cookie.py
Normal file
212
tests/sub_manager/test_add_cookie.py
Normal file
@ -0,0 +1,212 @@
|
||||
import json
|
||||
|
||||
from nonebug.app import App
|
||||
from pytest_mock import MockerFixture
|
||||
|
||||
from ..utils import BotReply, fake_superuser, fake_admin_user, fake_private_message_event
|
||||
|
||||
|
||||
async def test_add_cookie_rule(app: App, mocker: MockerFixture):
|
||||
from nonebot.adapters.onebot.v11.bot import Bot
|
||||
from nonebot.adapters.onebot.v11.message import Message
|
||||
|
||||
from nonebot_bison.plugin_config import plugin_config
|
||||
from nonebot_bison.sub_manager import add_cookie_matcher
|
||||
|
||||
mocker.patch.object(plugin_config, "bison_to_me", True)
|
||||
|
||||
async with app.test_matcher(add_cookie_matcher) as ctx:
|
||||
bot = ctx.create_bot(base=Bot)
|
||||
event = fake_private_message_event(message=Message("添加cookie"), sender=fake_superuser)
|
||||
ctx.receive_event(bot, event)
|
||||
ctx.should_pass_rule()
|
||||
ctx.should_pass_permission()
|
||||
|
||||
async with app.test_matcher(add_cookie_matcher) as ctx:
|
||||
bot = ctx.create_bot(base=Bot)
|
||||
event = fake_private_message_event(message=Message("添加cookie"), sender=fake_admin_user)
|
||||
ctx.receive_event(bot, event)
|
||||
ctx.should_not_pass_rule()
|
||||
ctx.should_pass_permission()
|
||||
|
||||
|
||||
async def test_add_cookie_target_no_cookie(app: App, mocker: MockerFixture):
|
||||
from nonebot.adapters.onebot.v11.bot import Bot
|
||||
from nonebot.adapters.onebot.v11.message import Message
|
||||
|
||||
from nonebot_bison.sub_manager import add_cookie_target_matcher
|
||||
|
||||
async with app.test_matcher(add_cookie_target_matcher) as ctx:
|
||||
bot = ctx.create_bot(base=Bot)
|
||||
from nonebug_saa import should_send_saa
|
||||
from nonebot_plugin_saa import TargetQQGroup, MessageFactory
|
||||
|
||||
from nonebot_bison.config import config
|
||||
from nonebot_bison.types import Target as T_Target
|
||||
|
||||
target = T_Target("weibo_id")
|
||||
platform_name = "weibo"
|
||||
await config.add_subscribe(
|
||||
TargetQQGroup(group_id=123),
|
||||
target=target,
|
||||
target_name="weibo_name",
|
||||
platform_name=platform_name,
|
||||
cats=[],
|
||||
tags=[],
|
||||
)
|
||||
|
||||
event_1 = fake_private_message_event(
|
||||
message=Message("关联cookie"), sender=fake_superuser, to_me=True, user_id=fake_superuser.user_id
|
||||
)
|
||||
ctx.receive_event(bot, event_1)
|
||||
ctx.should_pass_rule()
|
||||
should_send_saa(
|
||||
ctx,
|
||||
MessageFactory(
|
||||
"订阅的帐号为:\n1 weibo weibo_name weibo_id\n []\n请输入要关联 cookie 的订阅的序号\n输入'取消'中止"
|
||||
),
|
||||
bot,
|
||||
event=event_1,
|
||||
)
|
||||
event_2 = fake_private_message_event(
|
||||
message=Message("1"), sender=fake_superuser, to_me=True, user_id=fake_superuser.user_id
|
||||
)
|
||||
ctx.receive_event(bot, event_2)
|
||||
ctx.should_pass_rule()
|
||||
ctx.should_call_send(
|
||||
event_2,
|
||||
"当前平台暂无可关联的 Cookie,请使用“添加cookie”命令添加或检查已关联的 Cookie",
|
||||
True,
|
||||
)
|
||||
|
||||
|
||||
async def test_add_cookie(app: App, mocker: MockerFixture):
|
||||
from nonebot.adapters.onebot.v11.bot import Bot
|
||||
from nonebot.adapters.onebot.v11.message import Message
|
||||
|
||||
from nonebot_bison.platform import platform_manager
|
||||
from nonebot_bison.sub_manager import common_platform, add_cookie_matcher, add_cookie_target_matcher
|
||||
|
||||
async with app.test_matcher(add_cookie_matcher) as ctx:
|
||||
bot = ctx.create_bot(base=Bot)
|
||||
event_1 = fake_private_message_event(
|
||||
message=Message("添加Cookie"), sender=fake_superuser, to_me=True, user_id=fake_superuser.user_id
|
||||
)
|
||||
ctx.receive_event(bot, event_1)
|
||||
ctx.should_pass_rule()
|
||||
ctx.should_call_send(
|
||||
event_1,
|
||||
BotReply.add_reply_on_add_cookie(platform_manager, common_platform),
|
||||
True,
|
||||
)
|
||||
event_2 = fake_private_message_event(
|
||||
message=Message("全部"), sender=fake_superuser, to_me=True, user_id=fake_superuser.user_id
|
||||
)
|
||||
ctx.receive_event(bot, event_2)
|
||||
ctx.should_pass_rule()
|
||||
ctx.should_rejected()
|
||||
ctx.should_call_send(
|
||||
event_2,
|
||||
BotReply.add_reply_on_add_cookie_input_allplatform(platform_manager),
|
||||
True,
|
||||
)
|
||||
event_3 = fake_private_message_event(
|
||||
message=Message("weibo"), sender=fake_superuser, to_me=True, user_id=fake_superuser.user_id
|
||||
)
|
||||
ctx.receive_event(bot, event_3)
|
||||
ctx.should_pass_rule()
|
||||
ctx.should_call_send(event_3, BotReply.add_reply_on_input_cookie)
|
||||
event_4_err = fake_private_message_event(
|
||||
message=Message("test"), sender=fake_superuser, to_me=True, user_id=fake_superuser.user_id
|
||||
)
|
||||
ctx.receive_event(bot, event_4_err)
|
||||
ctx.should_call_send(event_4_err, "无效的 Cookie,请检查后重新输入,详情见<待添加的文档>", True)
|
||||
ctx.should_rejected()
|
||||
event_4_ok = fake_private_message_event(
|
||||
message=Message(json.dumps({"cookie": "test"})),
|
||||
sender=fake_superuser,
|
||||
to_me=True,
|
||||
user_id=fake_superuser.user_id,
|
||||
)
|
||||
ctx.receive_event(bot, event_4_ok)
|
||||
ctx.should_pass_rule()
|
||||
ctx.should_call_send(
|
||||
event_4_ok, '已添加 Cookie: {"cookie": "test"} 到平台 weibo\n请使用“关联cookie”为 Cookie 关联订阅', True
|
||||
)
|
||||
|
||||
async with app.test_matcher(add_cookie_target_matcher) as ctx:
|
||||
from nonebug_saa import should_send_saa
|
||||
from nonebot_plugin_saa import TargetQQGroup, MessageFactory
|
||||
|
||||
from nonebot_bison.config import config
|
||||
from nonebot_bison.types import Target as T_Target
|
||||
|
||||
target = T_Target("weibo_id")
|
||||
platform_name = "weibo"
|
||||
await config.add_subscribe(
|
||||
TargetQQGroup(group_id=123),
|
||||
target=target,
|
||||
target_name="weibo_name",
|
||||
platform_name=platform_name,
|
||||
cats=[],
|
||||
tags=[],
|
||||
)
|
||||
bot = ctx.create_bot(base=Bot)
|
||||
event_1 = fake_private_message_event(
|
||||
message=Message("关联cookie"), sender=fake_superuser, to_me=True, user_id=fake_superuser.user_id
|
||||
)
|
||||
ctx.receive_event(bot, event_1)
|
||||
ctx.should_pass_rule()
|
||||
should_send_saa(
|
||||
ctx,
|
||||
MessageFactory(
|
||||
"订阅的帐号为:\n1 weibo weibo_name weibo_id\n []\n请输入要关联 cookie 的订阅的序号\n输入'取消'中止"
|
||||
),
|
||||
bot,
|
||||
event=event_1,
|
||||
)
|
||||
event_2_err = fake_private_message_event(
|
||||
message=Message("2"), sender=fake_superuser, to_me=True, user_id=fake_superuser.user_id
|
||||
)
|
||||
ctx.receive_event(bot, event_2_err)
|
||||
ctx.should_call_send(event_2_err, "序号错误", True)
|
||||
ctx.should_rejected()
|
||||
event_2_ok = fake_private_message_event(
|
||||
message=Message("1"), sender=fake_superuser, to_me=True, user_id=fake_superuser.user_id
|
||||
)
|
||||
ctx.receive_event(bot, event_2_ok)
|
||||
ctx.should_pass_rule()
|
||||
ctx.should_call_send(event_2_ok, '请选择一个 Cookie,已关联的 Cookie 不会显示\n1. weibo.com [{"cookie":]', True)
|
||||
event_3_err = fake_private_message_event(
|
||||
message=Message("2"), sender=fake_superuser, to_me=True, user_id=fake_superuser.user_id
|
||||
)
|
||||
ctx.receive_event(bot, event_3_err)
|
||||
ctx.should_call_send(event_3_err, "序号错误", True)
|
||||
ctx.should_rejected()
|
||||
event_3_ok = fake_private_message_event(
|
||||
message=Message("1"), sender=fake_superuser, to_me=True, user_id=fake_superuser.user_id
|
||||
)
|
||||
ctx.receive_event(bot, event_3_ok)
|
||||
ctx.should_pass_rule()
|
||||
ctx.should_call_send(event_3_ok, '已关联 Cookie: weibo.com [{"cookie":] 到订阅 weibo.com weibo_id', True)
|
||||
|
||||
|
||||
async def test_add_cookie_target_no_target(app: App, mocker: MockerFixture):
|
||||
|
||||
from nonebot.adapters.onebot.v11.bot import Bot
|
||||
from nonebot.adapters.onebot.v11.message import Message
|
||||
|
||||
from nonebot_bison.sub_manager import add_cookie_target_matcher
|
||||
|
||||
async with app.test_matcher(add_cookie_target_matcher) as ctx:
|
||||
bot = ctx.create_bot(base=Bot)
|
||||
event_1 = fake_private_message_event(
|
||||
message=Message("关联cookie"), sender=fake_superuser, to_me=True, user_id=fake_superuser.user_id
|
||||
)
|
||||
ctx.receive_event(bot, event_1)
|
||||
ctx.should_pass_rule()
|
||||
ctx.should_call_send(
|
||||
event_1,
|
||||
"暂无已订阅账号\n请使用“添加订阅”命令添加订阅",
|
||||
True,
|
||||
)
|
@ -89,6 +89,7 @@ add_reply_on_id_input_search = (
|
||||
|
||||
|
||||
class BotReply:
|
||||
|
||||
@staticmethod
|
||||
def add_reply_on_platform(platform_manager, common_platform):
|
||||
return (
|
||||
@ -159,3 +160,33 @@ class BotReply:
|
||||
add_reply_on_tags_need_more_info = "订阅标签直接输入标签内容\n屏蔽标签请在标签名称前添加~号\n详见https://nonebot-bison.netlify.app/usage/#%E5%B9%B3%E5%8F%B0%E8%AE%A2%E9%98%85%E6%A0%87%E7%AD%BE-tag"
|
||||
add_reply_abort = "已中止订阅"
|
||||
no_permission = "您没有权限进行此操作,请联系 Bot 管理员"
|
||||
|
||||
@staticmethod
|
||||
def add_reply_on_add_cookie(platform_manager, common_platform):
|
||||
from nonebot_bison.utils.site import is_cookie_client_manager
|
||||
|
||||
return (
|
||||
"请输入想要添加 Cookie 的平台,目前支持,请输入冒号左边的名称:\n"
|
||||
+ "".join(
|
||||
[
|
||||
f"{platform_name}: {platform_manager[platform_name].name}\n"
|
||||
for platform_name in common_platform
|
||||
if is_cookie_client_manager(platform_manager[platform_name].site.client_mgr)
|
||||
]
|
||||
)
|
||||
+ "要查看全部平台请输入:“全部”\n中止添加cookie过程请输入:“取消”"
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def add_reply_on_add_cookie_input_allplatform(platform_manager):
|
||||
from nonebot_bison.utils.site import is_cookie_client_manager
|
||||
|
||||
return "全部平台\n" + "\n".join(
|
||||
[
|
||||
f"{platform_name}: {platform.name}"
|
||||
for platform_name, platform in platform_manager.items()
|
||||
if is_cookie_client_manager(platform.site.client_mgr)
|
||||
]
|
||||
)
|
||||
|
||||
add_reply_on_input_cookie = "请输入 Cookie"
|
||||
|
Loading…
x
Reference in New Issue
Block a user