🐛 优化对 weibo get_cookie_name 的 mock

This commit is contained in:
suyiiyii 2024-10-28 22:47:31 +08:00
parent 641cc44a12
commit 3a0f95b712
Signed by: suyiiyii
GPG Key ID: 044704CB29B8AD85
3 changed files with 59 additions and 65 deletions

View File

@ -1,12 +1,12 @@
import json import json
from typing import cast from typing import cast
from datetime import datetime from datetime import datetime
from unittest.mock import patch
import pytest import pytest
from nonebug import App from nonebug import App
@pytest.mark.usefixtures("_patch_weibo_get_cookie_name")
async def test_cookie(app: App, init_scheduler): async def test_cookie(app: App, init_scheduler):
from nonebot_plugin_saa import TargetQQGroup from nonebot_plugin_saa import TargetQQGroup
@ -34,11 +34,9 @@ async def test_cookie(app: App, init_scheduler):
cookies = await config.get_cookie(site_name=site.name) cookies = await config.get_cookie(site_name=site.name)
assert len(cookies) == 1 assert len(cookies) == 1
with patch("nonebot_bison.platform.weibo.WeiboSite._get_current_user_name") as mock: # 添加用户cookie
mock.return_value = "test_name" await client_mgr.add_user_cookie(json.dumps({"test_cookie": "1"}))
# 添加用户cookie await client_mgr.add_user_cookie(json.dumps({"test_cookie": "2"}))
await client_mgr.add_user_cookie(json.dumps({"test_cookie": "1"}))
await client_mgr.add_user_cookie(json.dumps({"test_cookie": "2"}))
cookies = await config.get_cookie(site_name=site.name) cookies = await config.get_cookie(site_name=site.name)
assert len(cookies) == 3 assert len(cookies) == 3
@ -70,9 +68,7 @@ async def test_cookie(app: App, init_scheduler):
tags=[], tags=[],
) )
with patch("nonebot_bison.platform.weibo.WeiboSite._get_current_user_name") as mock: await client_mgr.add_user_cookie(json.dumps({"test_cookie": "3"}))
mock.return_value = "test_name"
await client_mgr.add_user_cookie(json.dumps({"test_cookie": "3"}))
cookies = await config.get_cookie(site_name=site.name, is_anonymous=False) cookies = await config.get_cookie(site_name=site.name, is_anonymous=False)
# 多个target多个cookie # 多个target多个cookie

View File

