示例#1
0
    def test_work(self):

        logging.info("*** run")

        self.engine.set('general.switch', 'on')

        listener = Listener(engine=self.engine)
        listener.DEFER_DURATION = 0.0
        listener.process = mock.Mock(side_effect=Exception('TEST'))
        self.engine.ears.put(('dummy'))
        self.engine.ears.put(None)
        listener.run()
        self.assertEqual(self.engine.get('listener.counter'), 0)

        listener = Listener(engine=self.engine)
        listener.DEFER_DURATION = 0.0
        listener.process = mock.Mock(side_effect=KeyboardInterrupt('ctl-C'))
        self.engine.ears.put(('dummy'))
        listener.run()
        self.assertEqual(self.engine.get('listener.counter'), 0)
示例#2
0
    def test_dynamic(self):

        logging.info('*** Dynamic test ***')

        items = [
            {
                "id":
                "1_lzY29zcGFyazovL3VzL01FU1NBR0UvOTJkYjNiZTAtNDNiZC0xMWU2LThhZTktZGQ1YjNkZmM1NjVk",
                "channel_id":
                "Y2lzY29zcGFyazovL3VzL1JPT00vYmJjZWIxYWQtNDNmMS0zYjU4LTkxNDctZjE0YmIwYzRkMTU0",
                "roomType":
                "group",
                "toPersonId":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mMDZkNzFhNS0wODMzLTRmYTUtYTcyYS1jYzg5YjI1ZWVlMmX",
                "toPersonEmail":
                "*****@*****.**",
                "text":
                "PROJECT UPDATE - A new project plan has been published on Box: http://box.com/s/lf5vj. The PM for this project is Mike C. and the Engineering Manager is Jane W.",
                "markdown":
                "**PROJECT UPDATE** A new project plan has been published [on Box](http://box.com/s/lf5vj). The PM for this project is <@personEmail:[email protected]> and the Engineering Manager is <@personEmail:[email protected]>.",
                "files": ["http://www.example.com/images/media.png"],
                "personId":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIzNjE4Ny1jOGRkLTQ3MjctOGIyZi1mOWM0NDdmMjkwNDY",
                "personEmail":
                "*****@*****.**",
                "stamp":
                "2015-10-18T14:26:16+00:00",
                "mentionedPeople": [
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS8yNDlmNzRkOS1kYjhhLTQzY2EtODk2Yi04NzllZDI0MGFjNTM",
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS83YWYyZjcyYy0xZDk1LTQxZjAtYTcxNi00MjlmZmNmYmM0ZDg"
                ],
                "from_id":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIzNjE4Ny1jOGRkLTQ3MjctOGIyZi1mOWM0NDdmMjkwNDY",
            },
            {
                "id":
                "2_2lzY29zcGFyazovL3VzL01FU1NBR0UvOTJkYjNiZTAtNDNiZC0xMWU2LThhZTktZGQ1YjNkZmM1NjVk",
                "channel_id":
                "Y2lzY29zcGFyazovL3VzL1JPT00vYmJjZWIxYWQtNDNmMS0zYjU4LTkxNDctZjE0YmIwYzRkMTU0",
                "roomType":
                "group",
                "toPersonId":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mMDZkNzFhNS0wODMzLTRmYTUtYTcyYS1jYzg5YjI1ZWVlMmX",
                "toPersonEmail":
                "*****@*****.**",
                "text":
                "/shelly version",
                "personId":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIzNjE4Ny1jOGRkLTQ3MjctOGIyZi1mOWM0NDdmMjkwNDY",
                "personEmail":
                "*****@*****.**",
                "stamp":
                "2015-10-18T14:26:16+00:00",
                "mentionedPeople": [
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS8yNDlmNzRkOS1kYjhhLTQzY2EtODk2Yi04NzllZDI0MGFjNTM",
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS83YWYyZjcyYy0xZDk1LTQxZjAtYTcxNi00MjlmZmNmYmM0ZDg"
                ],
                "from_id":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIzNjE4Ny1jOGRkLTQ3MjctOGIyZi1mOWM0NDdmMjkwNDY",
                "mentioned_ids": [
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS8yNDlmNzRkOS1kYjhhLTQzY2EtODk2Yi04NzllZDI0MGFjNTM",
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS83YWYyZjcyYy0xZDk1LTQxZjAtYTcxNi00MjlmZmNmYmM0ZDg"
                ],
            },
            {
                "id":
                "2_2lzY29zcGFyazovL3VzL01FU1NBR0UvOTJkYjNiZTAtNDNiZC0xMWU2LThhZTktZGQ1YjNkZmM1NjVk",
                "channel_id":
                "Y2lzY29zcGFyazovL3VzL1JPT00vYmJjZWIxYWQtNDNmMS0zYjU4LTkxNDctZjE0YmIwYzRkMTU0",
                "roomType":
                "group",
                "toPersonId":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mMDZkNzFhNS0wODMzLTRmYTUtYTcyYS1jYzg5YjI1ZWVlMmX",
                "toPersonEmail":
                "*****@*****.**",
                "text":
                "",
                "personId":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIzNjE4Ny1jOGRkLTQ3MjctOGIyZi1mOWM0NDdmMjkwNDY",
                "personEmail":
                "*****@*****.**",
                "stamp":
                "2015-10-18T14:26:16+00:00",
                "mentionedPeople": [
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS8yNDlmNzRkOS1kYjhhLTQzY2EtODk2Yi04NzllZDI0MGFjNTM",
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS83YWYyZjcyYy0xZDk1LTQxZjAtYTcxNi00MjlmZmNmYmM0ZDg"
                ],
                "from_id":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIzNjE4Ny1jOGRkLTQ3MjctOGIyZi1mOWM0NDdmMjkwNDY",
                "mentioned_ids": [
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS8yNDlmNzRkOS1kYjhhLTQzY2EtODk2Yi04NzllZDI0MGFjNTM",
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS83YWYyZjcyYy0xZDk1LTQxZjAtYTcxNi00MjlmZmNmYmM0ZDg"
                ],
            },
            {
                "id":
                "3_2lzY29zcGFyazovL3VzL01FU1NBR0UvOTJkYjNiZTAtNDNiZC0xMWU2LThhZTktZGQ1YjNkZmM1NjVk",
                "channel_id":
                "Y2lzY29zcGFyazovL3VzL1JPT00vYmJjZWIxYWQtNDNmMS0zYjU4LTkxNDctZjE0YmIwYzRkMTU0",
                "roomType":
                "group",
                "toPersonId":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mMDZkNzFhNS0wODMzLTRmYTUtYTcyYS1jYzg5YjI1ZWVlMmX",
                "toPersonEmail":
                "*****@*****.**",
                "text":
                "@shelly help",
                "personId":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIzNjE4Ny1jOGRkLTQ3MjctOGIyZi1mOWM0NDdmMjkwNDY",
                "personEmail":
                "*****@*****.**",
                "stamp":
                "2015-10-18T14:26:16+00:00",
                "mentionedPeople": [
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS8yNDlmNzRkOS1kYjhhLTQzY2EtODk2Yi04NzllZDI0MGFjNTM",
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS83YWYyZjcyYy0xZDk1LTQxZjAtYTcxNi00MjlmZmNmYmM0ZDg"
                ],
                "from_id":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIzNjE4Ny1jOGRkLTQ3MjctOGIyZi1mOWM0NDdmMjkwNDY",
                "mentioned_ids": [
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS8yNDlmNzRkOS1kYjhhLTQzY2EtODk2Yi04NzllZDI0MGFjNTM",
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS83YWYyZjcyYy0xZDk1LTQxZjAtYTcxNi00MjlmZmNmYmM0ZDg"
                ],
            },
            {
                "id":
                "3_2lzY29zcGFyazovL3VzL01FU1NBR0UvOTJkYjNiZTAtNDNiZC0xMWU2LThhZTktZGQ1YjNkZmM1NjVk",
                "channel_id":
                "Y2lzY29zcGFyazovL3VzL1JPT00vYmJjZWIxYWQtNDNmMS0zYjU4LTkxNDctZjE0YmIwYzRkMTU0",
                "roomType":
                "group",
                "toPersonId":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mMDZkNzFhNS0wODMzLTRmYTUtYTcyYS1jYzg5YjI1ZWVlMmX",
                "toPersonEmail":
                "*****@*****.**",
                "text":
                "!shelly help help",
                "personId":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIzNjE4Ny1jOGRkLTQ3MjctOGIyZi1mOWM0NDdmMjkwNDY",
                "personEmail":
                "*****@*****.**",
                "stamp":
                "2015-10-18T14:26:16+00:00",
                "mentionedPeople": [
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS8yNDlmNzRkOS1kYjhhLTQzY2EtODk2Yi04NzllZDI0MGFjNTM",
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS83YWYyZjcyYy0xZDk1LTQxZjAtYTcxNi00MjlmZmNmYmM0ZDg"
                ],
                "from_id":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIzNjE4Ny1jOGRkLTQ3MjctOGIyZi1mOWM0NDdmMjkwNDY",
                "mentioned_ids": [
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS8yNDlmNzRkOS1kYjhhLTQzY2EtODk2Yi04NzllZDI0MGFjNTM",
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS83YWYyZjcyYy0xZDk1LTQxZjAtYTcxNi00MjlmZmNmYmM0ZDg"
                ],
            },
            {
                "id":
                "4_2lzY29zcGFyazovL3VzL01FU1NBR0UvOTJkYjNiZTAtNDNiZC0xMWU2LThhZTktZGQ1YjNkZmM1NjVk",
                "channel_id":
                "Y2lzY29zcGFyazovL3VzL1JPT00vYmJjZWIxYWQtNDNmMS0zYjU4LTkxNDctZjE0YmIwYzRkMTU0",
                "roomType":
                "group",
                "toPersonId":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mMDZkNzFhNS0wODMzLTRmYTUtYTcyYS1jYzg5YjI1ZWVlMmX",
                "toPersonEmail":
                "*****@*****.**",
                "text":
                "PROJECT UPDATE - A new project plan has been published on Box: http://box.com/s/lf5vj. The PM for this project is Mike C. and the Engineering Manager is Jane W.",
                "markdown":
                "**PROJECT UPDATE** A new project plan has been published [on Box](http://box.com/s/lf5vj). The PM for this project is <@personEmail:[email protected]> and the Engineering Manager is <@personEmail:[email protected]>.",
                "files": ["http://www.example.com/images/media.png"],
                "personId":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIzNjE4Ny1jOGRkLTQ3MjctOGIyZi1mOWM0NDdmMjkwNDY",
                "personEmail":
                "*****@*****.**",
                "stamp":
                "2015-10-18T14:26:16+00:00",
                "mentionedPeople": [
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS8yNDlmNzRkOS1kYjhhLTQzY2EtODk2Yi04NzllZDI0MGFjNTM",
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS83YWYyZjcyYy0xZDk1LTQxZjAtYTcxNi00MjlmZmNmYmM0ZDg"
                ],
                "from_id":
                "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIzNjE4Ny1jOGRkLTQ3MjctOGIyZi1mOWM0NDdmMjkwNDY",
                "mentioned_ids": [
                    "Y2lzY29zcGFyazovL3VzL1BFT1BMRS8yNDlmNzRkOS1kYjhhLTQzY2EtODk2Yi04NzllZDI0MGFjNTM"
                ],
            },
            {
                "id":
                "Y2lzY29zcGFyazovL3VzL01FU1NB0xMWU3LTljODctNTljZjJjNDRhYmIy",
                "roomId":
                "Y2lzY29zcGFyazovL3VzL1JP0zY2VmLWJiNDctOTZlZjA1NmJhYzFl",
                "roomType":
                "direct",
                "text":
                "test",
                "stamp":
                "2017-07-22T16:49:22.008Z",
                "hook":
                "shellbot-messages",
                "personEmail":
                "*****@*****.**",
                "personId":
                "Y2lzY29zcGFyazovL3VzL1LTQ5YzQtYTIyYi1mYWYwZWQwMjkyMzU",
                "content":
                "test",
                "from_id":
                'Y2lzY29zcGFyazovL3VzL1LTQ5YzQtYTIyYi1mYWYwZWQwMjkyMzU',
                "from_label":
                '*****@*****.**',
                'is_direct':
                True,
                "mentioned_ids": [],
                "channel_id":
                'Y2lzY29zcGFyazovL3VzL1JP0zY2VmLWJiNDctOTZlZjA1NmJhYzFl',
            },
        ]

        for item in items:
            self.engine.ears.put(str(Message(item)))

        self.engine.ears.put(None)

        tee = Queue()

        def filter(item):
            tee.put(str(item))
            return item

        listener = Listener(engine=self.engine, filter=filter)
        listener.DEFER_DURATION = 0.0

        listener.run()
        time.sleep(0.01)

        self.assertEqual(self.engine.get('listener.counter'), 7)
        with self.assertRaises(Exception):
            self.engine.ears.get_nowait()
        self.assertEqual(self.engine.mouth.get_nowait().text,
                         'Shelly version *unknown*')
        self.assertEqual(
            self.engine.mouth.get_nowait().text,
            u'Available commands:\n' + u'help - Show commands and usage')
        self.assertEqual(
            self.engine.mouth.get_nowait().text,
            u'Available commands:\n' + u'help - Show commands and usage')
        self.assertEqual(
            self.engine.mouth.get_nowait().text,
            u'help - Show commands and usage\nusage: help <command>')
        self.assertEqual(self.engine.mouth.get_nowait().text,
                         u"Sorry, I do not know how to handle 'test'")
        with self.assertRaises(Exception):
            print(self.engine.mouth.get_nowait())

        self.maxDiff = None
        for item in items:
            item.update({'type': 'message'})
            self.assertEqual(yaml.safe_load(tee.get()), item)
        with self.assertRaises(Exception):
            print(tee.get_nowait())