More unit tests
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
from unittest import TestCase, skip
|
||||
from unittest.mock import Mock, MagicMock, AsyncMock
|
||||
from tests.utils import AsyncTestCase
|
||||
|
||||
import discord
|
||||
from datetime import datetime
|
||||
from miniscord._bot import Bot
|
||||
|
||||
|
||||
class TestInit(TestCase):
|
||||
def test_normal(self):
|
||||
discord.Client = Mock()
|
||||
bot = Bot("app_name", "version")
|
||||
self.assertEqual("app_name", bot.app_name)
|
||||
self.assertEqual("version", bot.version)
|
||||
self.assertIsNone(bot.alias)
|
||||
discord.Client.assert_called_once()
|
||||
self.assertEqual(2, len(bot._Bot__commands))
|
||||
self.assertEqual(2, len(bot.games))
|
||||
|
||||
def test_alias(self):
|
||||
discord.Client = Mock()
|
||||
bot = Bot("app_name", "version", alias="alias")
|
||||
self.assertEqual("app_name", bot.app_name)
|
||||
self.assertEqual("version", bot.version)
|
||||
self.assertEqual("alias", bot.alias)
|
||||
discord.Client.assert_called_once()
|
||||
self.assertEqual(2, len(bot._Bot__commands))
|
||||
self.assertEqual(3, len(bot.games))
|
||||
|
||||
|
||||
class TestInfo(AsyncTestCase):
|
||||
def test(self):
|
||||
discord.Client = Mock()
|
||||
bot = Bot("app_name", "version")
|
||||
message = AsyncMock()
|
||||
t0 = datetime.now()
|
||||
bot._Bot__t0 = t0
|
||||
bot.client.guilds = [None, None, None]
|
||||
self._await(bot.info(None, message, "info"))
|
||||
message.channel.send.assert_awaited_once_with(
|
||||
f"```\n"
|
||||
f"app_name vversion\n"
|
||||
f"* Started at {t0:%Y-%m-%d %H:%M}\n"
|
||||
f"* Connected to 3 guilds\n"
|
||||
f"```"
|
||||
)
|
||||
|
||||
|
||||
class TestHelp(AsyncTestCase):
|
||||
def test_list_minimal(self):
|
||||
discord.Client = Mock()
|
||||
bot = Bot("app_name", "version")
|
||||
message = AsyncMock()
|
||||
self._await(bot.help(None, message, "help"))
|
||||
message.channel.send.assert_awaited_once_with(
|
||||
f"```\n"
|
||||
f"List of available commands:\n"
|
||||
f"* info: show description\n"
|
||||
f"* help: show this help\n"
|
||||
f"```"
|
||||
)
|
||||
|
||||
def test_list_alias(self):
|
||||
discord.Client = Mock()
|
||||
bot = Bot("app_name", "version", alias="¡")
|
||||
message = AsyncMock()
|
||||
self._await(bot.help(None, message, "help"))
|
||||
message.channel.send.assert_awaited_once_with(
|
||||
f"```\n"
|
||||
f"List of available commands:\n"
|
||||
f"* ¡info: show description\n"
|
||||
f"* ¡help: show this help\n"
|
||||
f"```"
|
||||
)
|
||||
|
||||
def test_list_functions(self):
|
||||
discord.Client = Mock()
|
||||
bot = Bot("app_name", "version")
|
||||
bot.register_command("", None, "test1: desc1", None)
|
||||
bot.register_command("", None, "test2: desc2", None)
|
||||
message = AsyncMock()
|
||||
self._await(bot.help(None, message, "help"))
|
||||
message.channel.send.assert_awaited_once_with(
|
||||
f"```\n"
|
||||
f"List of available commands:\n"
|
||||
f"* test2: desc2\n"
|
||||
f"* test1: desc1\n"
|
||||
f"* info: show description\n"
|
||||
f"* help: show this help\n"
|
||||
f"```"
|
||||
)
|
||||
|
||||
def test_long(self):
|
||||
discord.Client = Mock()
|
||||
bot = Bot("app_name", "version")
|
||||
bot.register_command("test1", None, None, "long desc")
|
||||
message = AsyncMock()
|
||||
self._await(bot.help(None, message, "help", "test1"))
|
||||
message.channel.send.assert_awaited_once_with("long desc")
|
||||
|
||||
def test_long_regex(self):
|
||||
discord.Client = Mock()
|
||||
bot = Bot("app_name", "version")
|
||||
bot.register_command("test", None, None, "desc1")
|
||||
bot.register_command("t.*", None, None, "desc2")
|
||||
message = AsyncMock()
|
||||
self._await(bot.help(None, message, "help", "test"))
|
||||
message.channel.send.assert_awaited_once_with("desc2")
|
||||
|
||||
|
||||
class TestRegisterCommand(TestCase):
|
||||
@skip
|
||||
def test_todo(self):
|
||||
self.fail("not implemented")
|
||||
|
||||
|
||||
class TestOnMessage(AsyncTestCase):
|
||||
@skip
|
||||
def test_todo(self):
|
||||
self.fail("not implemented")
|
||||
|
||||
|
||||
class TestOnReady(AsyncTestCase):
|
||||
@skip
|
||||
def test_todo(self):
|
||||
self.fail("not implemented")
|
||||
|
||||
|
||||
class TestOnGuildJoin(AsyncTestCase):
|
||||
@skip
|
||||
def test_todo(self):
|
||||
self.fail("not implemented")
|
||||
|
||||
|
||||
class TestOnGuildRemove(AsyncTestCase):
|
||||
@skip
|
||||
def test_todo(self):
|
||||
self.fail("not implemented")
|
||||
@@ -1,47 +1,41 @@
|
||||
from unittest import TestCase
|
||||
import asyncio
|
||||
from unittest.mock import Mock, AsyncMock
|
||||
from tests.utils import AsyncTestCase
|
||||
|
||||
import discord
|
||||
from miniscord._discord_utils import delete_message, message_id
|
||||
|
||||
|
||||
class TestDeleteMessage(TestCase):
|
||||
def setUp(self):
|
||||
self.loop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(None)
|
||||
|
||||
def tearDown(self):
|
||||
self.loop.close()
|
||||
|
||||
class TestDeleteMessage(AsyncTestCase):
|
||||
def test_success(self):
|
||||
mock = AsyncMock()
|
||||
self.assertTrue(self.loop.run_until_complete(delete_message(mock)))
|
||||
mock.delete.assert_awaited_once()
|
||||
message = AsyncMock()
|
||||
self.assertTrue(self._await(delete_message(message)))
|
||||
message.delete.assert_awaited_once()
|
||||
|
||||
def test_forbidden(self):
|
||||
mock = AsyncMock()
|
||||
mock.delete.side_effect = discord.Forbidden(Mock(), "")
|
||||
self.assertFalse(self.loop.run_until_complete(delete_message(mock)))
|
||||
mock.delete.assert_awaited_once()
|
||||
message = AsyncMock()
|
||||
message.delete.side_effect = discord.Forbidden(Mock(), "")
|
||||
self.assertFalse(self._await(delete_message(message)))
|
||||
message.delete.assert_awaited_once()
|
||||
|
||||
def test_not_found(self):
|
||||
mock = AsyncMock()
|
||||
mock.delete.side_effect = discord.NotFound(Mock(), "")
|
||||
self.assertFalse(self.loop.run_until_complete(delete_message(mock)))
|
||||
mock.delete.assert_awaited_once()
|
||||
message = AsyncMock()
|
||||
message.delete.side_effect = discord.NotFound(Mock(), "")
|
||||
self.assertFalse(self._await(delete_message(message)))
|
||||
message.delete.assert_awaited_once()
|
||||
|
||||
|
||||
class TestMessageId(TestCase):
|
||||
def test_direct(self):
|
||||
mock = Mock()
|
||||
mock.channel.type = discord.ChannelType.private
|
||||
mock.author.id = "TEST"
|
||||
self.assertEqual("TEST", message_id(mock))
|
||||
message = Mock()
|
||||
message.channel.type = discord.ChannelType.private
|
||||
message.author.id = "TEST"
|
||||
self.assertEqual("TEST", message_id(message))
|
||||
|
||||
def test_not_direct(self):
|
||||
mock = Mock()
|
||||
mock.channel.type = discord.ChannelType.text
|
||||
mock.guild.id = "TEST1"
|
||||
mock.channel.id = "TEST2"
|
||||
mock.author.id = "TEST3"
|
||||
self.assertEqual("TEST1/TEST2/TEST3", message_id(mock))
|
||||
message = Mock()
|
||||
message.channel.type = discord.ChannelType.text
|
||||
message.guild.id = "TEST1"
|
||||
message.channel.id = "TEST2"
|
||||
message.author.id = "TEST3"
|
||||
self.assertEqual("TEST1/TEST2/TEST3", message_id(message))
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
from unittest import TestCase
|
||||
|
||||
from miniscord._utils import sanitize_input, parse_arguments
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
from unittest import TestCase
|
||||
import asyncio
|
||||
|
||||
|
||||
class AsyncTestCase(TestCase):
|
||||
def setUp(self):
|
||||
self.loop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(None)
|
||||
|
||||
def tearDown(self):
|
||||
self.loop.close()
|
||||
|
||||
def _await(self, fn):
|
||||
return self.loop.run_until_complete(fn)
|
||||
Reference in New Issue
Block a user