Files
discord_bot/tests/test_lib_Cog.py
2024-03-15 15:46:45 +03:00

71 lines
1.9 KiB
Python

import asyncio
import inspect
import os
import tracemalloc
from unittest.mock import AsyncMock, patch
import pytest
from disnake.ext import commands
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
@pytest.mark.asyncio
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
@patch('discord_bot.lib.CogsPrep.work_with_cogs', return_value=return_value)
@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