added base tests

This commit is contained in:
bacon
2024-03-15 15:46:45 +03:00
parent eca1f01c16
commit 736621c516
7 changed files with 126 additions and 9 deletions

View File

@@ -1,8 +1,10 @@
import os import os
import disnake import disnake
import psutil import psutil
from disnake import ApplicationCommandInteraction
from disnake.ext import commands from disnake.ext import commands
from __init__ import version_info as ver from __init__ import version_info as ver
from lib.Comands import determine_prefix from lib.Comands import determine_prefix
from lib.Logger import logger from lib.Logger import logger
@@ -18,7 +20,7 @@ class BotInfo(commands.Cog, name='Bot Info'):
@commands.slash_command(name="info_bot", @commands.slash_command(name="info_bot",
description='Shows general info about bot') # this is for making a command description='Shows general info about bot') # this is for making a command
async def info_bot(self, inter: disnake.ApplicationCommandInteraction): async def info_bot(self, inter: ApplicationCommandInteraction):
_pid = os.getpid() _pid = os.getpid()
_process = psutil.Process(_pid) _process = psutil.Process(_pid)
emb = disnake.Embed( emb = disnake.Embed(

View File

@@ -7,14 +7,11 @@ work_with_cogs: loads, reloads and unloads cogs files
""" """
from os import listdir, rename from os import listdir, rename
from typing import List
from disnake.ext import commands
from .Logger import logger from .Logger import logger
async def cog_list(fold: str = './cogs') -> List[str]: async def cog_list(fold: str = './cogs') -> list:
cogs_list = [] cogs_list = []
for _filename in listdir(fold): for _filename in listdir(fold):
if _filename.endswith('.py'): if _filename.endswith('.py'):
@@ -22,11 +19,11 @@ async def cog_list(fold: str = './cogs') -> List[str]:
return cogs_list return cogs_list
async def work_with_cogs(what_do, bot: commands.Bot, cog): async def work_with_cogs(what_do, bot, cog):
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 == "load": if what_do == "lad":
bot.load_extension(f'cogs.{_filename}') bot.load_extension(f'cogs.{_filename}')
logger.info(f'Loaded cog {_filename}') logger.info(f'Loaded cog {_filename}')
elif what_do == 'unload': elif what_do == 'unload':
@@ -37,7 +34,6 @@ async def work_with_cogs(what_do, bot: commands.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')

View File

@@ -2,6 +2,8 @@
lib.Commands lib.Commands
~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~
Some prepare for commands Some prepare for commands
""" """
from json import load, decoder, dump, JSONDecodeError from json import load, decoder, dump, JSONDecodeError
from os import getenv from os import getenv

View File

@@ -2,3 +2,5 @@ disnake[audio]
psutil psutil
python-dotenv python-dotenv
yandex-music yandex-music
pytest
pytest-asyncio

0
tests/__init__.py Normal file
View File

45
tests/test_bot.py Normal file
View File

@@ -0,0 +1,45 @@
import tracemalloc
from disnake import Intents
from disnake.ext import commands
tracemalloc.start()
intents = Intents(messages=True,
message_content=True,
)
class Cog(commands.Cog):
@commands.command()
async def my_cmd(self, ctx):
pass
class CogTwo(commands.Cog):
async def bot_check(self, ctx) -> bool:
pass
class CogThree(commands.Cog):
async def bot_check_once(self, ctx) -> bool:
pass
class CogFour(commands.Cog):
async def bot_slash_command_check(self, ctx) -> bool:
pass
class CogFive(commands.Cog):
async def can_run(self, ctx) -> bool:
pass
def test_bot():
bot = commands.Bot(command_prefix='$', intents=intents)
bot.add_cog(Cog())
bot.add_cog(CogTwo())
bot.add_cog(CogThree())
bot.add_cog(CogFour())
bot.add_cog(CogFive())

70
tests/test_lib_Cog.py Normal file
View File

@@ -0,0 +1,70 @@
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