ended test_lib_Cog.py

This commit is contained in:
bacon
2024-03-17 02:17:07 +03:00
parent 736621c516
commit fca483e4e6
4 changed files with 31 additions and 70 deletions

2
bot.py
View File

@@ -7,7 +7,6 @@ from disnake import OptionType, Option, Localized, ApplicationCommandInteraction
from disnake.ext.commands import Bot, is_owner from disnake.ext.commands import Bot, is_owner
from dotenv import load_dotenv from dotenv import load_dotenv
from __init__ import __version__ as ver
from lib.CogsPrep import work_with_cogs, cog_list from lib.CogsPrep import work_with_cogs, cog_list
from lib.Comands import determine_prefix from lib.Comands import determine_prefix
from lib.Logger import logger from lib.Logger import logger
@@ -45,7 +44,6 @@ async def on_ready():
logger.info('Bot started') logger.info('Bot started')
logger.info(f'Disnake version {__version__}') logger.info(f'Disnake version {__version__}')
logger.info(f'We have logged in as {bot.user}') logger.info(f'We have logged in as {bot.user}')
logger.info(f'Version of bot is - v{ver}')
@bot.slash_command( @bot.slash_command(

View File

@@ -8,6 +8,8 @@ work_with_cogs: loads, reloads and unloads cogs files
""" """
from os import listdir, rename from os import listdir, rename
from disnake.ext.commands import Bot
from .Logger import logger from .Logger import logger
@@ -19,13 +21,15 @@ async def cog_list(fold: str = './cogs') -> list:
return cogs_list return cogs_list
async def work_with_cogs(what_do, bot, cog): async def work_with_cogs(what_do: str,
bot: Bot,
cog: str | list):
if isinstance(cog, str): if isinstance(cog, str):
cog = cog.split() cog = cog.split()
for _filename in cog: for _filename in cog:
if what_do == "lad": if what_do == "load":
bot.load_extension(f'cogs.{_filename}') bot.load_extension(f'cogs.{_filename}')
logger.info(f'Loaded cog {_filename}') logger.info(f'Cog {_filename} loaded')
elif what_do == 'unload': elif what_do == 'unload':
bot.unload_extension(f'cogs.{_filename}') bot.unload_extension(f'cogs.{_filename}')
logger.info(f'Cog {_filename} unloaded') logger.info(f'Cog {_filename} unloaded')
@@ -34,8 +38,11 @@ async def work_with_cogs(what_do, bot, cog):
logger.info(f'Cog {_filename} reloaded') logger.info(f'Cog {_filename} reloaded')
elif what_do == 'disable': elif what_do == 'disable':
bot.unload_extension(f'cogs.{_filename}') bot.unload_extension(f'cogs.{_filename}')
rename(f'cogs/{_filename}.py',
f'cogs/disabled/{_filename}.py')
logger.info(f'Cog {_filename} stopped and disabled') logger.info(f'Cog {_filename} stopped and disabled')
elif what_do == 'enable': elif what_do == 'enable':
rename(f'cogs/disabled/{_filename}.py', f'cogs/{_filename}.py') rename(f'cogs/disabled/{_filename}.py',
f'cogs/{_filename}.py')
bot.load_extension(f'cogs.{_filename}') bot.load_extension(f'cogs.{_filename}')
logger.info(f'Cog {_filename} started and enabled') logger.info(f'Cog {_filename} started and enabled')

View File

@@ -1,9 +1,6 @@
import tracemalloc
from disnake import Intents from disnake import Intents
from disnake.ext import commands from disnake.ext import commands
tracemalloc.start()
intents = Intents(messages=True, intents = Intents(messages=True,
message_content=True, message_content=True,

View File

@@ -1,70 +1,29 @@
import asyncio
import inspect
import os
import tracemalloc
from unittest.mock import AsyncMock, patch
import pytest import pytest
from disnake.ext import commands from disnake.ext.commands import Bot
from mock import mock
from ..lib.Logger import logger from ..lib.CogsPrep import cog_list, work_with_cogs
tracemalloc.start()
pytest_plugins = ('pytest_asyncio',)
def asyncio_run(async_func):
def wrapper(*args, **kwargs):
return asyncio.run(async_func(*args, **kwargs))
wrapper.__signature__ = inspect.signature(async_func) # without this, fixtures are not injected
return wrapper
absolute_path = os.path.dirname(__file__)
relative_path = "../cogs"
full_path = os.path.join(absolute_path, relative_path)
return_value = ['cog1', 'cog2']
bot = commands.InteractionBot()
logger = logger
@pytest.fixture(params=['cog1', 'cog2'])
def mock_cog_list(mocker):
async_mock = AsyncMock()
mocker.patch('discord_bot.lib.CogsPrep.cog_list', return_value=async_mock)
return async_mock
@pytest.fixture(params=['load',
'unload',
'reload',
'enable',
'disable'])
def mock_work_with_cogs(mocker, mock_cog_list):
mock_cog_list.return_value = return_value
result = asyncio.run(mock_cog_list(full_path))
async_mock = AsyncMock()
mocker.patch('discord_bot.lib.CogsPrep.work_with_cogs', params=async_mock)
return async_mock
@pytest.mark.asyncio @pytest.mark.asyncio
@mock.patch('discord_bot.lib.CogsPrep.cog_list')
async def test_cog_list(mock_cog_list): async def test_cog_list(mock_cog_list):
# Assuming there are two .py files in the folder with mock.patch('discord_bot.lib.CogsPrep.listdir') as MockClass:
mock_cog_list.return_value = return_value MockClass.return_value = ['cog1.py', 'cog2.py']
result = await mock_cog_list(full_path) result = await cog_list()
assert result == return_value assert result == ['cog1', 'cog2']
@patch('discord_bot.lib.CogsPrep.work_with_cogs', return_value=return_value) # @pytest.mark.skip(reason=None)
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_work_with_cogs(mock_work_with_cogs): @pytest.mark.parametrize("cog", ["cog1.py", "cog2"])
var = mock_work_with_cogs @pytest.mark.parametrize("what_do", ['load', 'unload', 'reload', 'disable', 'enable'])
result = await mock_work_with_cogs() async def test_work_with_cogs(what_do, cog):
# Check if the logger was called once with a message indicating that cog1 has been loaded mock_logger = mock.MagicMock()
assert result with mock.patch('discord_bot.lib.CogsPrep.logger.info') as mocked_logger:
mock_bot = mock.MagicMock(spec=Bot)
with mock.patch('discord_bot.lib.CogsPrep.rename') as mock_rename:
mock_rename.return_value = True
result = await work_with_cogs(what_do, mock_bot, cog)
assert len(mocked_logger.call_args_list) == 1, f"Not listed what_do {what_do}"