コード例 #1
0
    def test_fetch_from_non_set_cache(self):
        """Test if a error is raised when the cache was not set"""

        slack = Slack('C011DUKE8', 'aaaa', max_items=5)

        with self.assertRaises(CacheError):
            _ = [msg for msg in slack.fetch_from_cache()]
コード例 #2
0
ファイル: test_slack.py プロジェクト: holdenk/perceval
    def test_fetch_from_cache(self, mock_utcnow):
        """Test whether the cache works"""

        mock_utcnow.return_value = datetime.datetime(
            2017, 1, 1, tzinfo=dateutil.tz.tzutc())

        http_requests = setup_http_server()

        # First, we fetch the events from the server,
        # storing them in a cache
        cache = Cache(self.tmp_path)
        slack = Slack('C011DUKE8', 'aaaa', max_items=5, cache=cache)
        messages = [msg for msg in slack.fetch()]

        self.assertEqual(len(http_requests), 5)

        # Now, we get the messages from the cache.
        # The events should be the same and there won't be
        # any new request to the server
        cached_messages = [msg for msg in slack.fetch_from_cache()]
        self.assertEqual(len(cached_messages), len(messages))

        expected = [
            ("<@U0003|dizquierdo> has joined the channel",
             'bb95a1facf7d61baaf57322f3d6b6d2d45af8aeb', 1427799888.0,
             '*****@*****.**'),
            ("tengo el m\u00f3vil", 'f8668de6fadeb5730e0a80d4c8e5d3f8d175f4d5',
             1427135890.000071, '*****@*****.**'),
            ("hey acs", '29c2942a704c4e0b067daeb76edb2f826376cecf',
             1427135835.000070, '*****@*****.**'),
            ("¿vale?", '757e88ea008db0fff739dd261179219aedb84a95',
             1427135740.000069, '*****@*****.**'),
            ("jsmanrique: tenemos que dar m\u00e9tricas super chulas",
             'e92555381bc431a53c0b594fc118850eafd6e212', 1427135733.000068,
             '*****@*****.**'),
            ("hi!", 'b92892e7b65add0e83d0839de20b2375a42014e8',
             1427135689.000067, '*****@*****.**'),
            ("hi!", 'e59d9ca0d9a2ba1c747dc60a0904edd22d69e20e',
             1427135634.000066, '*****@*****.**')
        ]

        self.assertEqual(len(cached_messages), len(expected))

        for x in range(len(cached_messages)):
            cmessage = cached_messages[x]
            expc = expected[x]
            self.assertEqual(cmessage['data']['text'], expc[0])
            self.assertEqual(cmessage['uuid'], expc[1])
            self.assertEqual(cmessage['origin'], 'https://slack.com/C011DUKE8')
            self.assertEqual(cmessage['updated_on'], expc[2])
            self.assertEqual(cmessage['category'], 'message')
            self.assertEqual(cmessage['tag'], 'https://slack.com/C011DUKE8')
            self.assertEqual(cmessage['data']['user_data']['profile']['email'],
                             expc[3])

            # Compare chached and fetched message
            self.assertDictEqual(cmessage['data'], messages[x]['data'])

        # No more requests were sent
        self.assertEqual(len(http_requests), 5)
コード例 #3
0
    def test_fetch_from_empty_cache(self):
        """Test if there are not any message returned when the cache is empty"""

        cache = Cache(self.tmp_path)
        slack = Slack('C011DUKE8', 'aaaa', max_items=5, cache=cache)
        cached_messages = [msg for msg in slack.fetch_from_cache()]
        self.assertEqual(len(cached_messages), 0)
コード例 #4
0
    def test_parse_history(self):
        """Test if it parses a channel history JSON stream"""

        raw_json = read_file('data/slack/slack_history.json')

        items, has_more = Slack.parse_history(raw_json)
        results = [item for item in items]

        self.assertEqual(len(results), 7)
        self.assertEqual(results[0]['ts'], '1486999900.000000')
        self.assertEqual(results[1]['ts'], '1486969200.000136')
        self.assertEqual(results[2]['ts'], '1427799888.000000')
        self.assertEqual(results[3]['ts'], '1427135890.000071')
        self.assertEqual(results[4]['ts'], '1427135835.000070')
        self.assertEqual(results[5]['ts'], '1427135740.000069')
        self.assertEqual(results[6]['ts'], '1427135733.000068')
        self.assertEqual(has_more, True)

        # Parse a file without results
        raw_json = read_file('data/slack/slack_history_empty.json')

        items, has_more = Slack.parse_history(raw_json)
        results = [item for item in items]

        self.assertEqual(len(results), 0)
        self.assertEqual(has_more, False)
