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

View File

@@ -1,70 +1,29 @@
import asyncio
import inspect
import os
import tracemalloc
from unittest.mock import AsyncMock, patch
import pytest
from disnake.ext import commands
from disnake.ext.commands import Bot
from mock import mock
from ..lib.Logger import logger
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
from ..lib.CogsPrep import cog_list, work_with_cogs
@pytest.mark.asyncio
@mock.patch('discord_bot.lib.CogsPrep.cog_list')
async def test_cog_list(mock_cog_list):
# Assuming there are two .py files in the folder
mock_cog_list.return_value = return_value
result = await mock_cog_list(full_path)
assert result == return_value
with mock.patch('discord_bot.lib.CogsPrep.listdir') as MockClass:
MockClass.return_value = ['cog1.py', 'cog2.py']
result = await cog_list()
assert result == ['cog1', 'cog2']
@patch('discord_bot.lib.CogsPrep.work_with_cogs', return_value=return_value)
# @pytest.mark.skip(reason=None)
@pytest.mark.asyncio
async def test_work_with_cogs(mock_work_with_cogs):
var = mock_work_with_cogs
result = await mock_work_with_cogs()
# Check if the logger was called once with a message indicating that cog1 has been loaded
assert result
@pytest.mark.parametrize("cog", ["cog1.py", "cog2"])
@pytest.mark.parametrize("what_do", ['load', 'unload', 'reload', 'disable', 'enable'])
async def test_work_with_cogs(what_do, cog):
mock_logger = mock.MagicMock()
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}"