mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 11:18:54 -05:00
* Dependency update discord.py==1.0.1 websockets<7 [style] black==19.3b0 [Docs] jinja==2.10.1 urllib3==1.24.2 Changes related to breaking changes from discord.py have also been made to match As of this commit, help formatter is back to discord.py's default
185 lines
3.9 KiB
Python
185 lines
3.9 KiB
Python
import random
|
|
from collections import namedtuple
|
|
from pathlib import Path
|
|
import weakref
|
|
|
|
import pytest
|
|
from _pytest.monkeypatch import MonkeyPatch
|
|
from redbot.core import Config
|
|
from redbot.core.bot import Red
|
|
from redbot.core import config as config_module
|
|
|
|
from redbot.core.drivers import red_json
|
|
|
|
__all__ = [
|
|
"monkeysession",
|
|
"override_data_path",
|
|
"coroutine",
|
|
"json_driver",
|
|
"config",
|
|
"config_fr",
|
|
"red",
|
|
"guild_factory",
|
|
"empty_guild",
|
|
"empty_channel",
|
|
"empty_member",
|
|
"empty_message",
|
|
"empty_role",
|
|
"empty_user",
|
|
"member_factory",
|
|
"user_factory",
|
|
"ctx",
|
|
]
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def monkeysession(request):
|
|
mpatch = MonkeyPatch()
|
|
yield mpatch
|
|
mpatch.undo()
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def override_data_path(tmpdir):
|
|
from redbot.core import data_manager
|
|
|
|
data_manager.basic_config = data_manager.basic_config_default
|
|
data_manager.basic_config["DATA_PATH"] = str(tmpdir)
|
|
|
|
|
|
@pytest.fixture()
|
|
def coroutine():
|
|
async def some_coro(*args, **kwargs):
|
|
return args, kwargs
|
|
|
|
return some_coro
|
|
|
|
|
|
@pytest.fixture()
|
|
def json_driver(tmpdir_factory):
|
|
import uuid
|
|
|
|
rand = str(uuid.uuid4())
|
|
path = Path(str(tmpdir_factory.mktemp(rand)))
|
|
driver = red_json.JSON("PyTest", identifier=str(uuid.uuid4()), data_path_override=path)
|
|
return driver
|
|
|
|
|
|
@pytest.fixture()
|
|
def config(json_driver):
|
|
config_module._config_cache = weakref.WeakValueDictionary()
|
|
conf = Config(
|
|
cog_name="PyTest", unique_identifier=json_driver.unique_cog_identifier, driver=json_driver
|
|
)
|
|
yield conf
|
|
|
|
|
|
@pytest.fixture()
|
|
def config_fr(json_driver):
|
|
"""
|
|
Mocked config object with force_register enabled.
|
|
"""
|
|
config_module._config_cache = weakref.WeakValueDictionary()
|
|
conf = Config(
|
|
cog_name="PyTest",
|
|
unique_identifier=json_driver.unique_cog_identifier,
|
|
driver=json_driver,
|
|
force_registration=True,
|
|
)
|
|
yield conf
|
|
|
|
|
|
# region Dpy Mocks
|
|
@pytest.fixture()
|
|
def guild_factory():
|
|
mock_guild = namedtuple("Guild", "id members")
|
|
|
|
class GuildFactory:
|
|
def get(self):
|
|
return mock_guild(random.randint(1, 999999999), [])
|
|
|
|
return GuildFactory()
|
|
|
|
|
|
@pytest.fixture()
|
|
def empty_guild(guild_factory):
|
|
return guild_factory.get()
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def empty_channel():
|
|
mock_channel = namedtuple("Channel", "id")
|
|
return mock_channel(random.randint(1, 999999999))
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def empty_role():
|
|
mock_role = namedtuple("Role", "id")
|
|
return mock_role(random.randint(1, 999999999))
|
|
|
|
|
|
@pytest.fixture()
|
|
def member_factory(guild_factory):
|
|
mock_member = namedtuple("Member", "id guild display_name")
|
|
|
|
class MemberFactory:
|
|
def get(self):
|
|
return mock_member(random.randint(1, 999999999), guild_factory.get(), "Testing_Name")
|
|
|
|
return MemberFactory()
|
|
|
|
|
|
@pytest.fixture()
|
|
def empty_member(member_factory):
|
|
return member_factory.get()
|
|
|
|
|
|
@pytest.fixture()
|
|
def user_factory():
|
|
mock_user = namedtuple("User", "id")
|
|
|
|
class UserFactory:
|
|
def get(self):
|
|
return mock_user(random.randint(1, 999999999))
|
|
|
|
return UserFactory()
|
|
|
|
|
|
@pytest.fixture()
|
|
def empty_user(user_factory):
|
|
return user_factory.get()
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def empty_message():
|
|
mock_msg = namedtuple("Message", "content")
|
|
return mock_msg("No content.")
|
|
|
|
|
|
@pytest.fixture()
|
|
def ctx(empty_member, empty_channel, red):
|
|
mock_ctx = namedtuple("Context", "author guild channel message bot")
|
|
return mock_ctx(empty_member, empty_member.guild, empty_channel, empty_message, red)
|
|
|
|
|
|
# endregion
|
|
|
|
|
|
# region Red Mock
|
|
@pytest.fixture()
|
|
def red(config_fr):
|
|
from redbot.core.cli import parse_cli_flags
|
|
|
|
cli_flags = parse_cli_flags(["ignore_me"])
|
|
|
|
description = "Red v3 - Alpha"
|
|
|
|
Config.get_core_conf = lambda *args, **kwargs: config_fr
|
|
|
|
red = Red(cli_flags=cli_flags, description=description, dm_help=None)
|
|
|
|
yield red
|
|
|
|
|
|
# endregion
|