コード例 #5
0
ファイル: test_slack.py プロジェクト: chubbymaggie/perceval
    def test_fetch_empty(self, mock_utcnow):
        """Test if nothing is returned when there are no messages"""

        mock_utcnow.return_value = datetime.datetime(
            2017, 1, 1, tzinfo=dateutil.tz.tzutc())

        http_requests = setup_http_server()

        from_date = datetime.datetime(2016, 1, 1, tzinfo=dateutil.tz.tzutc())

        slack = Slack('C011DUKE8', 'aaaa', max_items=5)
        messages = [msg for msg in slack.fetch(from_date=from_date)]

        self.assertEqual(len(messages), 0)

        # Check requests
        expected = [{
            'channel': ['C011DUKE8'],
            'token': ['aaaa']
        }, {
            'channel': ['C011DUKE8'],
            'oldest': ['1451606399.99999'],
            'latest': ['1483228800.0'],
            'token': ['aaaa'],
            'count': ['5']
        }]

        self.assertEqual(len(http_requests), len(expected))

        for i in range(len(expected)):
            self.assertDictEqual(http_requests[i].querystring, expected[i])
コード例 #6
0
 def setUp(self):
     super().setUp()
     self.backend_write_archive = Slack('C011DUKE8',
                                        'aaaa',
                                        max_items=5,
                                        archive=self.archive)
     self.backend_read_archive = Slack('C011DUKE8',
                                       'bbbb',
                                       max_items=5,
                                       archive=self.archive)
コード例 #7
0
    def test_parse_channel_info(self):
        """Test if it parses a channel info JSON stream"""

        raw_json = read_file('data/slack/slack_info.json')

        user = Slack.parse_channel_info(raw_json)

        self.assertEqual(user['id'], 'C011DUKE8')
        self.assertEqual(user['name'], 'test channel')
コード例 #8
0
    def test_parse_user(self):
        """Test if it parses a user info JSON stream"""

        raw_json = read_file('data/slack/slack_user_U0001.json')

        user = Slack.parse_user(raw_json)

        self.assertEqual(user['id'], 'U0001')
        self.assertEqual(user['name'], 'acs')
        self.assertEqual(user['profile']['email'], '*****@*****.**')
コード例 #9
0
    def test_initialization(self):
        """Test whether attributes are initializated"""

        slack = Slack('C011DUKE8', 'aaaa', max_items=5, tag='test')

        self.assertEqual(slack.origin, 'https://slack.com/C011DUKE8')
        self.assertEqual(slack.tag, 'test')
        self.assertEqual(slack.channel, 'C011DUKE8')
        self.assertEqual(slack.max_items, 5)
        self.assertIsNone(slack.client)

        # When tag is empty or None it will be set to
        # the value in URL
        slack = Slack('C011DUKE8', 'aaaa')
        self.assertEqual(slack.origin, 'https://slack.com/C011DUKE8')
        self.assertEqual(slack.tag, 'https://slack.com/C011DUKE8')

        slack = Slack('C011DUKE8', 'aaaa', tag='')
        self.assertEqual(slack.origin, 'https://slack.com/C011DUKE8')
        self.assertEqual(slack.tag, 'https://slack.com/C011DUKE8')
