added base tests
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
0
tests/__init__.py
Normal file
45
tests/test_bot.py
Normal file
45
tests/test_bot.py
Normal 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
70
tests/test_lib_Cog.py
Normal 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
|
||||||
Reference in New Issue
Block a user