예제 #1
0
    def test_fetch_empty(self):
        """Test if nothing is returned when there are no posts"""

        http_requests = setup_http_server()

        from_date = datetime.datetime(2019, 1, 1)

        mattermost = Mattermost('https://mattermost.example.com/',
                                'abcdefghijkl',
                                'aaaa',
                                max_items=5)
        posts = [post for post in mattermost.fetch(from_date=from_date)]

        self.assertEqual(len(posts), 0)

        # Check requests
        expected = [{
            'channel_id': ['abcdefghijkl']
        }, {
            'per_page': ['5'],
            'page': ['0']
        }]

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

        for i in range(len(expected)):
            self.assertDictEqual(http_requests[i].querystring, expected[i])
    def test_fetch_from_date(self):
        """Test whether if fetches a set of posts from the given date"""

        http_requests = setup_http_server()

        from_date = datetime.datetime(2018, 4, 12, 9, 43, 2)

        mattermost = Mattermost('https://mattermost.example.com/',
                                'abcdefghijkl',
                                'aaaa',
                                max_items=5)
        posts = [post for post in mattermost.fetch(from_date=from_date)]

        expected = [('59io5i1f5bbetxtj6mbm67fouw',
                     'd023596f93fcd7e18838bd0adddae4e213d0ca15',
                     1523546846.639, 'sduenas'),
                    ('pot46s7kjif7xx6x91ua7m4d7y',
                     '8e4c190792621a567811d8b97b1d30ba8116b9b7',
                     1523546846.639, 'valcos'),
                    ('zgzsgcnuobyf9bwdcbug8iqu6e',
                     '409a4751fa5ec6e871694a1a16df5623f37a932e',
                     1523526214.021, 'sduenas'),
                    ('sg3eifxowjba7k47xb16767isa',
                     'e5557d99965585ca643b71919e9fb3af2b849c8c',
                     1523526206.815, 'sduenas'),
                    ('shs4ujzubtffzxbshxthfcxfdw',
                     '549db8c7e437de41a80d5e3b87dc4e3289e80e26',
                     1523526199.108, 'sduenas'),
                    ('swqyc3ekabrjbxc5bjf6hhba3w',
                     'e688e59eb9c672dd995ab15f39f2947f7b35d86a',
                     1523526187.090, 'valcos')]

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

        for x in range(len(posts)):
            post = posts[x]
            expc = expected[x]
            self.assertEqual(post['data']['id'], expc[0])
            self.assertEqual(post['uuid'], expc[1])
            self.assertEqual(post['origin'],
                             'https://mattermost.example.com/abcdefghijkl')
            self.assertEqual(post['updated_on'], expc[2])
            self.assertEqual(post['category'], 'post')
            self.assertEqual(post['tag'],
                             'https://mattermost.example.com/abcdefghijkl')
            self.assertEqual(post['data']['user_data']['username'], expc[3])

        # Check requests
        expected = [{
            'per_page': ['5'],
            'page': ['0']
        }, {}, {}, {
            'per_page': ['5'],
            'page': ['1']
        }]

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

        for i in range(len(expected)):
            self.assertDictEqual(http_requests[i].querystring, expected[i])
    def test_initialization(self):
        """Test whether attributes are initializated"""

        mattermost = Mattermost('https://mattermost.example.com/', 'abcdefghijkl', 'aaaa',
                                max_items=5, tag='test',
                                sleep_for_rate=True, min_rate_to_sleep=10,
                                sleep_time=60)

        self.assertEqual(mattermost.origin, 'https://mattermost.example.com/abcdefghijkl')
        self.assertEqual(mattermost.channel, 'abcdefghijkl')
        self.assertEqual(mattermost.api_token, 'aaaa')
        self.assertEqual(mattermost.tag, 'test')
        self.assertEqual(mattermost.max_items, 5)
        self.assertTrue(mattermost.sleep_for_rate)
        self.assertTrue(mattermost.ssl_verify)
        self.assertEqual(mattermost.min_rate_to_sleep, 10)
        self.assertEqual(mattermost.sleep_time, 60)
        self.assertIsNone(mattermost.client)

        # When tag is empty or None it will be set to
        # the value in URL
        mattermost = Mattermost('https://mattermost.example.com/', 'abcdefghijkl', 'aaaa', ssl_verify=False)
        self.assertEqual(mattermost.origin, 'https://mattermost.example.com/abcdefghijkl')
        self.assertEqual(mattermost.tag, 'https://mattermost.example.com/abcdefghijkl')
        self.assertFalse(mattermost.ssl_verify)

        mattermost = Mattermost('https://mattermost.example.com/', 'abcdefghijkl', 'aaaa', tag='')
        self.assertEqual(mattermost.origin, 'https://mattermost.example.com/abcdefghijkl')
        self.assertEqual(mattermost.tag, 'https://mattermost.example.com/abcdefghijkl')
 def setUp(self):
     super().setUp()
     self.backend_write_archive = Mattermost('https://mattermost.example.com/',
                                             'abcdefghijkl', 'aaaa',
                                             max_items=5, archive=self.archive)
     self.backend_read_archive = Mattermost('https://mattermost.example.com/',
                                            'abcdefghijkl', 'aaaa',
                                            max_items=5, archive=self.archive)
    def test_parse_json(self):
        """Test if it parses a JSON stream"""

        raw_json = read_file('data/mattermost/mattermost_posts.json')

        data = Mattermost.parse_json(raw_json)

        self.assertEqual(len(data['posts']), 5)
        self.assertEqual(len(data['order']), 5)
    def test_search_fields(self):
        """Test whether the search_fields is properly set"""

        setup_http_server()

        mattermost = Mattermost('https://mattermost.example.com/', 'abcdefghijkl', 'aaaa',
                                max_items=5)
        posts = [post for post in mattermost.fetch()]

        post = posts[0]
        self.assertEqual(mattermost.metadata_id(post['data']), post['search_fields']['item_id'])
        self.assertEqual(post['data']['channel_data']['id'], 'abcdefghijkl')
        self.assertEqual(post['data']['channel_data']['id'], post['search_fields']['channel_id'])
        self.assertEqual(post['data']['channel_data']['name'], 'grimoirelab')
        self.assertEqual(post['data']['channel_data']['name'], post['search_fields']['channel_name'])

        post = posts[1]
        self.assertEqual(mattermost.metadata_id(post['data']), post['search_fields']['item_id'])
        self.assertEqual(post['data']['channel_data']['id'], 'abcdefghijkl')
        self.assertEqual(post['data']['channel_data']['id'], post['search_fields']['channel_id'])
        self.assertEqual(post['data']['channel_data']['name'], 'grimoirelab')
        self.assertEqual(post['data']['channel_data']['name'], post['search_fields']['channel_name'])

        post = posts[2]
        self.assertEqual(mattermost.metadata_id(post['data']), post['search_fields']['item_id'])
        self.assertEqual(post['data']['channel_data']['id'], 'abcdefghijkl')
        self.assertEqual(post['data']['channel_data']['id'], post['search_fields']['channel_id'])
        self.assertEqual(post['data']['channel_data']['name'], 'grimoirelab')
        self.assertEqual(post['data']['channel_data']['name'], post['search_fields']['channel_name'])
    def test_fetch(self):
        """Test whether it fetches a set of posts"""

        http_requests = setup_http_server()

        mattermost = Mattermost('https://mattermost.example.com/',
                                'abcdefghijkl',
                                'aaaa',
                                max_items=5)
        posts = [post for post in mattermost.fetch()]

        expected = [('59io5i1f5bbetxtj6mbm67fouw',
                     'd023596f93fcd7e18838bd0adddae4e213d0ca15',
                     1523546846.639, 'sduenas'),
                    ('pot46s7kjif7xx6x91ua7m4d7y',
                     '8e4c190792621a567811d8b97b1d30ba8116b9b7',
                     1523546846.639, 'valcos'),
                    ('zgzsgcnuobyf9bwdcbug8iqu6e',
                     '409a4751fa5ec6e871694a1a16df5623f37a932e',
                     1523526214.021, 'sduenas'),
                    ('sg3eifxowjba7k47xb16767isa',
                     'e5557d99965585ca643b71919e9fb3af2b849c8c',
                     1523526206.815, 'sduenas'),
                    ('shs4ujzubtffzxbshxthfcxfdw',
                     '549db8c7e437de41a80d5e3b87dc4e3289e80e26',
                     1523526199.108, 'sduenas'),
                    ('swqyc3ekabrjbxc5bjf6hhba3w',
                     'e688e59eb9c672dd995ab15f39f2947f7b35d86a',
                     1523526187.090, 'valcos'),
                    ('b15jpgkw9bftufcdzteqiypoyr',
                     '1b702dbfd45e7f997b59cde56e7227b2f9464dba',
                     1523526181.298, 'valcos'),
                    ('49ctz9ndgfd48eb5oq4xbjpfby',
                     'a377e2b8300f254cb2ee5c66ea532a39bbeb6745',
                     1523526171.280, 'valcos'),
                    ('1ju85sxo7bfab8nf3yk5snn17a',
                     '2411fc8c8cb8673ee99088d61537fe412aa17433',
                     1523525981.213, 'sduenas')]

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

        for x in range(len(posts)):
            post = posts[x]
            expc = expected[x]
            self.assertEqual(post['data']['id'], expc[0])
            self.assertEqual(post['uuid'], expc[1])
            self.assertEqual(post['origin'],
                             'https://mattermost.example.com/abcdefghijkl')
            self.assertEqual(post['updated_on'], expc[2])
            self.assertEqual(post['category'], 'post')
            self.assertEqual(post['tag'],
                             'https://mattermost.example.com/abcdefghijkl')
            self.assertEqual(post['data']['user_data']['username'], expc[3])

        # Check requests
        expected = [{
            'per_page': ['5'],
            'page': ['0']
        }, {}, {}, {
            'per_page': ['5'],
            'page': ['1']
        }, {
            'per_page': ['5'],
            'page': ['2']
        }]

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

        for i in range(len(expected)):
            self.assertDictEqual(http_requests[i].querystring, expected[i])
    def test_has_resuming(self):
        """Test if it returns False when has_resuming is called"""

        self.assertEqual(Mattermost.has_resuming(), False)
    def test_has_archiving(self):
        """Test if it returns True when has_archiving is called"""

        self.assertEqual(Mattermost.has_archiving(), True)
    def test_fetch_with_name(self):
        """Test whether it fetches a set of posts"""

        http_requests = setup_http_server()

        mattermost = Mattermost('https://mattermost.example.com/', 'my_channel_name', 'aaaa',
                                max_items=5, team='my_team_name')

        posts = [post for post in mattermost.fetch(from_date=None)]

        expected = [
            ('59io5i1f5bbetxtj6mbm67fouw', '7d6cfbe12f4efdb99665ee12795e144937a4e0d5', 1523546846.639, 'sduenas'),
            ('pot46s7kjif7xx6x91ua7m4d7y', '4b7a02956fb24ee68e36367b90aba575e460e852', 1523546846.639, 'valcos'),
            ('zgzsgcnuobyf9bwdcbug8iqu6e', 'a84fce829ca6fcc8dc111112f5a6229f22d5edbd', 1523526214.021, 'sduenas'),
            ('sg3eifxowjba7k47xb16767isa', '061fa174bd10cf57b5fcc0a6051d2916e79fb8d0', 1523526206.815, 'sduenas'),
            ('shs4ujzubtffzxbshxthfcxfdw', '1a850c8416a07214e2de6104dcad78b18a497cf2', 1523526199.108, 'sduenas'),
            ('swqyc3ekabrjbxc5bjf6hhba3w', '734eea67728be29e9a39d4a95b07b227212c858d', 1523526187.090, 'valcos'),
            ('b15jpgkw9bftufcdzteqiypoyr', '7df120577130cb49793c1a534ecd152444f540ac', 1523526181.298, 'valcos'),
            ('49ctz9ndgfd48eb5oq4xbjpfby', '57c941fecb76c94ededa5ec2f7e69871a75bc6f9', 1523526171.280, 'valcos'),
            ('1ju85sxo7bfab8nf3yk5snn17a', '8223b67900ac63a8a4fd85614a40729d40f4e55c', 1523525981.213, 'sduenas')
        ]
        expected_channel = ('grimoirelab', 'GrimoireLab channel')

        # The remaining code provides the same assertions as test_fetch().  Fetching with
        # channel/team names should provide the same functionality as fetching with a
        # channel id.

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

        for x in range(len(posts)):
            post = posts[x]
            expc = expected[x]
            self.assertEqual(post['data']['id'], expc[0])
            self.assertEqual(post['uuid'], expc[1])
            self.assertEqual(post['origin'], 'https://mattermost.example.com/my_team_name/my_channel_name')
            self.assertEqual(post['updated_on'], expc[2])
            self.assertEqual(post['category'], 'post')
            self.assertEqual(post['tag'], 'https://mattermost.example.com/my_team_name/my_channel_name')
            self.assertEqual(post['data']['user_data']['username'], expc[3])
            self.assertEqual(post['data']['channel_data']['name'], expected_channel[0])
            self.assertEqual(post['data']['channel_data']['display_name'], expected_channel[1])

        # Check image
        images_expected = [
            {
                'width': 1280,
                'height': 640,
                'format': 'png',
                'frame_count': 0,
                'url': 'https://image-one-url.png'
            },
            {
                'width': 1280,
                'height': 640,
                'format': 'png',
                'frame_count': 0,
                'url': 'https://image-two-url.png'
            }
        ]
        self.assertListEqual(posts[2]['data']['metadata']['images'], images_expected)

        # Check requests
        expected = [
            {},
            {
                'per_page': ['5'],
                'page': ['0']
            },
            {},
            {},
            {
                'per_page': ['5'],
                'page': ['1']
            },
            {
                'per_page': ['5'],
                'page': ['2']
            }
        ]

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

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