コード例 #10
0
    def test_fetch_empty(self, mock_utcnow):
        """Test if nothing is returned when there are no messages"""

        mock_utcnow.return_value = datetime.datetime(2017, 1, 1,
                                                     tzinfo=dateutil.tz.tzutc())

        http_requests = setup_http_server()

        from_date = datetime.datetime(2016, 1, 1,
                                      tzinfo=dateutil.tz.tzutc())

        slack = Slack('C011DUKE8', 'aaaa', max_items=5)
        messages = [msg for msg in slack.fetch(from_date=from_date)]

        self.assertEqual(len(messages), 0)

        # Check requests
        expected = [
            {
                'channel': ['C011DUKE8']
            },
            {
                'channel': ['C011DUKE8']
            },
            {
                'channel': ['C011DUKE8'],
                'cursor': ['dXNlcl9pZDpVNEMwUTZGQTc=']
            },
            {
                'channel': ['C011DUKE8'],
                'oldest': ['1451606399.999990'],
                'latest': ['1483228800.000000'],
                'count': ['5']
            }
        ]

        self.assertEqual(len(http_requests), len(expected))

        for i in range(len(expected)):
            self.assertIn((SlackClient.AUTHORIZATION_HEADER, 'Bearer aaaa'), http_requests[i].headers._headers)
            self.assertDictEqual(http_requests[i].querystring, expected[i])
コード例 #11
0
    def test_search_fields(self, mock_utcnow):
        """Test whether the search_fields is properly set"""

        mock_utcnow.return_value = datetime.datetime(2017, 1, 1,
                                                     tzinfo=dateutil.tz.tzutc())

        setup_http_server()

        slack = Slack('C011DUKE8', 'aaaa', max_items=5)
        messages = [msg for msg in slack.fetch(from_date=None)]

        message = messages[0]
        self.assertEqual(slack.metadata_id(message['data']), message['search_fields']['item_id'])
        self.assertEqual(message['data']['channel_info']['name'], 'test channel')
        self.assertEqual(message['data']['channel_info']['name'], message['search_fields']['channel_name'])
        self.assertEqual(message['data']['channel_info']['id'], 'C011DUKE8')
        self.assertEqual(message['data']['channel_info']['id'], message['search_fields']['channel_id'])

        message = messages[1]
        self.assertEqual(slack.metadata_id(message['data']), message['search_fields']['item_id'])
        self.assertEqual(message['data']['channel_info']['name'], 'test channel')
        self.assertEqual(message['data']['channel_info']['name'], message['search_fields']['channel_name'])
        self.assertEqual(message['data']['channel_info']['id'], 'C011DUKE8')
        self.assertEqual(message['data']['channel_info']['id'], message['search_fields']['channel_id'])

        message = messages[2]
        self.assertEqual(slack.metadata_id(message['data']), message['search_fields']['item_id'])
        self.assertEqual(message['data']['channel_info']['name'], 'test channel')
        self.assertEqual(message['data']['channel_info']['name'], message['search_fields']['channel_name'])
        self.assertEqual(message['data']['channel_info']['id'], 'C011DUKE8')
        self.assertEqual(message['data']['channel_info']['id'], message['search_fields']['channel_id'])
コード例 #12
0
ファイル: test_slack.py プロジェクト: bt0DotNinja/perceval
    def test_has_caching(self):
        """Test if it returns True when has_caching is called"""

        self.assertEqual(Slack.has_caching(), False)
コード例 #13
0
ファイル: test_slack.py プロジェクト: holdenk/perceval
    def test_fetch_from_date(self, mock_utcnow):
        """Test if it fetches a list of messages since a given date"""

        mock_utcnow.return_value = datetime.datetime(
            2017, 1, 1, tzinfo=dateutil.tz.tzutc())

        http_requests = setup_http_server()

        from_date = datetime.datetime(2015,
                                      3,
                                      23,
                                      18,
                                      35,
                                      40,
                                      69,
                                      tzinfo=dateutil.tz.tzutc())

        slack = Slack('C011DUKE8', 'aaaa', max_items=5)
        messages = [msg for msg in slack.fetch(from_date=from_date)]

        expected = [
            ("<@U0003|dizquierdo> has joined the channel",
             'bb95a1facf7d61baaf57322f3d6b6d2d45af8aeb', 1427799888.0,
             '*****@*****.**'),
            ("tengo el m\u00f3vil", 'f8668de6fadeb5730e0a80d4c8e5d3f8d175f4d5',
             1427135890.000071, '*****@*****.**'),
            ("hey acs", '29c2942a704c4e0b067daeb76edb2f826376cecf',
             1427135835.000070, '*****@*****.**')
        ]

        self.assertEqual(len(messages), len(expected))

        for x in range(len(messages)):
            message = messages[x]
            expc = expected[x]
            self.assertEqual(message['data']['text'], expc[0])
            self.assertEqual(message['uuid'], expc[1])
            self.assertEqual(message['origin'], 'https://slack.com/C011DUKE8')
            self.assertEqual(message['updated_on'], expc[2])
            self.assertEqual(message['category'], 'message')
            self.assertEqual(message['tag'], 'https://slack.com/C011DUKE8')
            self.assertEqual(message['data']['user_data']['profile']['email'],
                             expc[3])

        # Check requests
        expected = [{
            'channel': ['C011DUKE8'],
            'oldest': ['1427135740.000068'],
            'latest': ['1483228800.0'],
            'token': ['aaaa'],
            'count': ['5']
        }, {
            'user': ['U0003'],
            'token': ['aaaa']
        }, {
            'user': ['U0002'],
            'token': ['aaaa']
        }]

        self.assertEqual(len(http_requests), len(expected))

        for i in range(len(expected)):
            self.assertDictEqual(http_requests[i].querystring, expected[i])
