diff --git a/tests/builtin_plugins/check/test_check.py b/tests/builtin_plugins/check/test_check.py index 98f75053..7e236495 100644 --- a/tests/builtin_plugins/check/test_check.py +++ b/tests/builtin_plugins/check/test_check.py @@ -1,235 +1,236 @@ -# from collections.abc import Callable -# from pathlib import Path -# import platform -# from typing import cast -# import nonebot -# from nonebot.adapters.onebot.v11 import Bot -# from nonebot.adapters.onebot.v11.event import GroupMessageEvent -# from nonebug import App -# from pytest_mock import MockerFixture -# from respx import MockRouter +from collections.abc import Callable +from pathlib import Path +import platform +from typing import cast -# from tests.config import BotId, GroupId, MessageId, UserId -# from tests.utils import _v11_group_message_event +import nonebot +from nonebot.adapters.onebot.v11 import Bot +from nonebot.adapters.onebot.v11.event import GroupMessageEvent +from nonebug import App +from pytest_mock import MockerFixture +from respx import MockRouter -# platform_uname = platform.uname_result( -# system="Linux", -# node="zhenxun", -# release="5.15.0-1027-azure", -# version="#1 SMP Debian 5.15.0-1027-azure", -# machine="x86_64", -# ) # type: ignore -# cpuinfo_get_cpu_info = {"brand_raw": "Intel(R) Core(TM) i7-10700K"} +from tests.config import BotId, GroupId, MessageId, UserId +from tests.utils import _v11_group_message_event + +platform_uname = platform.uname_result( + system="Linux", + node="zhenxun", + release="5.15.0-1027-azure", + version="#1 SMP Debian 5.15.0-1027-azure", + machine="x86_64", +) # type: ignore +cpuinfo_get_cpu_info = {"brand_raw": "Intel(R) Core(TM) i7-10700K"} -# def init_mocker(mocker: MockerFixture, tmp_path: Path): -# mock_psutil = mocker.patch("zhenxun.builtin_plugins.check.data_source.psutil") -# mock_cpuinfo = mocker.patch("zhenxun.builtin_plugins.check.data_source.cpuinfo") -# mock_cpuinfo.get_cpu_info.return_value = cpuinfo_get_cpu_info +def init_mocker(mocker: MockerFixture, tmp_path: Path): + mock_psutil = mocker.patch("zhenxun.builtin_plugins.check.data_source.psutil") + mock_cpuinfo = mocker.patch("zhenxun.builtin_plugins.check.data_source.cpuinfo") + mock_cpuinfo.get_cpu_info.return_value = cpuinfo_get_cpu_info -# mock_platform = mocker.patch("zhenxun.builtin_plugins.check.data_source.platform") -# mock_platform.uname.return_value = platform_uname + mock_platform = mocker.patch("zhenxun.builtin_plugins.check.data_source.platform") + mock_platform.uname.return_value = platform_uname -# mock_template_to_pic = mocker.patch( + mock_template_to_pic = mocker.patch("zhenxun.builtin_plugins.check.template_to_pic") + mock_template_to_pic_return = mocker.AsyncMock() + mock_template_to_pic.return_value = mock_template_to_pic_return -# "zhenxun.builtin_plugins.check.template_to_pic" + mock_build_message = mocker.patch( + "zhenxun.builtin_plugins.check.MessageUtils.build_message" + ) + mock_build_message_return = mocker.AsyncMock() + mock_build_message.return_value = mock_build_message_return -# ) -# mock_template_to_pic_return = mocker.AsyncMock() -# mock_template_to_pic.return_value = mock_template_to_pic_return - -# mock_build_message = mocker.patch( -# "zhenxun.builtin_plugins.check.MessageUtils.build_message" -# ) -# mock_build_message_return = mocker.AsyncMock() -# mock_build_message.return_value = mock_build_message_return - -# mock_template_path_new = tmp_path / "resources" / "template" -# mocker.patch( -# "zhenxun.builtin_plugins.check.TEMPLATE_PATH", new=mock_template_path_new -# ) -# return ( -# mock_psutil, -# mock_cpuinfo, -# mock_platform, -# mock_template_to_pic, -# mock_template_to_pic_return, -# mock_build_message, -# mock_build_message_return, -# mock_template_path_new, -# ) + mock_template_path_new = tmp_path / "resources" / "template" + mocker.patch( + "zhenxun.builtin_plugins.check.TEMPLATE_PATH", new=mock_template_path_new + ) + return ( + mock_psutil, + mock_cpuinfo, + mock_platform, + mock_template_to_pic, + mock_template_to_pic_return, + mock_build_message, + mock_build_message_return, + mock_template_path_new, + ) -# async def test_check( -# app: App, -# mocker: MockerFixture, -# mocked_api: MockRouter, -# create_bot: Callable, -# tmp_path: Path, -# ) -> None: -# """ -# 测试自检 -# """ -# from zhenxun.builtin_plugins.check import _matcher -# from zhenxun.builtin_plugins.check.data_source import __get_version -# from zhenxun.configs.config import BotConfig +async def test_check( + app: App, + mocker: MockerFixture, + mocked_api: MockRouter, + create_bot: Callable, + tmp_path: Path, +) -> None: + """ + 测试自检 + """ + from zhenxun.builtin_plugins.check import _self_check_matcher + from zhenxun.builtin_plugins.check.data_source import __get_version + from zhenxun.configs.config import BotConfig -# ( -# mock_psutil, -# mock_cpuinfo, -# mock_platform, -# mock_template_to_pic, -# mock_template_to_pic_return, -# mock_build_message, -# mock_build_message_return, -# mock_template_path_new, -# ) = init_mocker(mocker, tmp_path) -# async with app.test_matcher(_matcher) as ctx: -# bot = create_bot(ctx) -# bot: Bot = cast(Bot, bot) -# raw_message = "自检" -# event: GroupMessageEvent = _v11_group_message_event( -# message=raw_message, -# self_id=BotId.QQ_BOT, -# user_id=UserId.SUPERUSER, -# group_id=GroupId.GROUP_ID_LEVEL_5, -# message_id=MessageId.MESSAGE_ID_3, -# to_me=True, -# ) -# ctx.receive_event(bot=bot, event=event) -# mock_template_to_pic.assert_awaited_once_with( -# template_path=str((mock_template_path_new / "check").absolute()), -# template_name="main.html", -# templates={ -# "data": { -# "cpu_info": "1.0% - 1.0Ghz [1 core]", -# "cpu_process": 1.0, -# "ram_info": "1.0 / 1.0 GB", -# "ram_process": 100.0, -# "swap_info": "1.0 / 1.0 GB", -# "swap_process": 100.0, -# "disk_info": "1.0 / 1.0 GB", -# "disk_process": 100.0, -# "brand_raw": cpuinfo_get_cpu_info["brand_raw"], -# "baidu": "red", -# "google": "red", -# "system": f"{platform_uname.system} " f"{platform_uname.release}", -# "version": __get_version(), -# "plugin_count": len(nonebot.get_loaded_plugins()), -# "nickname": BotConfig.self_nickname, -# } -# }, -# pages={ -# "viewport": {"width": 195, "height": 750}, -# "base_url": f"file://{mock_template_path_new.absolute()}", -# }, -# wait=2, -# ) -# mock_template_to_pic.assert_awaited_once() -# mock_build_message.assert_called_once_with(mock_template_to_pic_return) -# mock_build_message_return.send.assert_awaited_once() + ( + mock_psutil, + mock_cpuinfo, + mock_platform, + mock_template_to_pic, + mock_template_to_pic_return, + mock_build_message, + mock_build_message_return, + mock_template_path_new, + ) = init_mocker(mocker, tmp_path) + async with app.test_matcher(_self_check_matcher) as ctx: + bot = create_bot(ctx) + bot: Bot = cast(Bot, bot) + raw_message = "自检" + event: GroupMessageEvent = _v11_group_message_event( + message=raw_message, + self_id=BotId.QQ_BOT, + user_id=UserId.SUPERUSER, + group_id=GroupId.GROUP_ID_LEVEL_5, + message_id=MessageId.MESSAGE_ID_3, + to_me=True, + ) + ctx.receive_event(bot=bot, event=event) + mock_template_to_pic.assert_awaited_once_with( + template_path=str((mock_template_path_new / "check").absolute()), + template_name="main.html", + templates={ + "data": { + "cpu_info": "1.0% - 1.0Ghz [1 core]", + "cpu_process": 1.0, + "ram_info": "1.0 / 1.0 GB", + "ram_process": 100.0, + "swap_info": "1.0 / 1.0 GB", + "swap_process": 100.0, + "disk_info": "1.0 / 1.0 GB", + "disk_process": 100.0, + "brand_raw": cpuinfo_get_cpu_info["brand_raw"], + "baidu": "red", + "google": "red", + "system": f"{platform_uname.system} " f"{platform_uname.release}", + "version": __get_version(), + "plugin_count": len(nonebot.get_loaded_plugins()), + "nickname": BotConfig.self_nickname, + } + }, + pages={ + "viewport": {"width": 195, "height": 750}, + "base_url": f"file://{mock_template_path_new.absolute()}", + }, + wait=2, + ) + mock_template_to_pic.assert_awaited_once() + mock_build_message.assert_called_once_with(mock_template_to_pic_return) + mock_build_message_return.send.assert_awaited_once() -# async def test_check_arm( -# app: App, -# mocker: MockerFixture, -# mocked_api: MockRouter, -# create_bot: Callable, -# tmp_path: Path, -# ) -> None: -# """ -# 测试自检(arm) -# """ -# from zhenxun.builtin_plugins.check import _matcher -# from zhenxun.builtin_plugins.check.data_source import __get_version -# from zhenxun.configs.config import BotConfig +async def test_check_arm( + app: App, + mocker: MockerFixture, + mocked_api: MockRouter, + create_bot: Callable, + tmp_path: Path, +) -> None: + """ + 测试自检(arm) + """ + from zhenxun.builtin_plugins.check import _self_check_matcher + from zhenxun.builtin_plugins.check.data_source import __get_version + from zhenxun.configs.config import BotConfig + + platform_uname_arm = platform.uname_result( + system="Linux", + node="zhenxun", + release="5.15.0-1017-oracle", + version="#22~20.04.1-Ubuntu SMP Wed Aug 24 11:13:15 UTC 2022", + machine="aarch64", + ) # type: ignore + mock_subprocess_check_output = mocker.patch( + "zhenxun.builtin_plugins.check.data_source.subprocess.check_output" + ) + mock_environ_copy = mocker.patch( + "zhenxun.builtin_plugins.check.data_source.os.environ.copy" + ) + mock_environ_copy_return = mocker.MagicMock() + mock_environ_copy.return_value = mock_environ_copy_return + ( + mock_psutil, + mock_cpuinfo, + mock_platform, + mock_template_to_pic, + mock_template_to_pic_return, + mock_build_message, + mock_build_message_return, + mock_template_path_new, + ) = init_mocker(mocker, tmp_path) + + mock_platform.uname.return_value = platform_uname_arm + mock_cpuinfo.get_cpu_info.return_value = {} + mock_psutil.cpu_freq.return_value = {} + + async with app.test_matcher(_self_check_matcher) as ctx: + bot = create_bot(ctx) + bot: Bot = cast(Bot, bot) + raw_message = "自检" + event: GroupMessageEvent = _v11_group_message_event( + message=raw_message, + self_id=BotId.QQ_BOT, + user_id=UserId.SUPERUSER, + group_id=GroupId.GROUP_ID_LEVEL_5, + message_id=MessageId.MESSAGE_ID_3, + to_me=True, + ) + ctx.receive_event(bot=bot, event=event) + mock_template_to_pic.assert_awaited_once_with( + template_path=str((mock_template_path_new / "check").absolute()), + template_name="main.html", + templates={ + "data": { + "cpu_info": "1.0% - 0.0Ghz [1 core]", + "cpu_process": 1.0, + "ram_info": "1.0 / 1.0 GB", + "ram_process": 100.0, + "swap_info": "1.0 / 1.0 GB", + "swap_process": 100.0, + "disk_info": "1.0 / 1.0 GB", + "disk_process": 100.0, + "brand_raw": "", + "baidu": "red", + "google": "red", + "system": f"{platform_uname_arm.system} " + f"{platform_uname_arm.release}", + "version": __get_version(), + "plugin_count": len(nonebot.get_loaded_plugins()), + "nickname": BotConfig.self_nickname, + } + }, + pages={ + "viewport": {"width": 195, "height": 750}, + "base_url": f"file://{mock_template_path_new.absolute()}", + }, + wait=2, + ) + mock_subprocess_check_output.assert_has_calls( + [ + mocker.call(["lscpu"], env=mock_environ_copy_return), + mocker.call().decode(), + mocker.call().decode().splitlines(), + mocker.call().decode().splitlines().__iter__(), + mocker.call(["dmidecode", "-s", "processor-frequency"]), + mocker.call().decode(), + mocker.call().decode().split(), + mocker.call().decode().split().__getitem__(0), + mocker.call().decode().split().__getitem__().__float__(), + ] # type: ignore + ) + mock_template_to_pic.assert_awaited_once() + mock_build_message.assert_called_once_with(mock_template_to_pic_return) + mock_build_message_return.send.assert_awaited_once() + -# platform_uname_arm = platform.uname_result( -# system="Linux", -# node="zhenxun", -# release="5.15.0-1017-oracle", -# version="#22~20.04.1-Ubuntu SMP Wed Aug 24 11:13:15 UTC 2022", -# machine="aarch64", -# ) # type: ignore -# mock_subprocess_check_output = mocker.patch( -# "zhenxun.builtin_plugins.check.data_source.subprocess.check_output" -# ) -# mock_environ_copy = mocker.patch( -# "zhenxun.builtin_plugins.check.data_source.os.environ.copy" -# ) -# mock_environ_copy_return = mocker.MagicMock() -# mock_environ_copy.return_value = mock_environ_copy_return -# ( -# mock_psutil, -# mock_cpuinfo, -# mock_platform, -# mock_template_to_pic, -# mock_template_to_pic_return, -# mock_build_message, -# mock_build_message_return, -# mock_template_path_new, -# ) = init_mocker(mocker, tmp_path) -# mock_platform.uname.return_value = platform_uname_arm -# mock_cpuinfo.get_cpu_info.return_value = {} -# mock_psutil.cpu_freq.return_value = {} -# async with app.test_matcher(_matcher) as ctx: -# bot = create_bot(ctx) -# bot: Bot = cast(Bot, bot) -# raw_message = "自检" -# event: GroupMessageEvent = _v11_group_message_event( -# message=raw_message, -# self_id=BotId.QQ_BOT, -# user_id=UserId.SUPERUSER, -# group_id=GroupId.GROUP_ID_LEVEL_5, -# message_id=MessageId.MESSAGE_ID_3, -# to_me=True, -# ) -# ctx.receive_event(bot=bot, event=event) -# mock_template_to_pic.assert_awaited_once_with( -# template_path=str((mock_template_path_new / "check").absolute()), -# template_name="main.html", -# templates={ -# "data": { -# "cpu_info": "1.0% - 0.0Ghz [1 core]", -# "cpu_process": 1.0, -# "ram_info": "1.0 / 1.0 GB", -# "ram_process": 100.0, -# "swap_info": "1.0 / 1.0 GB", -# "swap_process": 100.0, -# "disk_info": "1.0 / 1.0 GB", -# "disk_process": 100.0, -# "brand_raw": "", -# "baidu": "red", -# "google": "red", -# "system": f"{platform_uname_arm.system} " -# f"{platform_uname_arm.release}", -# "version": __get_version(), -# "plugin_count": len(nonebot.get_loaded_plugins()), -# "nickname": BotConfig.self_nickname, -# } -# }, -# pages={ -# "viewport": {"width": 195, "height": 750}, -# "base_url": f"file://{mock_template_path_new.absolute()}", -# }, -# wait=2, -# ) -# mock_subprocess_check_output.assert_has_calls( -# [ -# mocker.call(["lscpu"], env=mock_environ_copy_return), -# mocker.call().decode(), -# mocker.call().decode().splitlines(), -# mocker.call().decode().splitlines().__iter__(), -# mocker.call(["dmidecode", "-s", "processor-frequency"]), -# mocker.call().decode(), -# mocker.call().decode().split(), -# mocker.call().decode().split().__getitem__(0), -# mocker.call().decode().split().__getitem__().__float__(), -# ] # type: ignore -# ) -# mock_template_to_pic.assert_awaited_once() -# mock_build_message.assert_called_once_with(mock_template_to_pic_return) -# mock_build_message_return.send.assert_awaited_once()