def setUp(self):
     self.cmd_handler = CommandHandler()
class CommandHandlerTest(unittest.TestCase):

    def setUp(self):
        self.cmd_handler = CommandHandler()

    def tearDown(self):
        self.cmd_handler = None

    def testHandlerRegistersCommandsWithSingleCommand(self):
        self.cmd_handler.register_owner('testbot')
        self.cmd_handler.register_delimiter('!')
        self.cmd_handler.register(name="test", obj=self, func="sampleFunc", description="this is a test", accepts_args=True, aliases=["t"])

        registered_command_list = self.cmd_handler.registered_commands()
        expected_command_list = ['!testbot test[t] - this is a test']
        self.assertEqual(registered_command_list, expected_command_list)

    def testHandlerRegistersCommandsWithOptionalArguments(self):
        self.cmd_handler.register_owner('testbot')
        self.cmd_handler.register_delimiter('!')
        self.cmd_handler.register("test", self, "sampleFunc", accepts_args=True)

        msg = Mock(Body="!testbot test this is a test")
        function_return = self.cmd_handler.handle(msg, 200)

        self.assertEqual(function_return, "this is a test")

    def testHandlerCanParseMessages(self):
        self.cmd_handler.register_owner('testbot')
        self.cmd_handler.register_delimiter('!')
        self.cmd_handler.register(name="test", obj=self, func="sampleFunc", description="this is a test", accepts_args=True, aliases=["t"])

        msg = Mock(Body="!testbot test this is a test")
        cmd, argvals = self.cmd_handler.extract_command_args(msg)

        self.assertEqual(cmd, "test")
        self.assertEqual(argvals, "this is a test")

    def testHandlerCallsRegisteredFunctions(self):
        self.cmd_handler.register_owner('testbot')
        self.cmd_handler.register_delimiter('!')
        self.cmd_handler.register(name="test", obj=self, func="sampleFunc", description="this is a test", accepts_args=True, aliases=["t"])

        msg = Mock(Body="!testbot test this is a test")
        function_return = self.cmd_handler.handle(msg, 200)

        self.assertEqual(function_return, "this is a test")

    def testHandlerCallsRegisteredCommandAliases(self):
        self.cmd_handler.register_owner('testbot')
        self.cmd_handler.register_delimiter('!')
        self.cmd_handler.register(name="test", obj=self, func="sampleFunc", description="this is a test", accepts_args=True, aliases=["t"])

        msg = Mock(Body="!testbot t this is a test")
        function_return = self.cmd_handler.handle(msg, 200)

        self.assertEqual(function_return, "this is a test")

    # Functions for testing commands callback functionality
    def sampleFunc(self, args):
        return args
Exemple #3
0
class SkypeBot(object):
    __metaclass__ = ABCMeta

    """ Abstract Base Class to define the interactions of a SkypeBot

    Args:
        name (string, optional): Name given to the SkypeBot
    """
    def __init__(self, name="Skype Bot"):
        self.command_handler = CommandHandler()
        self.skype = Skype(Events=self)
        self.skype.FriendlyName = name

    def MessageStatus(self, msg, status):
        """ Event handler for sending messages

        Args:
            msg (Skype4Py.SmsMessage): Skype Message
            status (int): status code
        """
        if status == cmsReceived:
            msg.MarkAsSeen()
            user = msg.FromHandle
            reply_with = self.command_handler.handle(msg, status, user)

            if reply_with:
                self.__reply(msg, reply_with)

    def __reply(self, msg_client, msg):
        """ [Internal] Send message to chat via Skype Msg Module

        Args:
            msg_client (Skype4Py.Chat): Skype Chat client instance
            msg (Skype4Py.SmsMessage): Skype Message
        """
        msg_client.Chat.SendMessage(msg)

    def bootstrap(self):
        """ Bootstraps the Bot config to run and attach to the skype client
        """
        self.register_command_delimiter()
        self.register_command_owner()
        self.register_commands()
        self.skype.Attach()

    @abstractmethod
    def run(self):
        """ Method which will facilitate running the Bot.
        """
        pass

    @abstractmethod
    def register_command_delimiter(self):
        """ Register the delimiter in which signifies a command is being sent.
        """
        pass

    @abstractmethod
    def register_command_owner(self):
        """ Register the current bot name which will respond to commands in skype.
        """
        pass

    @abstractmethod
    def register_commands(self):
        """ Register the bot commands.
        """
        pass
Exemple #4
0
 def __init__(self, name="Skype Bot"):
     self.command_handler = CommandHandler()
     self.skype = Skype(Events=self)
     self.skype.FriendlyName = name
Exemple #5
0
class SkypeBot(object):
    __metaclass__ = ABCMeta
    """ Abstract Base Class to define the interactions of a SkypeBot

    Args:
        name (string, optional): Name given to the SkypeBot
    """
    def __init__(self, name="Skype Bot"):
        self.command_handler = CommandHandler()
        self.skype = Skype(Events=self)
        self.skype.FriendlyName = name

    def MessageStatus(self, msg, status):
        """ Event handler for sending messages

        Args:
            msg (Skype4Py.SmsMessage): Skype Message
            status (int): status code
        """
        if status == cmsReceived:
            msg.MarkAsSeen()
            user = msg.FromHandle
            reply_with = self.command_handler.handle(msg, status, user)

            if reply_with:
                self.__reply(msg, reply_with)

    def __reply(self, msg_client, msg):
        """ [Internal] Send message to chat via Skype Msg Module

        Args:
            msg_client (Skype4Py.Chat): Skype Chat client instance
            msg (Skype4Py.SmsMessage): Skype Message
        """
        msg_client.Chat.SendMessage(msg)

    def bootstrap(self):
        """ Bootstraps the Bot config to run and attach to the skype client
        """
        self.register_command_delimiter()
        self.register_command_owner()
        self.register_commands()
        self.skype.Attach()

    @abstractmethod
    def run(self):
        """ Method which will facilitate running the Bot.
        """
        pass

    @abstractmethod
    def register_command_delimiter(self):
        """ Register the delimiter in which signifies a command is being sent.
        """
        pass

    @abstractmethod
    def register_command_owner(self):
        """ Register the current bot name which will respond to commands in skype.
        """
        pass

    @abstractmethod
    def register_commands(self):
        """ Register the bot commands.
        """
        pass
Exemple #6
0
 def __init__(self, name="Skype Bot"):
     self.command_handler = CommandHandler()
     self.skype = Skype(Events=self)
     self.skype.FriendlyName = name