コード例 #14
0
    def test_fetch_from_date(self, mock_utcnow):
        """Test if it fetches a list of messages since a given date"""

        mock_utcnow.return_value = datetime.datetime(
            2017, 1, 1, tzinfo=dateutil.tz.tzutc())

        http_requests = setup_http_server()

        from_date = datetime.datetime(2015,
                                      3,
                                      23,
                                      18,
                                      35,
                                      40,
                                      69,
                                      tzinfo=dateutil.tz.tzutc())

        slack = Slack('C011DUKE8', 'aaaa', max_items=5)
        messages = [msg for msg in slack.fetch(from_date=from_date)]

        expected = [
            ("There are no events this week.",
             'b48fd01f4e010597091b7e44cecfb6074f56a1a6', 1486969200.000136,
             'B0001', 'test channel'),
            ("<@U0003|dizquierdo> has joined the channel",
             'bb95a1facf7d61baaf57322f3d6b6d2d45af8aeb', 1427799888.0,
             '*****@*****.**', 'test channel'),
            ("tengo el m\u00f3vil", 'f8668de6fadeb5730e0a80d4c8e5d3f8d175f4d5',
             1427135890.000071, '*****@*****.**', 'test channel'),
            ("hey acs", '29c2942a704c4e0b067daeb76edb2f826376cecf',
             1427135835.000070, '*****@*****.**', 'test channel')
        ]

        self.assertEqual(len(messages), len(expected))

        for x in range(len(messages)):
            message = messages[x]
            expc = expected[x]
            self.assertEqual(message['data']['text'], expc[0])
            self.assertEqual(message['uuid'], expc[1])
            self.assertEqual(message['origin'], 'https://slack.com/C011DUKE8')
            self.assertEqual(message['updated_on'], expc[2])
            self.assertEqual(message['category'], 'message')
            self.assertEqual(message['tag'], 'https://slack.com/C011DUKE8')

            # The first message was sent by a bot
            if x == 0:
                self.assertEqual(message['data']['bot_id'], expc[3])
            else:
                self.assertEqual(
                    message['data']['user_data']['profile']['email'], expc[3])

            self.assertEqual(message['data']['channel_info']['name'], expc[4])
            self.assertEqual(message['data']['channel_info']['num_members'],
                             164)

        # Check requests
        expected = [{
            'channel': ['C011DUKE8']
        }, {
            'channel': ['C011DUKE8']
        }, {
            'channel': ['C011DUKE8'],
            'cursor': ['dXNlcl9pZDpVNEMwUTZGQTc=']
        }, {
            'channel': ['C011DUKE8'],
            'oldest': ['1427135740.000059'],
            'latest': ['1483228800.000000'],
            'count': ['5']
        }, {
            'user': ['U0003']
        }, {
            'user': ['U0002']
        }]

        self.assertEqual(len(http_requests), len(expected))

        for i in range(len(expected)):
            self.assertIn((SlackClient.AUTHORIZATION_HEADER, 'Bearer aaaa'),
                          http_requests[i].headers._headers)
            self.assertDictEqual(http_requests[i].querystring, expected[i])
