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])