def test_search_fields(self): """Test whether the search_fields is properly set""" setup_http_server() confluence = Confluence(CONFLUENCE_URL) hcs = [hc for hc in confluence.fetch()] hc = hcs[0] self.assertEqual(confluence.metadata_id(hc['data']), hc['search_fields']['item_id']) self.assertListEqual(hc['search_fields'][SEARCH_ANCESTOR_IDS], ['128548867', '167848895', '128548921']) self.assertEqual(hc['search_fields'][SEARCH_CONTENT_ID], '1') self.assertEqual(hc['search_fields'][SEARCH_CONTENT_VERSION_NUMBER], 1) hc = hcs[1] self.assertEqual(confluence.metadata_id(hc['data']), hc['search_fields']['item_id']) self.assertListEqual(hc['search_fields'][SEARCH_ANCESTOR_IDS], ['128548867', '167848895', '128548921']) self.assertEqual(hc['search_fields'][SEARCH_CONTENT_ID], '1') self.assertEqual(hc['search_fields'][SEARCH_CONTENT_VERSION_NUMBER], 2) hc = hcs[2] self.assertEqual(confluence.metadata_id(hc['data']), hc['search_fields']['item_id']) self.assertListEqual(hc['search_fields'][SEARCH_ANCESTOR_IDS], []) self.assertEqual(hc['search_fields'][SEARCH_CONTENT_ID], '2') self.assertEqual(hc['search_fields'][SEARCH_CONTENT_VERSION_NUMBER], 1) hc = hcs[3] self.assertEqual(confluence.metadata_id(hc['data']), hc['search_fields']['item_id']) self.assertListEqual(hc['search_fields'][SEARCH_ANCESTOR_IDS], []) self.assertEqual(hc['search_fields'][SEARCH_CONTENT_ID], 'att1') self.assertEqual(hc['search_fields'][SEARCH_CONTENT_VERSION_NUMBER], 1)
def test_fetch_from_non_set_cache(self): """Test if a error is raised when the cache was not set""" confluence = Confluence(CONFLUENCE_URL) with self.assertRaises(CacheError): _ = [hc for hc in confluence.fetch_from_cache()]
def test_fetch_removed_content(self): """Test if the method works when a content is not found""" http_requests = setup_http_server() # Set server to return a 404 error httpretty.register_uri(httpretty.GET, CONFLUENCE_HISTORICAL_CONTENT_1, status=404, body="Mock 404 error") confluence = Confluence(CONFLUENCE_URL) hcs = [hc for hc in confluence.fetch()] expected = [ ('2', 1, 'eccc9b6c961f8753ee37fb8d077be80b9bea0976', 1467402626.0, 'http://example.com/display/fuel/Colorado+Release+Status'), ('att1', 1, 'ff21bba0b1968adcec2588e94ff42782330174dd', 1467831550.0, 'http://example.com/pages/viewpage.action?pageId=131079&preview=%2F131079%2F131085%2Fstep05-04.png') ] self.assertEqual(len(hcs), len(expected)) for x in range(len(hcs)): hc = hcs[x] self.assertEqual(hc['data']['id'], expected[x][0]) self.assertEqual(hc['data']['version']['number'], expected[x][1]) self.assertEqual(hc['uuid'], expected[x][2]) self.assertEqual(hc['origin'], CONFLUENCE_URL) self.assertEqual(hc['updated_on'], expected[x][3]) self.assertEqual(hc['data']['content_url'], expected[x][4]) self.assertEqual(hc['category'], 'historical content') self.assertEqual(hc['tag'], CONFLUENCE_URL) # Check requests expected = [ { 'cql': ["lastModified>='1970-01-01 00:00' order by lastModified"], 'limit': ['200'] }, { 'cql': ["lastModified>='1970-01-01 00:00' order by lastModified"], 'start': ['2'], 'limit': ['2'] # Hardcoded in JSON dataset }, { 'expand': ['body.storage,history,version'], 'status': ['historical'], 'version': ['1'] }, { 'expand': ['body.storage,history,version'], 'status': ['historical'], 'version': ['1'] } ] 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_empty_cache(self): """Test if there are not any content returned when the cache is empty""" cache = Cache(self.tmp_path) confluence = Confluence(CONFLUENCE_URL, cache=cache) cached_hcs = [hc for hc in confluence.fetch_from_cache()] self.assertEqual(len(cached_hcs), 0)
def test_fetch_status_code_not_handled(self): """Test whether an exception is thrown when the API returns a HTTP status code different from 404 and 500 when fetching historical contents. """ setup_http_server(not_handle_status_code=True) confluence = Confluence(CONFLUENCE_URL) with self.assertRaises(requests.exceptions.HTTPError): _ = [hc for hc in confluence.fetch(from_date=None)]
def test_initialization(self): """Test whether attributes are initializated""" confluence = Confluence(CONFLUENCE_URL, tag='test') self.assertEqual(confluence.url, CONFLUENCE_URL) self.assertEqual(confluence.origin, CONFLUENCE_URL) self.assertEqual(confluence.tag, 'test') self.assertIsInstance(confluence.client, ConfluenceClient) # When tag is empty or None it will be set to # the value in url confluence = Confluence(CONFLUENCE_URL) self.assertEqual(confluence.url, CONFLUENCE_URL) self.assertEqual(confluence.origin, CONFLUENCE_URL) self.assertEqual(confluence.tag, CONFLUENCE_URL) confluence = Confluence(CONFLUENCE_URL, tag='') self.assertEqual(confluence.url, CONFLUENCE_URL) self.assertEqual(confluence.origin, CONFLUENCE_URL) self.assertEqual(confluence.tag, CONFLUENCE_URL)
def test_initialization(self): """Test whether attributes are initializated""" confluence = Confluence(CONFLUENCE_URL, tag='test') self.assertEqual(confluence.url, CONFLUENCE_URL) self.assertEqual(confluence.origin, CONFLUENCE_URL) self.assertEqual(confluence.tag, 'test') self.assertIsNone(confluence.client) self.assertTrue(confluence.ssl_verify) # When tag is empty or None it will be set to # the value in url confluence = Confluence(CONFLUENCE_URL) self.assertEqual(confluence.url, CONFLUENCE_URL) self.assertEqual(confluence.origin, CONFLUENCE_URL) self.assertEqual(confluence.tag, CONFLUENCE_URL) confluence = Confluence(CONFLUENCE_URL, tag='', ssl_verify=False) self.assertEqual(confluence.url, CONFLUENCE_URL) self.assertEqual(confluence.origin, CONFLUENCE_URL) self.assertEqual(confluence.tag, CONFLUENCE_URL) self.assertFalse(confluence.ssl_verify)
def test_fetch_from_cache(self): """Test whether the cache works""" http_requests = setup_http_server() # First, we fetch the contents from the server, # storing them in a cache cache = Cache(self.tmp_path) confluence = Confluence(CONFLUENCE_URL, cache=cache) hcs = [hc for hc in confluence.fetch()] self.assertEqual(len(http_requests), 6) # Now, we get the contents from the cache. # The contents should be the same and there won't be # any new request to the server cached_hcs = [hc for hc in confluence.fetch_from_cache()] self.assertEqual(len(cached_hcs), len(hcs)) expected = [ ('1', 1, '5b8bf26bfd906214ec82f5a682649e8f6fe87984', 1465589121.0, 'http://example.com/display/meetings/TSC'), ('1', 2, '94b8015bcb52fca1155ecee14153c8634856f1bc', 1466107110.0, 'http://example.com/display/meetings/TSC'), ('2', 1, 'eccc9b6c961f8753ee37fb8d077be80b9bea0976', 1467402626.0, 'http://example.com/display/fuel/Colorado+Release+Status'), ('att1', 1, 'ff21bba0b1968adcec2588e94ff42782330174dd', 1467831550.0, 'http://example.com/pages/viewpage.action?pageId=131079&preview=%2F131079%2F131085%2Fstep05-04.png' ) ] self.assertEqual(len(cached_hcs), len(expected)) for x in range(len(cached_hcs)): hc = cached_hcs[x] self.assertEqual(hc['data']['id'], expected[x][0]) self.assertEqual(hc['data']['version']['number'], expected[x][1]) self.assertEqual(hc['uuid'], expected[x][2]) self.assertEqual(hc['origin'], CONFLUENCE_URL) self.assertEqual(hc['updated_on'], expected[x][3]) self.assertEqual(hc['data']['content_url'], expected[x][4]) self.assertEqual(hc['category'], 'historical content') self.assertEqual(hc['tag'], CONFLUENCE_URL) # No more requests were sent self.assertEqual(len(http_requests), 6)
def test_fetch_spaces(self): """Test it fetches and parses a list of contents in specific spaces""" http_requests = setup_http_server() confluence = Confluence(CONFLUENCE_URL, spaces=["TEST"]) hcs = [hc for hc in confluence.fetch()] expected = [ ('3', 3, '93cd38039f3987594d46508396317734131823c1', 1610466397.336, 'http://example.com/display/TEST/PERCEVAL'), ] self.assertEqual(len(hcs), len(expected)) for x in range(len(hcs)): hc = hcs[x] self.assertEqual(hc['data']['id'], expected[x][0]) self.assertEqual(hc['data']['version']['number'], expected[x][1]) self.assertEqual(hc['uuid'], expected[x][2]) self.assertEqual(hc['origin'], CONFLUENCE_URL) self.assertEqual(hc['updated_on'], expected[x][3]) self.assertEqual(hc['data']['content_url'], expected[x][4]) self.assertEqual(hc['category'], "historical content") self.assertEqual(hc['tag'], CONFLUENCE_URL) self.assertEqual(hc['data']['_expandable']['space'], '/rest/api/space/TEST') # Check requests expected = [ { 'cql': ["space in (TEST) and lastModified>='1970-01-01 00:00' order by lastModified"], 'limit': ['200'], 'expand': ['ancestors'] }, { 'expand': ['body.storage,history,version'], 'status': ['historical'], 'version': ['1'] } ] self.assertEqual(len(http_requests), len(expected)) for i in range(len(expected)): self.assertDictEqual(http_requests[i].querystring, expected[i])
def test_fetch_empty(self): """Test if nothing is returnerd when there are no contents""" http_requests = setup_http_server() from_date = datetime.datetime(2016, 7, 8, 0, 0, 0) confluence = Confluence(CONFLUENCE_URL) hcs = [hc for hc in confluence.fetch(from_date=from_date)] self.assertEqual(len(hcs), 0) # Check requests expected = { 'cql': ["lastModified>='2016-07-08 00:00' order by lastModified"], 'limit': ['200'] } self.assertEqual(len(http_requests), 1) self.assertDictEqual(http_requests[0].querystring, expected)
def setUp(self): super().setUp() self.backend_write_archive = Confluence(CONFLUENCE_URL, archive=self.archive) self.backend_read_archive = Confluence(CONFLUENCE_URL, archive=self.archive)
def test_fetch_from_date(self): """Test if a list of contents is returned from a given date""" http_requests = setup_http_server() from_date = datetime.datetime(2016, 6, 16, 0, 0, 0) confluence = Confluence(CONFLUENCE_URL) hcs = [hc for hc in confluence.fetch(from_date=from_date)] # On this test case the first version of content #1 # will not be returned becasue this version was # created before the given date expected = [ ('1', 2, '94b8015bcb52fca1155ecee14153c8634856f1bc', 1466107110.0, 'http://example.com/display/meetings/TSC'), ('2', 1, 'eccc9b6c961f8753ee37fb8d077be80b9bea0976', 1467402626.0, 'http://example.com/display/fuel/Colorado+Release+Status'), ('att1', 1, 'ff21bba0b1968adcec2588e94ff42782330174dd', 1467831550.0, 'http://example.com/pages/viewpage.action?pageId=131079&preview=%2F131079%2F131085%2Fstep05-04.png') ] self.assertEqual(len(hcs), len(expected)) for x in range(len(hcs)): hc = hcs[x] self.assertEqual(hc['data']['id'], expected[x][0]) self.assertEqual(hc['data']['version']['number'], expected[x][1]) self.assertEqual(hc['uuid'], expected[x][2]) self.assertEqual(hc['origin'], CONFLUENCE_URL) self.assertEqual(hc['updated_on'], expected[x][3]) self.assertEqual(hc['data']['content_url'], expected[x][4]) self.assertEqual(hc['category'], 'historical content') self.assertEqual(hc['tag'], CONFLUENCE_URL) # Check requests expected = [ { 'cql': ["lastModified>='2016-06-16 00:00' order by lastModified"], 'limit': ['200'], 'expand': ['ancestors'] }, { # Hardcoded in JSON dataset 'cql': ["lastModified>='1970-01-01 00:00' order by lastModified"], 'start': ['2'], 'limit': ['2'] }, { 'expand': ['body.storage,history,version'], 'status': ['historical'], 'version': ['1'] }, { 'expand': ['body.storage,history,version'], 'status': ['historical'], 'version': ['2'] }, { 'expand': ['body.storage,history,version'], 'status': ['historical'], 'version': ['3'] }, { 'expand': ['body.storage,history,version'], 'status': ['historical'], 'version': ['1'] }, { 'expand': ['body.storage,history,version'], 'status': ['historical'], 'version': ['1'] } ] self.assertEqual(len(http_requests), len(expected)) for i in range(len(expected)): self.assertDictEqual(http_requests[i].querystring, expected[i])
def test_fetch(self): """Test it it fetches and parses a list of contents""" http_requests = setup_http_server() confluence = Confluence(CONFLUENCE_URL) hcs = [hc for hc in confluence.fetch()] expected = [ ('1', 1, '5b8bf26bfd906214ec82f5a682649e8f6fe87984', 1465589121.0, 'http://example.com/display/meetings/TSC'), ('1', 2, '94b8015bcb52fca1155ecee14153c8634856f1bc', 1466107110.0, 'http://example.com/display/meetings/TSC'), ('2', 1, 'eccc9b6c961f8753ee37fb8d077be80b9bea0976', 1467402626.0, 'http://example.com/display/fuel/Colorado+Release+Status'), ('att1', 1, 'ff21bba0b1968adcec2588e94ff42782330174dd', 1467831550.0, 'http://example.com/pages/viewpage.action?pageId=131079&preview=%2F131079%2F131085%2Fstep05-04.png') ] self.assertEqual(len(hcs), len(expected)) for x in range(len(hcs)): hc = hcs[x] self.assertEqual(hc['data']['id'], expected[x][0]) self.assertEqual(hc['data']['version']['number'], expected[x][1]) self.assertEqual(hc['uuid'], expected[x][2]) self.assertEqual(hc['origin'], CONFLUENCE_URL) self.assertEqual(hc['updated_on'], expected[x][3]) self.assertEqual(hc['data']['content_url'], expected[x][4]) self.assertEqual(hc['category'], "historical content") self.assertEqual(hc['tag'], CONFLUENCE_URL) # Check requests expected = [ { 'cql': ["lastModified>='1970-01-01 00:00' order by lastModified"], 'limit': ['200'], 'expand': ['ancestors'] }, { 'cql': ["lastModified>='1970-01-01 00:00' order by lastModified"], 'start': ['2'], 'limit': ['2'] # Hardcoded in JSON dataset }, { 'expand': ['body.storage,history,version'], 'status': ['historical'], 'version': ['1'] }, { 'expand': ['body.storage,history,version'], 'status': ['historical'], 'version': ['2'] }, { 'expand': ['body.storage,history,version'], 'status': ['historical'], 'version': ['3'] }, { 'expand': ['body.storage,history,version'], 'status': ['historical'], 'version': ['1'] }, { 'expand': ['body.storage,history,version'], 'status': ['historical'], 'version': ['1'] } ] self.assertEqual(len(http_requests), len(expected)) for i in range(len(expected)): self.assertDictEqual(http_requests[i].querystring, expected[i])
def setUp(self): super().setUp() self.backend = Confluence(CONFLUENCE_URL, archive=self.archive)
#! /usr/bin/env python3 from datetime import datetime, timedelta from perceval.backends.core.confluence import Confluence # hostname hostname = "https://wiki.opnfv.org/" # retrieve only reviews changed since one day ago from_date = datetime.now() - timedelta(days=1) repo = Confluence(hostname) # fetch all reviews as an iterator, and iterate it printing each review id for review in repo.fetch(from_date=from_date): print(review) # fetch all reviewers for review in repo.fetch(from_date=from_date): print(review['data']['history']['createdBy']['displayName'])