def setUp(self): super().setUp() self.backend_write_archive = Phabricator(PHABRICATOR_URL, 'AAAA', archive=self.archive) self.backend_read_archive = Phabricator(PHABRICATOR_URL, 'BBBB', archive=self.archive)
def test_fetch_empty(self): """Test if nothing is returnerd when there are no tasks""" http_requests = setup_http_server() from_date = datetime.datetime(2017, 1, 1, 0, 0, 0) phab = Phabricator(PHABRICATOR_URL, 'AAAA') tasks = [task for task in phab.fetch(from_date=from_date)] self.assertEqual(len(tasks), 0) # Check requests expected = { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'attachments': { 'projects': True }, 'constraints': { 'modifiedStart': 1483228800 }, 'order': 'outdated' } } self.assertEqual(len(http_requests), 1) rparams = http_requests[0].parsed_body rparams['params'] = json.loads(rparams['params'][0]) self.assertDictEqual(rparams, expected)
def test_fetch_from_non_set_cache(self): """Test if a error is raised when the cache was not set""" phab = Phabricator(PHABRICATOR_URL, 'AAAA') with self.assertRaises(CacheError): _ = [task for task in phab.fetch_from_cache()]
def test_fetch_from_empty_cache(self): """Test if there are not any task returned when the cache is empty""" cache = Cache(self.tmp_path) phab = Phabricator(PHABRICATOR_URL, 'AAAA', cache=cache) cached_tasks = [task for task in phab.fetch_from_cache()] self.assertEqual(len(cached_tasks), 0)
def test_fetch_from_cache(self): """Test whether the cache works""" http_requests = setup_http_server() # First, we fetch the tasks from the server, # storing them in a cache cache = Cache(self.tmp_path) phab = Phabricator(PHABRICATOR_URL, 'AAAA', cache=cache) tasks = [task for task in phab.fetch()] self.assertEqual(len(http_requests), 12) # Now, we get the tasks from the cache. # The tasks should be the same and there won't be # any new request to the server cached_tasks = [task for task in phab.fetch_from_cache()] self.assertEqual(len(cached_tasks), len(tasks)) expected = [(69, 16, 0, 'jdoe', 'jdoe', '1b4c15d26068efcae83cd920bcada6003d2c4a6c', 1462306027.0), (73, 20, 0, 'jdoe', 'janesmith', '5487fc704f2d3c4e83ab0cd065512a181c1726cc', 1462464642.0), (78, 17, 0, 'jdoe', None, 'fa971157c4d0155652f94b673866abd83b929b27', 1462792338.0), (296, 18, 2, 'jane', 'jrae', 'e8fa3e4a4381d6fea3bcf5c848f599b87e7dc4a6', 1467196707.0)] self.assertEqual(len(cached_tasks), len(expected)) for x in range(len(cached_tasks)): task = cached_tasks[x] expc = expected[x] self.assertEqual(task['data']['id'], expc[0]) self.assertEqual(len(task['data']['transactions']), expc[1]) self.assertEqual(len(task['data']['projects']), expc[2]) self.assertEqual(task['data']['fields']['authorData']['userName'], expc[3]) # Check owner data; when it is null owner is not included if not expc[4]: self.assertNotIn('ownerData', task['data']['fields']) else: self.assertEqual( task['data']['fields']['ownerData']['userName'], expc[4]) self.assertEqual(task['uuid'], expc[5]) self.assertEqual(task['origin'], PHABRICATOR_URL) self.assertEqual(task['updated_on'], expc[6]) self.assertEqual(task['category'], 'task') self.assertEqual(task['tag'], PHABRICATOR_URL) # Compare chached and fetched task self.assertDictEqual(task['data'], tasks[x]['data']) # No more requests were sent self.assertEqual(len(http_requests), 12)
def test_initialization(self): """Test whether attributes are initializated""" phab = Phabricator(PHABRICATOR_URL, 'AAAA', tag='test') self.assertEqual(phab.url, PHABRICATOR_URL) self.assertEqual(phab.origin, PHABRICATOR_URL) self.assertEqual(phab.tag, 'test') self.assertIsNone(phab.client) self.assertTrue(phab.ssl_verify) # When tag is empty or None it will be set to # the value in url phab = Phabricator(PHABRICATOR_URL, 'AAAA') self.assertEqual(phab.url, PHABRICATOR_URL) self.assertEqual(phab.origin, PHABRICATOR_URL) self.assertEqual(phab.tag, PHABRICATOR_URL) phab = Phabricator(PHABRICATOR_URL, 'AAAA', tag='', ssl_verify=False) self.assertEqual(phab.url, PHABRICATOR_URL) self.assertEqual(phab.origin, PHABRICATOR_URL) self.assertEqual(phab.tag, PHABRICATOR_URL) self.assertEqual(phab.max_retries, MAX_RETRIES) self.assertEqual(phab.sleep_time, DEFAULT_SLEEP_TIME) self.assertFalse(phab.ssl_verify) phab = Phabricator(PHABRICATOR_URL, 'AAAA', None, None, 3, 25) self.assertEqual(phab.url, PHABRICATOR_URL) self.assertEqual(phab.origin, PHABRICATOR_URL) self.assertEqual(phab.tag, PHABRICATOR_URL) self.assertEqual(phab.max_retries, 3) self.assertEqual(phab.sleep_time, 25) phab = Phabricator(PHABRICATOR_URL, 'AAAA', tag='', max_retries=3, sleep_time=25) self.assertEqual(phab.url, PHABRICATOR_URL) self.assertEqual(phab.origin, PHABRICATOR_URL) self.assertEqual(phab.tag, PHABRICATOR_URL) self.assertEqual(phab.max_retries, 3) self.assertEqual(phab.sleep_time, 25)
def test_initialization(self): """Test whether attributes are initializated""" phab = Phabricator(PHABRICATOR_URL, 'AAAA', tag='test') self.assertEqual(phab.url, PHABRICATOR_URL) self.assertEqual(phab.origin, PHABRICATOR_URL) self.assertEqual(phab.tag, 'test') self.assertIsNone(phab.client) # When tag is empty or None it will be set to # the value in url phab = Phabricator(PHABRICATOR_URL, 'AAAA') self.assertEqual(phab.url, PHABRICATOR_URL) self.assertEqual(phab.origin, PHABRICATOR_URL) self.assertEqual(phab.tag, PHABRICATOR_URL) phab = Phabricator(PHABRICATOR_URL, 'AAAA', tag='') self.assertEqual(phab.url, PHABRICATOR_URL) self.assertEqual(phab.origin, PHABRICATOR_URL) self.assertEqual(phab.tag, PHABRICATOR_URL)
def test_search_fields(self): """Test whether the search_fields is properly set""" setup_http_server() phab = Phabricator(PHABRICATOR_URL, 'AAAA') tasks = [task for task in phab.fetch(from_date=None)] task = tasks[0] self.assertEqual(phab.metadata_id(task['data']), task['search_fields']['item_id']) task = tasks[1] self.assertEqual(phab.metadata_id(task['data']), task['search_fields']['item_id']) task = tasks[2] self.assertEqual(phab.metadata_id(task['data']), task['search_fields']['item_id']) task = tasks[3] self.assertEqual(phab.metadata_id(task['data']), task['search_fields']['item_id'])
def test_fetch_from_date(self): """Test wether if fetches a set of tasks from the given date""" http_requests = setup_http_server() from_date = datetime.datetime(2016, 6, 29, 0, 0, 0) phab = Phabricator(PHABRICATOR_URL, 'AAAA') tasks = [task for task in phab.fetch(from_date=from_date)] self.assertEqual(len(tasks), 1) task = tasks[0] self.assertEqual(task['data']['id'], 296) self.assertEqual(task['data']['fields']['authorData']['userName'], 'jane') self.assertEqual(task['data']['fields']['ownerData']['userName'], 'jrae') self.assertEqual(len(task['data']['transactions']), 18) self.assertEqual(task['uuid'], 'e8fa3e4a4381d6fea3bcf5c848f599b87e7dc4a6') self.assertEqual(task['origin'], PHABRICATOR_URL) self.assertEqual(task['updated_on'], 1467196707.0) self.assertEqual(task['category'], 'task') self.assertEqual(task['tag'], PHABRICATOR_URL) # Check subscribers transaction type trans = task['data']['transactions'][4] self.assertEqual(trans['newValue_data'][0]['userName'], 'jdoe') # Check reassign transaction type trans = task['data']['transactions'][11] self.assertEqual(trans['newValue_data']['userName'], 'jdoe') # Check requests expected = [{ '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'attachments': { 'projects': True }, 'constraints': { 'modifiedStart': 1467158400 }, 'order': 'outdated' } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'ids': [296] } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'phids': ['PHID-USER-2uk52xorcqb6sjvp467y'] } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'phids': ['PHID-PROJ-zi2ndtoy3fh5pnbqzfdo'] } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'phids': ['PHID-USER-ojtcpympsmwenszuef7p'] } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'phids': ['PHID-APPS-PhabricatorHeraldApplication'] } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'phids': ['PHID-USER-pr5fcxy4xk5ofqsfqcfc'] } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { "__conduit__": { "token": "AAAA" }, "phids": ["PHID-PROJ-2qnt6thbrd7qnx5bitzy"] } }] self.assertEqual(len(http_requests), len(expected)) for i in range(len(expected)): rparams = http_requests[i].parsed_body rparams['params'] = json.loads(rparams['params'][0]) self.assertDictEqual(rparams, expected[i])
def test_fetch(self): """Test whether it fetches a set of tasks""" http_requests = setup_http_server() phab = Phabricator(PHABRICATOR_URL, 'AAAA') tasks = [task for task in phab.fetch(from_date=None)] expected = [(69, 16, 'jdoe', 'jdoe', '1b4c15d26068efcae83cd920bcada6003d2c4a6c', 1462306027.0), (73, 20, 'jdoe', 'janesmith', '5487fc704f2d3c4e83ab0cd065512a181c1726cc', 1462464642.0), (78, 17, 'jdoe', None, 'fa971157c4d0155652f94b673866abd83b929b27', 1462792338.0), (296, 18, 'jane', 'jrae', 'e8fa3e4a4381d6fea3bcf5c848f599b87e7dc4a6', 1467196707.0)] self.assertEqual(len(tasks), len(expected)) for x in range(len(tasks)): task = tasks[x] expc = expected[x] self.assertEqual(task['data']['id'], expc[0]) self.assertEqual(len(task['data']['transactions']), expc[1]) self.assertEqual(task['data']['fields']['authorData']['userName'], expc[2]) # Check owner data; when it is null owner is not included if not expc[3]: self.assertNotIn('ownerData', task['data']['fields']) else: self.assertEqual( task['data']['fields']['ownerData']['userName'], expc[3]) self.assertEqual(task['uuid'], expc[4]) self.assertEqual(task['origin'], PHABRICATOR_URL) self.assertEqual(task['updated_on'], expc[5]) self.assertEqual(task['category'], 'task') self.assertEqual(task['tag'], PHABRICATOR_URL) # Check some authors info on transactions trans = tasks[0]['data']['transactions'] self.assertEqual(trans[0]['authorData']['userName'], 'jdoe') self.assertEqual(trans[15]['authorData']['userName'], 'jdoe') # Check that subscribers data is included for core:subscribers type transactions trans = tasks[0]['data']['transactions'][6] self.assertEqual(trans['transactionType'], 'core:subscribers') self.assertEqual(trans['oldValue'], []) self.assertEqual(trans['oldValue'], trans['oldValue_data']) self.assertEqual(len(trans['newValue']), len(trans['newValue_data'])) self.assertDictEqual(trans['newValue_data'][0], trans['authorData']) # Check that project data is included for core:edge type transactions trans = tasks[0]['data']['transactions'][7] self.assertEqual(trans['transactionType'], 'core:edge') self.assertEqual( trans['newValue_data'][0]['phid'], trans['newValue'][trans['newValue_data'][0]['phid']]['dst']) # Check that policy data is include for core:edit-policy type transactions trans = tasks[0]['data']['transactions'][8] self.assertEqual(trans['transactionType'], 'core:edit-policy') self.assertIsNotNone(trans['newValue_data']) self.assertIsNone(trans['oldValue_data']) # Check that policy data is include for core:view-policy type transactions trans = tasks[0]['data']['transactions'][9] self.assertEqual(trans['transactionType'], 'core:view-policy') self.assertIsNotNone(trans['newValue_data']) self.assertIsNone(trans['oldValue_data']) # Check that project data is include for core:columns type transactions trans = tasks[3]['data']['transactions'][15] self.assertEqual(trans['transactionType'], 'core:columns') self.assertEqual(trans['newValue'][0]['boardPHID_data']['name'], 'Team: Devel') self.assertIsNone(trans['oldValue']) # Check that reassign data is include for reassign type transactions trans = tasks[0]['data']['transactions'][13] self.assertEqual(trans['transactionType'], 'reassign') self.assertDictEqual(trans['newValue_data'], trans['authorData']) self.assertIsNone(trans['oldValue_data']) # Check authors that weren't found on the server: jsmith trans = tasks[1]['data']['transactions'] self.assertEqual(trans[3]['authorData'], None) trans = tasks[3]['data']['transactions'] self.assertEqual(trans[0]['authorData']['userName'], 'jdoe') self.assertEqual(trans[15]['authorData']['userName'], 'jane') self.assertEqual(trans[16]['authorData']['name'], 'Herald') # Check some info about projects prjs = tasks[0]['data']['projects'] self.assertEqual(len(prjs), 0) prjs = tasks[3]['data']['projects'] self.assertEqual(len(prjs), 2) self.assertEqual(prjs[0]['phid'], 'PHID-PROJ-zi2ndtoy3fh5pnbqzfdo') self.assertEqual(prjs[0]['name'], 'Team: Devel') self.assertEqual(prjs[1]['phid'], 'PHID-PROJ-2qnt6thbrd7qnx5bitzy') self.assertEqual(prjs[1]['name'], 'Bug report') # Check requests expected = [{ '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'attachments': { 'projects': True }, 'constraints': { 'modifiedStart': 1 }, 'order': 'outdated' } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'ids': [69, 73, 78] } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'phids': ['PHID-USER-2uk52xorcqb6sjvp467y'] } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'phids': ['PHID-PROJ-zi2ndtoy3fh5pnbqzfdo'] } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'phids': ['PHID-PROJ-2qnt6thbrd7qnx5bitzy'] } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'phids': ['PHID-USER-bjxhrstz5fb5gkrojmev'] } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'phids': ['PHID-USER-mjr7pnwpg6slsnjcqki7'] } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'after': '335', 'attachments': { 'projects': True }, 'constraints': { 'modifiedStart': 1 }, 'order': 'outdated' } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'ids': [296] } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'phids': ['PHID-USER-pr5fcxy4xk5ofqsfqcfc'] } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'phids': ['PHID-USER-ojtcpympsmwenszuef7p'] } }, { '__conduit__': ['True'], 'output': ['json'], 'params': { '__conduit__': { 'token': 'AAAA' }, 'phids': ['PHID-APPS-PhabricatorHeraldApplication'] } }] self.assertEqual(len(http_requests), len(expected)) for i in range(len(expected)): rparams = http_requests[i].parsed_body rparams['params'] = json.loads(rparams['params'][0]) self.assertIn(rparams, expected)
def setUp(self): super().setUp() self.backend = Phabricator(PHABRICATOR_URL, 'AAAA', archive=self.archive)