예제 #1
0
    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)
예제 #2
0
    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()]
예제 #3
0
    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])
예제 #4
0
    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)
예제 #5
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)]
예제 #6
0
    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)
예제 #7
0
    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)
예제 #8
0
    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)
예제 #9
0
    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])
예제 #10
0
    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)
예제 #11
0
 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)
예제 #12
0
    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])
예제 #13
0
    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])
예제 #14
0
 def setUp(self):
     super().setUp()
     self.backend = Confluence(CONFLUENCE_URL, archive=self.archive)
예제 #15
0
#! /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'])