[Core] Replaced JsonDB with Config (#770)

This commit is contained in:
Will
2017-05-27 22:28:59 -04:00
committed by Twentysix
parent a8745297dc
commit 3988fbbc09
23 changed files with 1298 additions and 380 deletions

0
tests/__init__.py Normal file
View File

101
tests/conftest.py Normal file
View File

@@ -0,0 +1,101 @@
from collections import namedtuple
from pathlib import Path
import pytest
import random
from core.bot import Red
from core.drivers import red_json
from core import Config
@pytest.fixture(scope="module")
def json_driver(tmpdir_factory):
driver = red_json.JSON(
"PyTest",
data_path_override=Path(str(tmpdir_factory.getbasetemp()))
)
return driver
@pytest.fixture(scope="module")
def config(json_driver):
return Config(
cog_name="PyTest",
unique_identifier=0,
driver_spawn=json_driver)
@pytest.fixture(scope="module")
def config_fr(json_driver):
"""
Mocked config object with force_register enabled.
"""
return Config(
cog_name="PyTest",
unique_identifier=0,
driver_spawn=json_driver,
force_registration=True
)
#region Dpy Mocks
@pytest.fixture(scope="module")
def empty_guild():
mock_guild = namedtuple("Guild", "id members")
return mock_guild(random.randint(1, 999999999), [])
@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(scope="module")
def empty_member(empty_guild):
mock_member = namedtuple("Member", "id guild")
return mock_member(random.randint(1, 999999999), empty_guild)
@pytest.fixture(scope="module")
def empty_user():
mock_user = namedtuple("User", "id")
return mock_user(random.randint(1, 999999999))
@pytest.fixture(scope="module")
def empty_message():
mock_msg = namedtuple("Message", "content")
return mock_msg("No content.")
@pytest.fixture(scope="module")
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(monkeypatch, config_fr, event_loop):
from core.cli import parse_cli_flags
cli_flags = parse_cli_flags()
description = "Red v3 - Alpha"
monkeypatch.setattr("core.config.Config.get_core_conf",
lambda *args, **kwargs: config_fr)
red = Red(cli_flags, description=description, pm_help=None,
loop=event_loop)
return red
#endregion

0
tests/core/__init__.py Normal file
View File

147
tests/core/test_config.py Normal file
View File

@@ -0,0 +1,147 @@
import pytest
#region Register Tests
def test_config_register_global(config):
config.register_global(enabled=False)
assert config.defaults["GLOBAL"]["enabled"] is False
assert config.enabled() is False
def test_config_register_global_badvalues(config):
with pytest.raises(RuntimeError):
config.register_global(**{"invalid var name": True})
def test_config_register_guild(config, empty_guild):
config.register_guild(enabled=False, some_list=[], some_dict={})
assert config.defaults["GUILD"]["enabled"] is False
assert config.defaults["GUILD"]["some_list"] == []
assert config.defaults["GUILD"]["some_dict"] == {}
assert config.guild(empty_guild).enabled() is False
assert config.guild(empty_guild).some_list() == []
assert config.guild(empty_guild).some_dict() == {}
def test_config_register_channel(config, empty_channel):
config.register_channel(enabled=False)
assert config.defaults["CHANNEL"]["enabled"] is False
assert config.channel(empty_channel).enabled() is False
def test_config_register_role(config, empty_role):
config.register_role(enabled=False)
assert config.defaults["ROLE"]["enabled"] is False
assert config.role(empty_role).enabled() is False
def test_config_register_member(config, empty_member):
config.register_member(some_number=-1)
assert config.defaults["MEMBER"]["some_number"] == -1
assert config.member(empty_member).some_number() == -1
def test_config_register_user(config, empty_user):
config.register_user(some_value=None)
assert config.defaults["USER"]["some_value"] is None
assert config.user(empty_user).some_value() is None
def test_config_force_register_global(config_fr):
with pytest.raises(AttributeError):
config_fr.enabled()
config_fr.register_global(enabled=True)
assert config_fr.enabled() is True
#endregion
#region Default Value Overrides
def test_global_default_override(config):
assert config.enabled(True) is True
assert config.get("enabled") is None
assert config.get("enabled", default=True) is True
def test_global_default_nofr(config):
assert config.nofr() is None
assert config.nofr(True) is True
assert config.get("nofr") is None
assert config.get("nofr", default=True) is True
def test_guild_default_override(config, empty_guild):
assert config.guild(empty_guild).enabled(True) is True
assert config.guild(empty_guild).get("enabled") is None
assert config.guild(empty_guild).get("enabled", default=True) is True
def test_channel_default_override(config, empty_channel):
assert config.channel(empty_channel).enabled(True) is True
assert config.channel(empty_channel).get("enabled") is None
assert config.channel(empty_channel).get("enabled", default=True) is True
def test_role_default_override(config, empty_role):
assert config.role(empty_role).enabled(True) is True
assert config.role(empty_role).get("enabled") is None
assert config.role(empty_role).get("enabled", default=True) is True
def test_member_default_override(config, empty_member):
assert config.member(empty_member).enabled(True) is True
assert config.member(empty_member).get("enabled") is None
assert config.member(empty_member).get("enabled", default=True) is True
def test_user_default_override(config, empty_user):
assert config.user(empty_user).some_value(True) is True
assert config.user(empty_user).get("some_value") is None
assert config.user(empty_user).get("some_value", default=True) is True
#endregion
#region Setting Values
@pytest.mark.asyncio
async def test_set_global(config):
await config.set("enabled", True)
assert config.enabled() is True
@pytest.mark.asyncio
async def test_set_global_badkey(config):
with pytest.raises(RuntimeError):
await config.set("this is a bad key", True)
@pytest.mark.asyncio
async def test_set_global_invalidkey(config):
with pytest.raises(KeyError):
await config.set("uuid", True)
@pytest.mark.asyncio
async def test_set_guild(config, empty_guild):
await config.guild(empty_guild).set("enabled", True)
assert config.guild(empty_guild).enabled() is True
curr_list = config.guild(empty_guild).some_list([1, 2, 3])
assert curr_list == [1, 2, 3]
curr_list.append(4)
await config.guild(empty_guild).set("some_list", curr_list)
assert config.guild(empty_guild).some_list() == curr_list
@pytest.mark.asyncio
async def test_set_channel(config, empty_channel):
await config.channel(empty_channel).set("enabled", True)
assert config.channel(empty_channel).enabled() is True
@pytest.mark.asyncio
async def test_set_channel_no_register(config, empty_channel):
await config.channel(empty_channel).set("no_register", True)
assert config.channel(empty_channel).no_register() is True
#endregion

View File

@@ -0,0 +1,6 @@
import pytest
@pytest.mark.asyncio
async def test_can_init_bot(red):
assert red is not None