You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
3.0 KiB

from unittest import TestCase
from disco.client import ClientConfig, Client
from disco.bot.bot import Bot
from disco.bot.command import Command
class Object(object):
pass
class MockBot(Bot):
@property
def commands(self):
return getattr(self, '_commands', [])
class TestBot(TestCase):
def setUp(self):
self.client = Client(ClientConfig(
{'config': 'TEST_TOKEN'}
))
self.bot = MockBot(self.client)
def test_command_abbreviation(self):
groups = ['config', 'copy', 'copez', 'copypasta']
result = self.bot.compute_group_abbrev(groups)
self.assertDictEqual(result, {
'config': 'con',
'copypasta': 'copy',
'copez': 'cope',
})
self.assertDictEqual(self.bot.compute_group_abbrev(['test']), {
'test': 't',
})
def test_command_abbreivation_conflicting(self):
groups = ['cat', 'cap', 'caz', 'cas']
result = self.bot.compute_group_abbrev(groups)
self.assertDictEqual(result, {})
def test_many_commands(self):
self.bot._commands = [
Command(None, None, 'test{}'.format(i), '<test:str>')
for i in range(1000)
]
self.bot.compute_command_matches_re()
match = self.bot.command_matches_re.match('test5 123')
self.assertNotEqual(match, None)
match = self.bot._commands[0].compiled_regex.match('test0 123 456')
self.assertEqual(match.group(1).strip(), 'test0')
self.assertEqual(match.group(2).strip(), '123 456')
def test_command_grouping_greadyness(self):
plugin = Object()
plugin.bot = self.bot
self.bot._commands = [
Command(plugin, None, 'a', group='test'),
Command(plugin, None, 'b', group='test')
]
self.bot.recompute()
self.assertNotEqual(self.bot.command_matches_re.match('test a'), None)
self.assertNotEqual(self.bot.command_matches_re.match('te a'), None)
self.assertNotEqual(self.bot.command_matches_re.match('t b'), None)
self.assertEqual(self.bot.command_matches_re.match('testing b'), None)
self.assertEqual(self.bot.command_matches_re.match('testlmao a'), None)
def test_group_and_command(self):
plugin = Object()
plugin.bot = self.bot
self.bot._commands = [
Command(plugin, None, 'test'),
Command(plugin, None, 'a', group='test'),
Command(plugin, None, 'b', group='test'),
]
self.bot.recompute()
msg = Object()
msg.content = '!test a'
commands = list(self.bot.get_commands_for_message(False, None, '!', msg))
self.assertEqual(commands[0][0], self.bot._commands[1])
self.assertEqual(commands[1][0], self.bot._commands[0])
msg.content = '!test'
commands = list(self.bot.get_commands_for_message(False, None, '!', msg))
self.assertEqual(commands[0][0], self.bot._commands[0])