コード例 #15
0
    def test_fetch_archived_channel(self, mock_utcnow):
        """Test if it fetches a list of messages from an archived channel"""

        mock_utcnow.return_value = datetime.datetime(
            2017, 1, 1, tzinfo=dateutil.tz.tzutc())

        http_requests = setup_http_server(archived_channel=True)

        slack = Slack('C011DUKE8', 'aaaa', max_items=5)

        with self.assertLogs(logger, level='WARNING') as cm:
            messages = [msg for msg in slack.fetch(from_date=None)]
            self.assertEqual(
                cm.output[0], 'WARNING:perceval.backends.core.slack:'
                'channel_info.num_members is None for archived channels C011DUKE8'
            )

        expected = [
            ("<@U0003|dizquierdo> commented on <@U0002|acs> file>: Thanks.",
             'cc2338c23bf5293308d596629c598cd5ec37d14b', 1486999900.000000,
             '*****@*****.**', 'test channel'),
            ("There are no events this week.",
             'b48fd01f4e010597091b7e44cecfb6074f56a1a6', 1486969200.000136,
             'B0001', 'test channel'),
            ("<@U0003|dizquierdo> has joined the channel",
             'bb95a1facf7d61baaf57322f3d6b6d2d45af8aeb', 1427799888.0,
             '*****@*****.**', 'test channel'),
            ("tengo el m\u00f3vil", 'f8668de6fadeb5730e0a80d4c8e5d3f8d175f4d5',
             1427135890.000071, '*****@*****.**', 'test channel'),
            ("hey acs", '29c2942a704c4e0b067daeb76edb2f826376cecf',
             1427135835.000070, '*****@*****.**', 'test channel'),
            ("¿vale?", '757e88ea008db0fff739dd261179219aedb84a95',
             1427135740.000069, '*****@*****.**', 'test channel'),
            ("jsmanrique: tenemos que dar m\u00e9tricas super chulas",
             'e92555381bc431a53c0b594fc118850eafd6e212', 1427135733.000068,
             '*****@*****.**', 'test channel'),
            ("hi!", 'b92892e7b65add0e83d0839de20b2375a42014e8',
             1427135689.000067, '*****@*****.**', 'test channel'),
            ("hi!", 'e59d9ca0d9a2ba1c747dc60a0904edd22d69e20e',
             1427135634.000066, '*****@*****.**', 'test channel')
        ]

        self.assertEqual(len(messages), len(expected))

        for x in range(len(messages)):
            message = messages[x]
            expc = expected[x]
            self.assertEqual(message['data']['text'], expc[0])
            self.assertEqual(message['uuid'], expc[1])
            self.assertEqual(message['origin'], 'https://slack.com/C011DUKE8')
            self.assertEqual(message['updated_on'], expc[2])
            self.assertEqual(message['category'], 'message')
            self.assertEqual(message['tag'], 'https://slack.com/C011DUKE8')

            # The second message was sent by a bot
            if x == 1:
                self.assertEqual(message['data']['bot_id'], expc[3])
            else:
                self.assertEqual(
                    message['data']['user_data']['profile']['email'], expc[3])

            self.assertEqual(message['data']['channel_info']['name'], expc[4])
            self.assertIsNone(message['data']['channel_info']['num_members'])

        # Check requests
        expected = [{
            'channel': ['C011DUKE8']
        }, {
            'channel': ['C011DUKE8'],
            'oldest': ['0'],
            'latest': ['1483228800.000000'],
            'count': ['5']
        }, {
            'user': ['U0003']
        }, {
            'user': ['U0002']
        }, {
            'user': ['U0001']
        }, {
            'channel': ['C011DUKE8'],
            'oldest': ['0'],
            'latest': ['1427135733.000068'],
            'count': ['5']
        }]

        self.assertEqual(len(http_requests), len(expected))

        for i in range(len(expected)):
            self.assertIn((SlackClient.AUTHORIZATION_HEADER, 'Bearer aaaa'),
                          http_requests[i].headers._headers)
            self.assertDictEqual(http_requests[i].querystring, expected[i])
