From 63f7247a88a29a88ff6c3152909cefafb911dace Mon Sep 17 00:00:00 2001 From: Jakub Kuczys Date: Thu, 16 Apr 2026 18:28:13 +0200 Subject: [PATCH] Drop pytest plugin from Red's package --- .github/CODEOWNERS | 1 - .github/labeler.yml | 11 -- Makefile | 2 +- pyproject.toml | 3 - redbot/pytest/__init__.py | 1 - redbot/pytest/alias.py | 13 -- redbot/pytest/cog_manager.py | 13 -- redbot/pytest/core.py | 182 ------------------ redbot/pytest/data_manager.py | 23 --- redbot/pytest/economy.py | 15 -- redbot/pytest/mod.py | 15 -- redbot/pytest/permissions.py | 11 -- redbot/pytest/rpc.py | 53 ----- tests/cogs/test_alias.py | 11 +- tests/cogs/test_economy.py | 14 +- tests/cogs/test_mod.py | 14 +- tests/conftest.py | 158 ++++++++++++++- .../core/_downloader}/.gitattributes | 0 .../_downloader}/downloader_testrepo.export | 0 .../core/_downloader}/downloader_testrepo.md | 0 .../core/_downloader/fixtures.py | 0 tests/core/_downloader/test_downloader.py | 2 +- tests/core/_downloader/test_git.py | 2 +- tests/core/_downloader/test_installable.py | 2 +- tests/core/test_cog_manager.py | 11 +- tests/core/test_data_manager.py | 19 +- tests/core/test_rpc.py | 52 ++++- tools/edit_testrepo.py | 6 +- 28 files changed, 279 insertions(+), 355 deletions(-) delete mode 100644 redbot/pytest/__init__.py delete mode 100644 redbot/pytest/alias.py delete mode 100644 redbot/pytest/cog_manager.py delete mode 100644 redbot/pytest/core.py delete mode 100644 redbot/pytest/data_manager.py delete mode 100644 redbot/pytest/economy.py delete mode 100644 redbot/pytest/mod.py delete mode 100644 redbot/pytest/permissions.py delete mode 100644 redbot/pytest/rpc.py rename {redbot/pytest => tests/core/_downloader}/.gitattributes (100%) rename {redbot/pytest => tests/core/_downloader}/downloader_testrepo.export (100%) rename {redbot/pytest => tests/core/_downloader}/downloader_testrepo.md (100%) rename redbot/pytest/downloader.py => tests/core/_downloader/fixtures.py (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 830d67f64ed..820c7d441b5 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -15,7 +15,6 @@ /redbot/cogs/trivia/data/lists/whosthatpokemon*.yaml @aikaterna # Tests -/redbot/pytest/downloader* @Jackenmen /tests/cogs/downloader/* @Jackenmen # Schemas diff --git a/.github/labeler.yml b/.github/labeler.yml index 9adf0b94d4b..54fe8cfab6a 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -14,7 +14,6 @@ # Docs - docs/cog_guides/alias.rst # Tests - - redbot/pytest/alias.py - tests/cogs/test_alias.py - docs/.resources/alias/**/* "Category: Cogs - Audio": @@ -56,7 +55,6 @@ # Docs - docs/cog_guides/economy.rst # Tests - - redbot/pytest/economy.py - tests/cogs/test_economy.py "Category: Cogs - Filter": # Source @@ -79,7 +77,6 @@ # Docs - docs/cog_guides/mod.rst # Tests - - redbot/pytest/mod.py - tests/cogs/test_mod.py "Category: Cogs - Modlog": # Source @@ -98,7 +95,6 @@ - docs/cog_guides/permissions.rst - docs/cog_permissions.rst # Tests - - redbot/pytest/permissions.py - tests/cogs/test_permissions.py "Category: Cogs - Reports": # Source @@ -175,7 +171,6 @@ - docs/framework_datamanager.rst - docs/framework_tree.rst # Tests - - redbot/pytest/data_manager.py - tests/core/test_cog_manager.py - tests/core/test_data_manager.py - tests/core/test_version.py @@ -212,8 +207,6 @@ # Source - redbot/core/_downloader/**/* # Tests - - redbot/pytest/downloader.py - - redbot/pytest/downloader_testrepo.* - tests/core/_downloader/**/* "Category: Core - Help": - redbot/core/commands/help.py @@ -240,9 +233,6 @@ - redbot/core/_sharedlibdeprecation.py - redbot/core/utils/_internal_utils.py # Tests - - redbot/pytest/__init__.py - - redbot/pytest/cog_manager.py - - redbot/pytest/core.py - tests/core/test_installation.py "Category: Core - RPC/ZMQ": # Source @@ -250,7 +240,6 @@ # Docs - docs/framework_rpc.rst # Tests - - redbot/pytest/rpc.py - tests/core/test_rpc.py - tests/rpc_test.html diff --git a/Makefile b/Makefile index 0f92df923e4..eedd18358ad 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ stylediff: # Translations gettext: - $(PYTHON) -m redgettext --command-docstrings --verbose --recursive redbot --exclude-files "redbot/pytest/**/*" + $(PYTHON) -m redgettext --command-docstrings --verbose --recursive redbot upload_translations: crowdin upload sources download_translations: diff --git a/pyproject.toml b/pyproject.toml index 512bdbc7d23..dda1f5b1050 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,9 +39,6 @@ dynamic = ["version", "requires-python", "dependencies", "optional-dependencies" redbot = "redbot.__main__:main" redbot-setup = "redbot.setup:run_cli" -[project.entry-points.pytest11] -red-discordbot = "redbot.pytest" - [tool.black] line-length = 99 required-version = '23' diff --git a/redbot/pytest/__init__.py b/redbot/pytest/__init__.py deleted file mode 100644 index bb67a43fa4e..00000000000 --- a/redbot/pytest/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .core import * diff --git a/redbot/pytest/alias.py b/redbot/pytest/alias.py deleted file mode 100644 index cff129ba55a..00000000000 --- a/redbot/pytest/alias.py +++ /dev/null @@ -1,13 +0,0 @@ -import pytest - -from redbot.cogs.alias import Alias -from redbot.core import Config - -__all__ = ["alias"] - - -@pytest.fixture() -def alias(config, monkeypatch): - with monkeypatch.context() as m: - m.setattr(Config, "get_conf", lambda *args, **kwargs: config) - return Alias(None) diff --git a/redbot/pytest/cog_manager.py b/redbot/pytest/cog_manager.py deleted file mode 100644 index 11887306108..00000000000 --- a/redbot/pytest/cog_manager.py +++ /dev/null @@ -1,13 +0,0 @@ -import pytest - -__all__ = ["cog_mgr", "default_dir"] - - -@pytest.fixture() -def cog_mgr(red): - return red._cog_mgr - - -@pytest.fixture() -def default_dir(red): - return red._main_dir diff --git a/redbot/pytest/core.py b/redbot/pytest/core.py deleted file mode 100644 index 5795052dde0..00000000000 --- a/redbot/pytest/core.py +++ /dev/null @@ -1,182 +0,0 @@ -import random -from collections import namedtuple -from pathlib import Path -import weakref - -import pytest -from redbot.core import Config -from redbot.core.bot import Red -from redbot.core import config as config_module, _drivers - -__all__ = [ - "override_data_path", - "coroutine", - "driver", - "config", - "config_fr", - "red", - "guild_factory", - "empty_guild", - "empty_channel", - "empty_member", - "empty_message", - "empty_role", - "empty_user", - "member_factory", - "newline_message", - "user_factory", - "prefix", - "ctx", -] - - -@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 driver(tmpdir_factory): - import uuid - - rand = str(uuid.uuid4()) - path = Path(str(tmpdir_factory.mktemp(rand))) - return _drivers.get_driver("PyTest", str(random.randint(1, 999999)), data_path_override=path) - - -@pytest.fixture() -def config(driver): - config_module._config_cache = weakref.WeakValueDictionary() - conf = Config(cog_name="PyTest", unique_identifier=driver.unique_cog_identifier, driver=driver) - yield conf - - -@pytest.fixture() -def config_fr(driver): - """ - Mocked config object with force_register enabled. - """ - config_module._config_cache = weakref.WeakValueDictionary() - conf = Config( - cog_name="PyTest", - unique_identifier=driver.unique_cog_identifier, - driver=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(scope="module") -def newline_message(): - mock_msg = type("", (), {})() - mock_msg.content = "!test a\nb\nc" - return mock_msg - - -@pytest.fixture(scope="module") -def prefix(): - return "!" - - -@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"]) - - Config.get_core_conf = lambda *args, **kwargs: config_fr - - red = Red(cli_flags=cli_flags) - - yield red - - -# endregion diff --git a/redbot/pytest/data_manager.py b/redbot/pytest/data_manager.py deleted file mode 100644 index 5a069674f44..00000000000 --- a/redbot/pytest/data_manager.py +++ /dev/null @@ -1,23 +0,0 @@ -import pytest - -from redbot.core import data_manager - -__all__ = ["cleanup_datamanager", "data_mgr_config", "cog_instance"] - - -@pytest.fixture(autouse=True) -def cleanup_datamanager(): - data_manager.basic_config = None - - -@pytest.fixture() -def data_mgr_config(tmpdir): - default = data_manager.basic_config_default.copy() - default["BASE_DIR"] = str(tmpdir) - return default - - -@pytest.fixture() -def cog_instance(): - thing = type("CogTest", (object,), {}) - return thing() diff --git a/redbot/pytest/economy.py b/redbot/pytest/economy.py deleted file mode 100644 index 8b20e930e8c..00000000000 --- a/redbot/pytest/economy.py +++ /dev/null @@ -1,15 +0,0 @@ -import pytest -from redbot.core import bank as bank_module - -__all__ = ["bank"] - - -@pytest.fixture() -async def bank(config, monkeypatch): - from redbot.core import Config - - with monkeypatch.context() as m: - m.setattr(Config, "get_conf", lambda *args, **kwargs: config) - # noinspection PyProtectedMember - await bank_module._init() - return bank_module diff --git a/redbot/pytest/mod.py b/redbot/pytest/mod.py deleted file mode 100644 index 7cadeba986c..00000000000 --- a/redbot/pytest/mod.py +++ /dev/null @@ -1,15 +0,0 @@ -import pytest -from redbot.core import modlog - -__all__ = ["mod"] - - -@pytest.fixture -async def mod(config, monkeypatch, red): - from redbot.core import Config - - with monkeypatch.context() as m: - m.setattr(Config, "get_conf", lambda *args, **kwargs: config) - - await modlog._init(red) - return modlog diff --git a/redbot/pytest/permissions.py b/redbot/pytest/permissions.py deleted file mode 100644 index e3a86d41d62..00000000000 --- a/redbot/pytest/permissions.py +++ /dev/null @@ -1,11 +0,0 @@ -import pytest - -from redbot.cogs.permissions import Permissions -from redbot.core import Config - - -@pytest.fixture() -def permissions(config, monkeypatch, red): - with monkeypatch.context() as m: - m.setattr(Config, "get_conf", lambda *args, **kwargs: config) - return Permissions(red) diff --git a/redbot/pytest/rpc.py b/redbot/pytest/rpc.py deleted file mode 100644 index db189e5de0e..00000000000 --- a/redbot/pytest/rpc.py +++ /dev/null @@ -1,53 +0,0 @@ -import pytest -from redbot.core._rpc import RPC, RPCMixin - -from unittest.mock import MagicMock - -__all__ = ["rpc", "rpcmixin", "cog", "existing_func", "existing_multi_func"] - - -@pytest.fixture() -async def rpc(): - rpc = RPC() - await rpc._pre_login() - return rpc - - -@pytest.fixture() -def rpcmixin(): - r = RPCMixin() - r.rpc = MagicMock(spec=RPC) - return r - - -@pytest.fixture() -def cog(): - class Cog: - async def cofunc(*args, **kwargs): - pass - - async def cofunc2(*args, **kwargs): - pass - - async def cofunc3(*args, **kwargs): - pass - - def func(*args, **kwargs): - pass - - return Cog() - - -@pytest.fixture() -def existing_func(rpc, cog): - rpc.add_method(cog.cofunc) - - return cog.cofunc - - -@pytest.fixture() -def existing_multi_func(rpc, cog): - funcs = [cog.cofunc, cog.cofunc2, cog.cofunc3] - rpc.add_multi_method(*funcs) - - return funcs diff --git a/tests/cogs/test_alias.py b/tests/cogs/test_alias.py index 97b20058240..02e0dd76e7c 100644 --- a/tests/cogs/test_alias.py +++ b/tests/cogs/test_alias.py @@ -1,5 +1,14 @@ +from redbot.cogs.alias import Alias +from redbot.core import Config + import pytest -from redbot.pytest.alias import * + + +@pytest.fixture() +def alias(config, monkeypatch): + with monkeypatch.context() as m: + m.setattr(Config, "get_conf", lambda *args, **kwargs: config) + return Alias(None) def test_is_valid_alias_name(alias): diff --git a/tests/cogs/test_economy.py b/tests/cogs/test_economy.py index e53bec9d07f..571428d47ac 100644 --- a/tests/cogs/test_economy.py +++ b/tests/cogs/test_economy.py @@ -1,5 +1,17 @@ +from redbot.core import bank as bank_module + import pytest -from redbot.pytest.economy import * + + +@pytest.fixture() +async def bank(config, monkeypatch): + from redbot.core import Config + + with monkeypatch.context() as m: + m.setattr(Config, "get_conf", lambda *args, **kwargs: config) + # noinspection PyProtectedMember + await bank_module._init() + return bank_module async def test_bank_register(bank, ctx): diff --git a/tests/cogs/test_mod.py b/tests/cogs/test_mod.py index 8a2002c78e0..9ae8c14a890 100644 --- a/tests/cogs/test_mod.py +++ b/tests/cogs/test_mod.py @@ -1,7 +1,19 @@ from collections import namedtuple + +from redbot.core import modlog + import pytest -from redbot.pytest.mod import * + +@pytest.fixture +async def mod(config, monkeypatch, red): + from redbot.core import Config + + with monkeypatch.context() as m: + m.setattr(Config, "get_conf", lambda *args, **kwargs: config) + + await modlog._init(red) + return modlog async def test_modlog_register_casetype(mod): diff --git a/tests/conftest.py b/tests/conftest.py index cb5cb7c66ee..ee97ae263b6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,10 +1,15 @@ import asyncio import os +import random +import weakref +from collections import namedtuple +from pathlib import Path import pytest from redbot import _update_event_loop_policy -from redbot.core import _drivers, data_manager +from redbot.core import Config, config as config_module, _drivers, data_manager +from redbot.core.bot import Red _update_event_loop_policy() @@ -36,3 +41,154 @@ async def _setup_driver(): await driver_cls.initialize(**storage_details) yield await driver_cls.teardown() + + +### Shared fixtures + + +# data manager/config objects +@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 driver(tmpdir_factory): + import uuid + + rand = str(uuid.uuid4()) + path = Path(str(tmpdir_factory.mktemp(rand))) + return _drivers.get_driver("PyTest", str(random.randint(1, 999999)), data_path_override=path) + + +@pytest.fixture() +def config(driver): + config_module._config_cache = weakref.WeakValueDictionary() + conf = Config(cog_name="PyTest", unique_identifier=driver.unique_cog_identifier, driver=driver) + yield conf + + +@pytest.fixture() +def config_fr(driver): + """ + Mocked config object with force_register enabled. + """ + config_module._config_cache = weakref.WeakValueDictionary() + conf = Config( + cog_name="PyTest", + unique_identifier=driver.unique_cog_identifier, + driver=driver, + force_registration=True, + ) + yield conf + + +# d.py 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.") + + +# bot/ctx objects +@pytest.fixture() +def red(config_fr): + from redbot.core._cli import parse_cli_flags + + cli_flags = parse_cli_flags(["ignore_me"]) + + Config.get_core_conf = lambda *args, **kwargs: config_fr + + red = Red(cli_flags=cli_flags) + + yield red + + +@pytest.fixture() +def ctx(empty_member, empty_channel, empty_message, red): + mock_ctx = namedtuple("Context", "author guild channel message bot") + return mock_ctx(empty_member, empty_member.guild, empty_channel, empty_message, red) + + +@pytest.fixture(scope="module") +def prefix(): + return "!" + + +# other stuff +@pytest.fixture() +def coroutine(): + async def some_coro(*args, **kwargs): + return args, kwargs + + return some_coro + + +@pytest.fixture(scope="module") +def newline_message(): + mock_msg = type("", (), {})() + mock_msg.content = "!test a\nb\nc" + return mock_msg diff --git a/redbot/pytest/.gitattributes b/tests/core/_downloader/.gitattributes similarity index 100% rename from redbot/pytest/.gitattributes rename to tests/core/_downloader/.gitattributes diff --git a/redbot/pytest/downloader_testrepo.export b/tests/core/_downloader/downloader_testrepo.export similarity index 100% rename from redbot/pytest/downloader_testrepo.export rename to tests/core/_downloader/downloader_testrepo.export diff --git a/redbot/pytest/downloader_testrepo.md b/tests/core/_downloader/downloader_testrepo.md similarity index 100% rename from redbot/pytest/downloader_testrepo.md rename to tests/core/_downloader/downloader_testrepo.md diff --git a/redbot/pytest/downloader.py b/tests/core/_downloader/fixtures.py similarity index 100% rename from redbot/pytest/downloader.py rename to tests/core/_downloader/fixtures.py diff --git a/tests/core/_downloader/test_downloader.py b/tests/core/_downloader/test_downloader.py index f8ce2b2cd0f..f20fb7be268 100644 --- a/tests/core/_downloader/test_downloader.py +++ b/tests/core/_downloader/test_downloader.py @@ -7,7 +7,7 @@ import pytest from pytest_mock import MockFixture -from redbot.pytest.downloader import * +from .fixtures import * from redbot.core._downloader.repo_manager import Installable from redbot.core._downloader.repo_manager import Candidate, ProcessFormatter, RepoManager, Repo diff --git a/tests/core/_downloader/test_git.py b/tests/core/_downloader/test_git.py index d00c5b69f12..80f29b39883 100644 --- a/tests/core/_downloader/test_git.py +++ b/tests/core/_downloader/test_git.py @@ -4,7 +4,7 @@ import pytest from redbot.core._downloader.repo_manager import ProcessFormatter, Repo -from redbot.pytest.downloader import ( +from .fixtures import ( GIT_VERSION, cloned_git_repo, git_repo, diff --git a/tests/core/_downloader/test_installable.py b/tests/core/_downloader/test_installable.py index e9106ffa2ba..89767d90680 100644 --- a/tests/core/_downloader/test_installable.py +++ b/tests/core/_downloader/test_installable.py @@ -3,7 +3,7 @@ import pytest -from redbot.pytest.downloader import * +from .fixtures import * from redbot.core._downloader.installable import Installable, InstallableType from redbot.core import VersionInfo diff --git a/tests/core/test_cog_manager.py b/tests/core/test_cog_manager.py index 2d3b132ed92..c8e1052d55e 100644 --- a/tests/core/test_cog_manager.py +++ b/tests/core/test_cog_manager.py @@ -2,10 +2,19 @@ import pytest -from redbot.pytest.cog_manager import * from redbot.core import _cog_manager +@pytest.fixture() +def cog_mgr(red): + return red._cog_mgr + + +@pytest.fixture() +def default_dir(red): + return red._main_dir + + @pytest.mark.skip async def test_ensure_cogs_in_paths(cog_mgr, default_dir): cogs_dir = default_dir / "redbot" / "cogs" diff --git a/tests/core/test_data_manager.py b/tests/core/test_data_manager.py index 4af979d8043..c5fe5eae7c5 100644 --- a/tests/core/test_data_manager.py +++ b/tests/core/test_data_manager.py @@ -3,10 +3,27 @@ import pytest -from redbot.pytest.data_manager import * from redbot.core import data_manager +@pytest.fixture(autouse=True) +def cleanup_datamanager(): + data_manager.basic_config = None + + +@pytest.fixture() +def data_mgr_config(tmpdir): + default = data_manager.basic_config_default.copy() + default["BASE_DIR"] = str(tmpdir) + return default + + +@pytest.fixture() +def cog_instance(): + thing = type("CogTest", (object,), {}) + return thing() + + def test_no_basic(cog_instance): with pytest.raises(RuntimeError): data_manager.core_data_path() diff --git a/tests/core/test_rpc.py b/tests/core/test_rpc.py index 12e3c6b5ee4..8246762f8b9 100644 --- a/tests/core/test_rpc.py +++ b/tests/core/test_rpc.py @@ -1,7 +1,55 @@ +from unittest.mock import MagicMock + +from redbot.core._rpc import RPC, RPCMixin, get_name + import pytest -from redbot.pytest.rpc import * -from redbot.core._rpc import get_name + +@pytest.fixture() +async def rpc(): + rpc = RPC() + await rpc._pre_login() + return rpc + + +@pytest.fixture() +def rpcmixin(): + r = RPCMixin() + r.rpc = MagicMock(spec=RPC) + return r + + +@pytest.fixture() +def cog(): + class Cog: + async def cofunc(*args, **kwargs): + pass + + async def cofunc2(*args, **kwargs): + pass + + async def cofunc3(*args, **kwargs): + pass + + def func(*args, **kwargs): + pass + + return Cog() + + +@pytest.fixture() +def existing_func(rpc, cog): + rpc.add_method(cog.cofunc) + + return cog.cofunc + + +@pytest.fixture() +def existing_multi_func(rpc, cog): + funcs = [cog.cofunc, cog.cofunc2, cog.cofunc3] + rpc.add_multi_method(*funcs) + + return funcs def test_get_name(cog): diff --git a/tools/edit_testrepo.py b/tools/edit_testrepo.py index 93a4b29db7c..4c3cbe242da 100644 --- a/tools/edit_testrepo.py +++ b/tools/edit_testrepo.py @@ -12,7 +12,7 @@ imports the repo from ``redbot/tests/downloader_testrepo.export`` using git's fast-import command and updates repo's working tree. edit_testrepo.py export: - It exports repo from provided directory into ``redbot/tests/downloader_testrepo.export`` + It exports repo from provided directory into ``tests/core/_downloader/downloader_testrepo.export`` using git's fast-export. To make the file more useful for developers, it's called with option that adds extra directive ``original-oid ``, which while ignored by import, might ease up creating tests without importing the repo. @@ -42,7 +42,9 @@ MAIN_DIRECTORY = Path(__file__).absolute().parent.parent -TEST_REPO_EXPORT_PTH: Path = MAIN_DIRECTORY / "redbot" / "pytest" / "downloader_testrepo.export" +TEST_REPO_EXPORT_PTH: Path = ( + MAIN_DIRECTORY / "tests" / "core" / "_downloader" / "downloader_testrepo.export" +) class ClickCustomPath(click.Path):