Source code for distest.TestInterface

import enum
import discord
from typing import Optional


class TestResult(enum.Enum):
    """ Enum representing the result of running a test case """

    UNRUN = 0
    SUCCESS = 1
    FAILED = 2


SPECIAL_TEST_NAMES = {"all", "unrun", "failed"}


[docs]class Test: """ Holds data about a specific test. :param str name: The name of the test, checks this against the valid test names :param function func: The function in the tester bot that makes up this test :param bool needs_human: Weather or not this test will require human interaction to complete :raises: ValueError """ def __init__(self, name, func, needs_human=False): if name in SPECIAL_TEST_NAMES: raise ValueError("{} is not a valid test name".format(name)) self.name = name self.func = func self.last_run = 0 self.result = TestResult.UNRUN self.needs_human = needs_human
[docs]class TestInterface: """ All the tests, and some supporting functions. Tests are designed to be run by the tester and mixed together in order to actually test the bot. .. note:: In addition to the tests failing due to their own reasons, all tests will also fail if they timeout. This period is specified when the bot is run. .. note:: Some functions (``send_message`` and ``edit_message``) are helper functions rather than tests and serve to bring some of the functionality of the discord library onto the same level as the tests. .. note:: ``assert_reply_*`` tests will send a message with the passed content, while ``assert_message_*`` tests require a ``Message`` to be passed to them. This allows for more flexibility when you need it and an easier option when you don't. :param DiscordCliInterface client: The discord client of the tester. :param discord.TextChannel channel: The discord channel in which to run the tests. :param discord.Member target: The bot we're testing. """ def __init__(self, client, channel, target): self.client = client self.channel: discord.TextChannel = channel self.target: discord.Member = target self.voice_client: Optional[discord.VoiceClient] = None self.voice_channel: Optional[discord.VoiceChannel] = None # Imported Methods from ._helpers import send_message, _check_message, edit_message from ._voice import connect, disconnect from ._oddballs import ask_human, ensure_silence from ._reaction import assert_reaction_equals from ._message import ( assert_message_equals, assert_message_contains, assert_message_has_image, assert_message_matches, ) from ._reply import ( assert_reply_equals, assert_reply_contains, assert_reply_embed_equals, assert_reply_embed_regex, assert_reply_matches, assert_reply_has_image, get_delayed_reply, ) from ._embeds import ( assert_embed_equals, assert_embed_regex, ) from ._wait_for import ( wait_for_message, wait_for_reaction, wait_for_reply, wait_for_event, wait_for_message_in_channel, ) from ._guild_channel import ( assert_guild_channel_created, assert_guild_channel_deleted, # assert_guild_channel_pin_content_equals, # assert_guild_channel_unpin_content_equals, ) edit_message = staticmethod(edit_message) assert_message_equals = staticmethod(assert_message_equals) assert_message_contains = staticmethod(assert_message_contains) assert_message_has_image = staticmethod(assert_message_has_image) assert_message_matches = staticmethod(assert_message_matches) assert_embed_equals = staticmethod(assert_embed_equals) assert_embed_regex = staticmethod(assert_embed_regex)