@ -29,7 +29,7 @@ def load_adapters(nonebug_init: None):
return driver return driver
def _patch_refresh_bilibili_anonymous_cookie(mocker: MockerFixture): def patch_refresh_bilibili_anonymous_cookie(mocker: MockerFixture):
# patch 掉bilibili的匿名cookie生成函数避免真实请求 # patch 掉bilibili的匿名cookie生成函数避免真实请求
from nonebot_bison.platform.bilibili.scheduler import BilibiliClientManager from nonebot_bison.platform.bilibili.scheduler import BilibiliClientManager
@ -63,7 +63,7 @@ async def app(tmp_path: Path, request: pytest.FixtureRequest, mocker: MockerFixt
# 如果在 app 前调用会报错“无法找到调用者” # 如果在 app 前调用会报错“无法找到调用者”
# 而在后面调用又来不及mock所以只能在中间mock # 而在后面调用又来不及mock所以只能在中间mock
_patch_refresh_bilibili_anonymous_cookie(mocker) patch_refresh_bilibili_anonymous_cookie(mocker)
if not param.get("no_init_db"): if not param.get("no_init_db"):
await init_db() await init_db()
@ -153,6 +153,6 @@ async def _clear_db(app: App):
def _patch_weibo_get_cookie_name(app: App, mocker: MockerFixture): def _patch_weibo_get_cookie_name(app: App, mocker: MockerFixture):
from nonebot_bison.platform import weibo from nonebot_bison.platform import weibo
mocker.patch.object(weibo.WeiboSite, "get_cookie_name", return_value="weibo_cookie_name") mocker.patch.object(weibo.WeiboSite, "_get_current_user_name", return_value="test_name")
yield yield
mocker.stopall() mocker.stopall()

View File

@ -1,5 +1,4 @@
import json import json
from unittest.mock import patch
import pytest import pytest
from nonebug.app import App from nonebug.app import App
@ -84,6 +83,7 @@ async def test_add_cookie_target_no_cookie(app: App):
@pytest.mark.usefixtures("_clear_db") @pytest.mark.usefixtures("_clear_db")
@pytest.mark.usefixtures("_patch_weibo_get_cookie_name")
async def test_add_cookie(app: App): async def test_add_cookie(app: App):
from nonebot.adapters.onebot.v11.bot import Bot from nonebot.adapters.onebot.v11.bot import Bot
from nonebot.adapters.onebot.v11.message import Message from nonebot.adapters.onebot.v11.message import Message
@ -91,58 +91,56 @@ async def test_add_cookie(app: App):
from nonebot_bison.platform import platform_manager from nonebot_bison.platform import platform_manager
from nonebot_bison.sub_manager import common_platform, add_cookie_matcher, add_cookie_target_matcher from nonebot_bison.sub_manager import common_platform, add_cookie_matcher, add_cookie_target_matcher
with patch("nonebot_bison.platform.weibo.WeiboSite._get_current_user_name") as mock: async with app.test_matcher(add_cookie_matcher) as ctx:
mock.return_value = "test_name" bot = ctx.create_bot(base=Bot)
async with app.test_matcher(add_cookie_matcher) as ctx: event_1 = fake_private_message_event(
bot = ctx.create_bot(base=Bot) message=Message("添加cookie"), sender=fake_superuser, to_me=True, user_id=fake_superuser.user_id
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.receive_event(bot, event_1) ctx.should_call_send(
ctx.should_pass_rule() event_1,
ctx.should_call_send( BotReply.add_reply_on_add_cookie(platform_manager, common_platform),
event_1, True,
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
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.receive_event(bot, event_2) ctx.should_rejected()
ctx.should_pass_rule() ctx.should_call_send(
ctx.should_rejected() event_2,
ctx.should_call_send( BotReply.add_reply_on_add_cookie_input_allplatform(platform_manager),
event_2, True,
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
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.receive_event(bot, event_3) ctx.should_call_send(event_3, BotReply.add_reply_on_input_cookie)
ctx.should_pass_rule() event_4_err = fake_private_message_event(
ctx.should_call_send(event_3, BotReply.add_reply_on_input_cookie) message=Message("test"), sender=fake_superuser, to_me=True, user_id=fake_superuser.user_id
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(
ctx.receive_event(bot, event_4_err) event_4_err,
ctx.should_call_send( "无效的 Cookie请检查后重新输入详情见https://nonebot-bison.netlify.app/usage/cookie.html",
event_4_err, True,
"无效的 Cookie请检查后重新输入详情见https://nonebot-bison.netlify.app/usage/cookie.html", )
True, ctx.should_rejected()
) event_4_ok = fake_private_message_event(
ctx.should_rejected() message=Message(json.dumps({"cookie": "test"})),
event_4_ok = fake_private_message_event( sender=fake_superuser,
message=Message(json.dumps({"cookie": "test"})), to_me=True,
sender=fake_superuser, user_id=fake_superuser.user_id,
to_me=True, )
user_id=fake_superuser.user_id, ctx.receive_event(bot, event_4_ok)
) ctx.should_pass_rule()
ctx.receive_event(bot, event_4_ok) ctx.should_call_send(
ctx.should_pass_rule() event_4_ok, "已添加 Cookie: weibo: [test_name] 到平台 weibo\n请使用“关联cookie”为 Cookie 关联订阅", True
ctx.should_call_send( )
event_4_ok, "已添加 Cookie: weibo: [test_name] 到平台 weibo\n请使用“关联cookie”为 Cookie 关联订阅", True
)
async with app.test_matcher(add_cookie_target_matcher) as ctx: async with app.test_matcher(add_cookie_target_matcher) as ctx:
from nonebug_saa import should_send_saa from nonebug_saa import should_send_saa