コード例 #16
0
    def test_has_resuming(self):
        """Test if it returns False when has_resuming is called"""

        self.assertEqual(Slack.has_resuming(), False)
コード例 #17
0
    def test_has_archiving(self):
        """Test if it returns True when has_archiving is called"""

        self.assertEqual(Slack.has_archiving(), True)
コード例 #18
0
ファイル: test_slack.py プロジェクト: bt0DotNinja/perceval
 def setUp(self):
     super().setUp()
     self.backend = Slack('C011DUKE8',
                          'aaaa',
                          max_items=5,
                          archive=self.archive)
コード例 #19
0
ファイル: test_slack.py プロジェクト: smitthakkar96/perceval
    def test_fetch(self, mock_utcnow):
        """Test if it fetches a list of messages"""

        mock_utcnow.return_value = datetime.datetime(
            2017, 1, 1, tzinfo=dateutil.tz.tzutc())

        http_requests = setup_http_server()

        slack = Slack('C011DUKE8', 'aaaa', max_items=5)
        messages = [msg for msg in slack.fetch()]

        expected = [
            ("There are no events this week.",
             'b48fd01f4e010597091b7e44cecfb6074f56a1a6', 1486969200.000136,
             'B0001', 'test channel'),
            ("<@U0003|dizquierdo> has joined the channel",
             'bb95a1facf7d61baaf57322f3d6b6d2d45af8aeb', 1427799888.0,
             '*****@*****.**', 'test channel'),
            ("tengo el m\u00f3vil", 'f8668de6fadeb5730e0a80d4c8e5d3f8d175f4d5',
             1427135890.000071, '*****@*****.**', 'test channel'),
            ("hey acs", '29c2942a704c4e0b067daeb76edb2f826376cecf',
             1427135835.000070, '*****@*****.**', 'test channel'),
            ("¿vale?", '757e88ea008db0fff739dd261179219aedb84a95',
             1427135740.000069, '*****@*****.**', 'test channel'),
            ("jsmanrique: tenemos que dar m\u00e9tricas super chulas",
             'e92555381bc431a53c0b594fc118850eafd6e212', 1427135733.000068,
             '*****@*****.**', 'test channel'),
            ("hi!", 'b92892e7b65add0e83d0839de20b2375a42014e8',
             1427135689.000067, '*****@*****.**', 'test channel'),
            ("hi!", 'e59d9ca0d9a2ba1c747dc60a0904edd22d69e20e',
             1427135634.000066, '*****@*****.**', 'test channel')
        ]

        self.assertEqual(len(messages), len(expected))

        for x in range(len(messages)):
            message = messages[x]
            expc = expected[x]
            self.assertEqual(message['data']['text'], expc[0])
            self.assertEqual(message['uuid'], expc[1])
            self.assertEqual(message['origin'], 'https://slack.com/C011DUKE8')
            self.assertEqual(message['updated_on'], expc[2])
            self.assertEqual(message['category'], 'message')
            self.assertEqual(message['tag'], 'https://slack.com/C011DUKE8')

            # The first message was sent by a bot
            if x == 0:
                self.assertEqual(message['data']['bot_id'], expc[3])
            else:
                self.assertEqual(
                    message['data']['user_data']['profile']['email'], expc[3])

            self.assertEqual(message['data']['channel_info']['name'], expc[4])

        # Check requests
        expected = [{
            'channel': ['C011DUKE8'],
            'token': ['aaaa']
        }, {
            'channel': ['C011DUKE8'],
            'oldest': ['0'],
            'latest': ['1483228800.0'],
            'token': ['aaaa'],
            'count': ['5']
        }, {
            'user': ['U0003'],
            'token': ['aaaa']
        }, {
            'user': ['U0002'],
            'token': ['aaaa']
        }, {
            'user': ['U0001'],
            'token': ['aaaa']
        }, {
            'channel': ['C011DUKE8'],
            'oldest': ['0'],
            'latest': ['1427135733.000068'],
            'token': ['aaaa'],
            'count': ['5']
        }]

        self.assertEqual(len(http_requests), len(expected))

        for i in range(len(expected)):
            self.assertDictEqual(http_requests[i].querystring, expected[i])