コード例 #1
0
ファイル: test_jira.py プロジェクト: celan/perceval
    def test_fetch_from_non_set_cache(self):
        """Test if a error is raised when the cache was not set"""

        jira = Jira(JIRA_SERVER_URL)

        with self.assertRaises(CacheError):
            _ = cache_issues = [cache_issue for cache_issue in jira.fetch_from_cache()]
コード例 #2
0
    def test_fetch_from_date(self):
        """Test whether a list of issues is returned from a given date"""

        from_date = str_to_datetime('2015-01-01')

        bodies_json = read_file('data/jira/jira_issues_page_2.json')
        empty_comment = read_file('data/jira/jira_comments_issue_empty.json')

        body = read_file('data/jira/jira_fields.json')

        httpretty.register_uri(httpretty.GET,
                               JIRA_SEARCH_URL,
                               body=bodies_json, status=200)

        httpretty.register_uri(httpretty.GET,
                               JIRA_FIELDS_URL,
                               body=body, status=200)

        httpretty.register_uri(httpretty.GET,
                               JIRA_ISSUE_3_COMMENTS_URL,
                               body=empty_comment,
                               status=200)

        jira = Jira(JIRA_SERVER_URL)

        issues = [issue for issue in jira.fetch(from_date=from_date)]

        self.assertEqual(len(issues), 1)

        issue = issues[0]
        self.assertEqual(issue['origin'], 'http://example.com')
        self.assertEqual(issue['uuid'], '1c7765e2a5d27495cf389f5f951c544693c4655f')
        self.assertEqual(issue['updated_on'], 1457006245)
        self.assertEqual(issue['category'], 'issue')
        self.assertEqual(issue['tag'], 'http://example.com')
        self.assertEqual(issue['data']['comments_data'], [])

        requests = httpretty.HTTPretty.latest_requests
        request = requests[-2]
        expected_req = {
            'expand': ['renderedFields,transitions,operations,changelog'],
            'jql': ['updated > 1420070400000 order by updated asc'],
            'startAt': ['0'],
            'maxResults': ['100']
        }

        self.assertEqual(request.method, 'GET')
        self.assertRegex(request.path, '/rest/api/2/search')
        self.assertDictEqual(request.querystring, expected_req)

        request = requests[-1]
        expected_req = {
            'jql': ['updated > 0 order by updated asc'],
            'startAt': ['0'],
            'maxResults': ['100']
        }

        self.assertEqual(request.method, 'GET')
        self.assertRegex(request.path, '/rest/api/2/issue/3/comment')
        self.assertDictEqual(request.querystring, expected_req)
コード例 #3
0
    def test_fetch_empty(self):
        """Test whether it works when no issues are fetched"""

        bodies_json = read_file('data/jira/jira_issues_page_empty.json')

        body = read_file('data/jira/jira_fields.json')

        httpretty.register_uri(httpretty.GET,
                               JIRA_SEARCH_URL,
                               body=bodies_json, status=200)

        httpretty.register_uri(httpretty.GET,
                               JIRA_FIELDS_URL,
                               body=body, status=200)

        jira = Jira(JIRA_SERVER_URL)

        issues = [issue for issue in jira.fetch()]

        expected_req = {
            'expand': ['renderedFields,transitions,operations,changelog'],
            'jql': ['updated > 0 order by updated asc'],
            'startAt': ['0'],
            'maxResults': ['100']
        }

        self.assertEqual(len(issues), 0)

        request = httpretty.last_request()
        self.assertEqual(request.method, 'GET')
        self.assertRegex(request.path, '/rest/api/2/search')
        self.assertDictEqual(request.querystring, expected_req)
コード例 #4
0
 def setUp(self):
     super().setUp()
     self.backend_write_archive = Jira(JIRA_SERVER_URL,
                                       user="******",
                                       password="******",
                                       archive=self.archive)
     self.backend_read_archive = Jira(JIRA_SERVER_URL, archive=self.archive)
コード例 #5
0
    def test_initialization(self):
        """Test whether attributes are initialized"""

        jira = Jira(JIRA_SERVER_URL, tag='test',
                    max_results=5)

        self.assertEqual(jira.url, JIRA_SERVER_URL)
        self.assertEqual(jira.origin, JIRA_SERVER_URL)
        self.assertEqual(jira.tag, 'test')
        self.assertEqual(jira.max_results, 5)
        self.assertIsNone(jira.client)
        self.assertTrue(jira.ssl_verify)

        # When tag is empty or None it will be set to
        # the value in url
        jira = Jira(JIRA_SERVER_URL)
        self.assertEqual(jira.url, JIRA_SERVER_URL)
        self.assertEqual(jira.origin, JIRA_SERVER_URL)
        self.assertEqual(jira.tag, JIRA_SERVER_URL)

        jira = Jira(JIRA_SERVER_URL, tag='', ssl_verify=False)
        self.assertEqual(jira.url, JIRA_SERVER_URL)
        self.assertEqual(jira.origin, JIRA_SERVER_URL)
        self.assertEqual(jira.tag, JIRA_SERVER_URL)
        self.assertFalse(jira.ssl_verify)
コード例 #6
0
ファイル: test_jira.py プロジェクト: celan/perceval
    def test_fetch_from_cache_empty(self):
        """Test if there are not any issues returned when the cache is empty"""

        cache = Cache(self.tmp_path)

        jira = Jira(JIRA_SERVER_URL, cache=cache)
        cache_issues = [cache_issue for cache_issue in jira.fetch_from_cache()]

        self.assertEqual(len(cache_issues), 0)
コード例 #7
0
    def test_parse_issues(self):
        """Test issues parsing"""

        raw_parse_json = read_file('data/jira/jira_issues_page_1.json')
        parse_json = read_file('data/jira/jira_issues_parse_expected.json')

        issues = Jira.parse_issues(raw_parse_json)

        result = [issue for issue in issues]

        parse = json.loads(parse_json)

        self.assertTrue(len(result), 2)

        self.assertEqual(result[0]["id"], "35851")
        self.assertEqual(result[0]["key"], "HELP-6043")
        self.assertEqual(result[0]["self"], "https://jira.fiware.org/rest/api/2/issue/35851")
        self.assertEqual(result[0]["expand"],
                         "operations,editmeta,changelog,transitions,renderedFields")
        self.assertEqual(len(result[0]["fields"]), 27)
        self.assertDictEqual(result[0]["fields"], parse[0]["fields"])

        self.assertEqual(result[1]["id"], "35850")
        self.assertEqual(result[1]["key"], "HELP-6042")
        self.assertEqual(result[1]["self"], "https://jira.fiware.org/rest/api/2/issue/35850")
        self.assertEqual(result[1]["expand"],
                         "operations,editmeta,changelog,transitions,renderedFields")
        self.assertEqual(len(result[1]["fields"]), 27)
        self.assertDictEqual(result[1]["fields"], parse[1]["fields"])
コード例 #8
0
ファイル: test_jira.py プロジェクト: valeriocos/perceval
    def test_fetch_from_date(self):
        """Test whether a list of issues is returned from a given date"""

        from_date = str_to_datetime('2015-01-01')

        bodies_json = read_file('data/jira/jira_issues_page_2.json')

        body = read_file('data/jira/jira_fields.json')

        httpretty.register_uri(httpretty.GET,
                               JIRA_SEARCH_URL,
                               body=bodies_json,
                               status=200)

        httpretty.register_uri(httpretty.GET,
                               JIRA_FIELDS_URL,
                               body=body,
                               status=200)

        jira = Jira(JIRA_SERVER_URL)

        issues = [issue for issue in jira.fetch(from_date=from_date)]

        expected_req = {
            'expand': ['renderedFields,transitions,operations,changelog'],
            'jql': ['updated > 1420070400000 order by updated asc'],
            'startAt': ['0'],
            'maxResults': ['100']
        }

        self.assertEqual(len(issues), 1)

        self.assertEqual(issues[0]['origin'], 'http://example.com')
        self.assertEqual(issues[0]['uuid'],
                         '2e988d555915991228d81144b018c8321d628265')
        self.assertEqual(issues[0]['updated_on'], 1457006245)
        self.assertEqual(issues[0]['category'], 'issue')
        self.assertEqual(issues[0]['tag'], 'http://example.com')

        request = httpretty.last_request()
        self.assertEqual(request.method, 'GET')
        self.assertRegex(request.path, '/rest/api/2/search')
        self.assertDictEqual(request.querystring, expected_req)
コード例 #9
0
    def test_initialization(self):
        """Test whether attributes are initializated"""

        jira = Jira(JIRA_SERVER_URL, tag='test', max_issues=5)

        self.assertEqual(jira.url, JIRA_SERVER_URL)
        self.assertEqual(jira.origin, JIRA_SERVER_URL)
        self.assertEqual(jira.tag, 'test')
        self.assertEqual(jira.max_issues, 5)
        self.assertIsInstance(jira.client, JiraClient)

        # When tag is empty or None it will be set to
        # the value in url
        jira = Jira(JIRA_SERVER_URL)
        self.assertEqual(jira.url, JIRA_SERVER_URL)
        self.assertEqual(jira.origin, JIRA_SERVER_URL)
        self.assertEqual(jira.tag, JIRA_SERVER_URL)

        jira = Jira(JIRA_SERVER_URL, tag='')
        self.assertEqual(jira.url, JIRA_SERVER_URL)
        self.assertEqual(jira.origin, JIRA_SERVER_URL)
        self.assertEqual(jira.tag, JIRA_SERVER_URL)
コード例 #10
0
ファイル: test_jira.py プロジェクト: bt0DotNinja/perceval
    def test_has_caching(self):
        """Test if it returns False when has_caching is called"""

        self.assertEqual(Jira.has_caching(), False)
コード例 #11
0
ファイル: test_jira.py プロジェクト: sduenas/perceval
 def setUp(self):
     super().setUp()
     self.backend = Jira(JIRA_SERVER_URL, archive=self.archive)
コード例 #12
0
    def test_fetch(self):
        """Test whether a list of issues is returned"""

        requests = []

        bodies_json = [read_file('data/jira/jira_issues_page_1.json'),
                       read_file('data/jira/jira_issues_page_2.json')]

        body = read_file('data/jira/jira_fields.json')

        def request_callback(method, uri, headers):
            body = bodies_json.pop(0)
            requests.append(httpretty.last_request())
            return (200, headers, body)

        httpretty.register_uri(httpretty.GET,
                               JIRA_SEARCH_URL,
                               responses=[httpretty.Response(body=request_callback)
                                          for _ in range(2)])

        httpretty.register_uri(httpretty.GET,
                               JIRA_FIELDS_URL,
                               body=body, status=200)

        jira = Jira(JIRA_SERVER_URL)

        issues = [issue for issue in jira.fetch()]

        body_json = json.loads(body)

        custom_fields = filter_custom_fields(body_json)

        expected_req = [
            {
                'expand': ['renderedFields,transitions,operations,changelog'],
                'jql': ['updated > 0 order by updated asc'],
                'startAt': ['0'],
                'maxResults': ['100']
            },
            {
                'expand': ['renderedFields,transitions,operations,changelog'],
                'jql': ['updated > 0 order by updated asc'],
                'startAt': ['2'],
                'maxResults': ['100']
            }
        ]

        for i in range(len(expected_req)):
            self.assertEqual(requests[i].method, 'GET')
            self.assertRegex(requests[i].path, '/rest/api/2/search')
            self.assertDictEqual(requests[i].querystring, expected_req[i])

        self.assertEqual(len(issues), 3)

        self.assertEqual(issues[0]['origin'], 'http://example.com')
        self.assertEqual(issues[0]['uuid'], 'dfe008e19e2b720d1d377607680e90c250134164')
        self.assertEqual(issues[0]['updated_on'], 1457015567)
        self.assertEqual(issues[0]['category'], 'issue')
        self.assertEqual(issues[0]['tag'], 'http://example.com')
        self.assertEqual(issues[0]['data']['key'], 'HELP-6043')
        self.assertEqual(issues[0]['data']['fields']['issuetype']['name'], 'extRequest')
        self.assertEqual(issues[0]['data']['fields']['creator']['name'], 'user2')
        self.assertEqual(issues[0]['data']['fields']['assignee']['name'], 'user1')
        self.assertEqual(issues[0]['data']['fields']['assignee']['name'], 'user1')
        self.assertEqual(issues[0]['data']['fields']['assignee']['name'], 'user1')
        self.assertEqual(issues[0]['data']['fields']['assignee']['name'], 'user1')
        self.assertEqual(issues[0]['data']['fields']['customfield_10301']['id'],
                         custom_fields['customfield_10301']['id'])
        self.assertEqual(issues[0]['data']['fields']['customfield_10301']['name'],
                         custom_fields['customfield_10301']['name'])
        self.assertEqual(issues[0]['data']['fields']['customfield_10400']['id'],
                         custom_fields['customfield_10400']['id'])
        self.assertEqual(issues[0]['data']['fields']['customfield_10400']['name'],
                         custom_fields['customfield_10400']['name'])
        self.assertEqual(issues[0]['data']['fields']['customfield_10600']['id'],
                         custom_fields['customfield_10600']['id'])
        self.assertEqual(issues[0]['data']['fields']['customfield_10600']['name'],
                         custom_fields['customfield_10600']['name'])
        self.assertEqual(issues[0]['data']['fields']['customfield_10603']['id'],
                         custom_fields['customfield_10603']['id'])
        self.assertEqual(issues[0]['data']['fields']['customfield_10603']['name'],
                         custom_fields['customfield_10603']['name'])

        self.assertEqual(issues[1]['origin'], 'http://example.com')
        self.assertEqual(issues[1]['uuid'], '830747ed8cc9af800fcd6284e9dccfdb11daf15b')
        self.assertEqual(issues[1]['updated_on'], 1457015417)
        self.assertEqual(issues[1]['category'], 'issue')
        self.assertEqual(issues[1]['tag'], 'http://example.com')
        self.assertEqual(issues[1]['data']['key'], 'HELP-6042')
        self.assertEqual(issues[1]['data']['fields']['issuetype']['name'], 'extRequest')
        self.assertEqual(issues[1]['data']['fields']['creator']['name'], 'user2')
        self.assertEqual(issues[1]['data']['fields']['assignee']['name'], 'user1')
        self.assertEqual(issues[1]['data']['fields']['customfield_10301']['id'],
                         custom_fields['customfield_10301']['id'])
        self.assertEqual(issues[1]['data']['fields']['customfield_10301']['name'],
                         custom_fields['customfield_10301']['name'])
        self.assertEqual(issues[1]['data']['fields']['customfield_10400']['id'],
                         custom_fields['customfield_10400']['id'])
        self.assertEqual(issues[1]['data']['fields']['customfield_10400']['name'],
                         custom_fields['customfield_10400']['name'])
        self.assertEqual(issues[1]['data']['fields']['customfield_10600']['id'],
                         custom_fields['customfield_10600']['id'])
        self.assertEqual(issues[1]['data']['fields']['customfield_10600']['name'],
                         custom_fields['customfield_10600']['name'])
        self.assertEqual(issues[1]['data']['fields']['customfield_10603']['id'],
                         custom_fields['customfield_10603']['id'])
        self.assertEqual(issues[1]['data']['fields']['customfield_10603']['name'],
                         custom_fields['customfield_10603']['name'])

        self.assertEqual(issues[2]['origin'], 'http://example.com')
        self.assertEqual(issues[2]['uuid'], '2e988d555915991228d81144b018c8321d628265')
        self.assertEqual(issues[2]['updated_on'], 1457006245)
        self.assertEqual(issues[2]['category'], 'issue')
        self.assertEqual(issues[2]['tag'], 'http://example.com')
        self.assertEqual(issues[2]['data']['key'], 'HELP-6041')
        self.assertEqual(issues[2]['data']['fields']['issuetype']['name'], 'extRequest')
        self.assertEqual(issues[2]['data']['fields']['creator']['name'], 'user2')
        self.assertEqual(issues[2]['data']['fields']['assignee']['name'], 'user3')
        self.assertEqual(issues[2]['data']['fields']['customfield_10301']['id'],
                         custom_fields['customfield_10301']['id'])
        self.assertEqual(issues[2]['data']['fields']['customfield_10301']['name'],
                         custom_fields['customfield_10301']['name'])
        self.assertEqual(issues[2]['data']['fields']['customfield_10400']['id'],
                         custom_fields['customfield_10400']['id'])
        self.assertEqual(issues[2]['data']['fields']['customfield_10400']['name'],
                         custom_fields['customfield_10400']['name'])
        self.assertEqual(issues[2]['data']['fields']['customfield_10600']['id'],
                         custom_fields['customfield_10600']['id'])
        self.assertEqual(issues[2]['data']['fields']['customfield_10600']['name'],
                         custom_fields['customfield_10600']['name'])
        self.assertEqual(issues[2]['data']['fields']['customfield_10603']['id'],
                         custom_fields['customfield_10603']['id'])
        self.assertEqual(issues[2]['data']['fields']['customfield_10603']['name'],
                         custom_fields['customfield_10603']['name'])
コード例 #13
0
    def test_has_resuming(self):
        """Test if it returns True when has_resuming is called"""

        self.assertEqual(Jira.has_resuming(), True)
コード例 #14
0
# You should have received a copy of the GNU General Public License
# along with python-examples; see the file LICENSE.  If not, write to
# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301 USA,

from datetime import datetime, timedelta
from perceval.backends.core.gerrit import Gerrit
from perceval.backends.core.jira import Jira
from pprint import pprint
# hostname
hostname = 'https://tickets.puppetlabs.com'
# retrieve only reviews changed since one day ago
from_date = datetime.now() - timedelta(days=1)

repo = Jira(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)
print(
    "---------------------------------------------------------------------------------------------------------------------------------------"
)
print(
    "---------------------------------------------------------------------------------------------------------------------------------------"
)
for review in repo.fetch(from_date=from_date):
    pprint(review['data']['fields']['creator']['displayName'])

print(
コード例 #15
0
    def test_search_fields(self):
        """Test whether the search_fields is properly set"""

        bodies_json = [read_file('data/jira/jira_issues_page_1.json'),
                       read_file('data/jira/jira_issues_page_2.json')]
        comment_json = read_file('data/jira/jira_comments_issue_page_2.json')
        empty_comment = read_file('data/jira/jira_comments_issue_empty.json')

        body = read_file('data/jira/jira_fields.json')

        def request_callback(method, uri, headers):
            body = bodies_json.pop(0)
            return 200, headers, body

        httpretty.register_uri(httpretty.GET,
                               JIRA_SEARCH_URL,
                               responses=[httpretty.Response(body=request_callback)
                                          for _ in range(2)])

        httpretty.register_uri(httpretty.GET,
                               JIRA_ISSUE_1_COMMENTS_URL,
                               body=empty_comment,
                               status=200)

        httpretty.register_uri(httpretty.GET,
                               JIRA_ISSUE_2_COMMENTS_URL,
                               body=comment_json,
                               status=200)

        httpretty.register_uri(httpretty.GET,
                               JIRA_ISSUE_3_COMMENTS_URL,
                               body=empty_comment,
                               status=200)

        httpretty.register_uri(httpretty.GET,
                               JIRA_FIELDS_URL,
                               body=body, status=200)

        jira = Jira(JIRA_SERVER_URL)
        issues = [issue for issue in jira.fetch()]

        issue = issues[0]
        self.assertEqual(issue['origin'], 'http://example.com')
        self.assertEqual(issue['uuid'], '6a7ba2a01aee56603b9d8a5f6b40c843fc089b2f')
        self.assertEqual(issue['updated_on'], 1457015567)
        self.assertEqual(issue['category'], 'issue')
        self.assertEqual(issue['tag'], 'http://example.com')
        self.assertEqual(jira.metadata_id(issue['data']), issue['search_fields']['item_id'])
        self.assertEqual(issue['data']['fields']['project']['id'], '10841')
        self.assertEqual(issue['data']['fields']['project']['id'], issue['search_fields']['project_id'])
        self.assertEqual(issue['data']['fields']['project']['key'], 'HELP')
        self.assertEqual(issue['data']['fields']['project']['key'], issue['search_fields']['project_key'])
        self.assertEqual(issue['data']['fields']['project']['name'], 'Help-Desk')
        self.assertEqual(issue['data']['fields']['project']['name'], issue['search_fields']['project_name'])
        self.assertEqual(issue['data']['key'], 'HELP-6043')
        self.assertEqual(issue['data']['key'], issue['search_fields']['issue_key'])

        issue = issues[1]
        self.assertEqual(issue['origin'], 'http://example.com')
        self.assertEqual(issue['uuid'], '3c3d67925b108a37f88cc6663f7f7dd493fa818c')
        self.assertEqual(issue['updated_on'], 1457015417)
        self.assertEqual(issue['category'], 'issue')
        self.assertEqual(issue['tag'], 'http://example.com')
        self.assertEqual(jira.metadata_id(issue['data']), issue['search_fields']['item_id'])
        self.assertEqual(issue['data']['fields']['project']['id'], '10841')
        self.assertEqual(issue['data']['fields']['project']['id'], issue['search_fields']['project_id'])
        self.assertEqual(issue['data']['fields']['project']['key'], 'HELP')
        self.assertEqual(issue['data']['fields']['project']['key'], issue['search_fields']['project_key'])
        self.assertEqual(issue['data']['fields']['project']['name'], 'Help-Desk')
        self.assertEqual(issue['data']['fields']['project']['name'], issue['search_fields']['project_name'])
        self.assertEqual(issue['data']['key'], 'HELP-6042')
        self.assertEqual(issue['data']['key'], issue['search_fields']['issue_key'])

        issue = issues[2]
        self.assertEqual(issue['origin'], 'http://example.com')
        self.assertEqual(issue['uuid'], '1c7765e2a5d27495cf389f5f951c544693c4655f')
        self.assertEqual(issue['updated_on'], 1457006245)
        self.assertEqual(issue['category'], 'issue')
        self.assertEqual(issue['tag'], 'http://example.com')
        self.assertEqual(jira.metadata_id(issue['data']), issue['search_fields']['item_id'])
        self.assertEqual(issue['data']['fields']['project']['id'], '10843')
        self.assertEqual(issue['data']['fields']['project']['id'], issue['search_fields']['project_id'])
        self.assertEqual(issue['data']['fields']['project']['key'], 'HELP')
        self.assertEqual(issue['data']['fields']['project']['key'], issue['search_fields']['project_key'])
        self.assertEqual(issue['data']['fields']['project']['name'], 'Help-Desk')
        self.assertEqual(issue['data']['fields']['project']['name'], issue['search_fields']['project_name'])
        self.assertEqual(issue['data']['key'], 'HELP-6041')
        self.assertEqual(issue['data']['key'], issue['search_fields']['issue_key'])
コード例 #16
0
    def test_fetch(self):
        """Test whether a list of issues is returned"""

        requests = []

        bodies_json = [read_file('data/jira/jira_issues_page_1.json'),
                       read_file('data/jira/jira_issues_page_2.json')]
        comment_json = read_file('data/jira/jira_comments_issue_page_2.json')
        empty_comment = read_file('data/jira/jira_comments_issue_empty.json')

        body = read_file('data/jira/jira_fields.json')

        def request_callback(method, uri, headers):
            body = bodies_json.pop(0)
            requests.append(httpretty.last_request())
            return 200, headers, body

        httpretty.register_uri(httpretty.GET,
                               JIRA_SEARCH_URL,
                               responses=[httpretty.Response(body=request_callback)
                                          for _ in range(2)])

        httpretty.register_uri(httpretty.GET,
                               JIRA_ISSUE_1_COMMENTS_URL,
                               body=empty_comment,
                               status=200)

        httpretty.register_uri(httpretty.GET,
                               JIRA_ISSUE_2_COMMENTS_URL,
                               body=comment_json,
                               status=200)

        httpretty.register_uri(httpretty.GET,
                               JIRA_ISSUE_3_COMMENTS_URL,
                               body=empty_comment,
                               status=200)

        httpretty.register_uri(httpretty.GET,
                               JIRA_FIELDS_URL,
                               body=body, status=200)

        jira = Jira(JIRA_SERVER_URL)

        issues = [issue for issue in jira.fetch()]

        body_json = json.loads(body)

        custom_fields = filter_custom_fields(body_json)

        expected_req = [
            {
                'expand': ['renderedFields,transitions,operations,changelog'],
                'jql': ['updated > 0 order by updated asc'],
                'startAt': ['0'],
                'maxResults': ['100']
            },
            {
                'expand': ['renderedFields,transitions,operations,changelog'],
                'jql': ['updated > 0 order by updated asc'],
                'startAt': ['2'],
                'maxResults': ['100']
            }
        ]

        for i in range(len(expected_req)):
            self.assertEqual(requests[i].method, 'GET')
            self.assertRegex(requests[i].path, '/rest/api/2/search')
            self.assertDictEqual(requests[i].querystring, expected_req[i])

        self.assertEqual(len(issues), 3)

        issue = issues[0]
        self.assertEqual(issue['origin'], 'http://example.com')
        self.assertEqual(issue['uuid'], '6a7ba2a01aee56603b9d8a5f6b40c843fc089b2f')
        self.assertEqual(issue['updated_on'], 1457015567)
        self.assertEqual(issue['category'], 'issue')
        self.assertEqual(issue['tag'], 'http://example.com')
        self.assertEqual(issue['data']['key'], 'HELP-6043')
        self.assertEqual(issue['data']['fields']['issuetype']['name'], 'extRequest')
        self.assertEqual(issue['data']['fields']['creator']['name'], 'user2')
        self.assertEqual(issue['data']['fields']['assignee']['name'], 'user1')
        self.assertEqual(issue['data']['fields']['assignee']['name'], 'user1')
        self.assertEqual(issue['data']['fields']['assignee']['name'], 'user1')
        self.assertEqual(issue['data']['fields']['assignee']['name'], 'user1')
        self.assertEqual(issue['data']['fields']['customfield_10301']['id'],
                         custom_fields['customfield_10301']['id'])
        self.assertEqual(issue['data']['fields']['customfield_10301']['name'],
                         custom_fields['customfield_10301']['name'])
        self.assertEqual(issue['data']['fields']['customfield_10400']['id'],
                         custom_fields['customfield_10400']['id'])
        self.assertEqual(issue['data']['fields']['customfield_10400']['name'],
                         custom_fields['customfield_10400']['name'])
        self.assertEqual(issue['data']['fields']['customfield_10600']['id'],
                         custom_fields['customfield_10600']['id'])
        self.assertEqual(issue['data']['fields']['customfield_10600']['name'],
                         custom_fields['customfield_10600']['name'])
        self.assertEqual(issue['data']['fields']['customfield_10603']['id'],
                         custom_fields['customfield_10603']['id'])
        self.assertEqual(issue['data']['fields']['customfield_10603']['name'],
                         custom_fields['customfield_10603']['name'])
        self.assertEqual(issue['data']['comments_data'], [])

        issue = issues[1]
        self.assertEqual(issue['origin'], 'http://example.com')
        self.assertEqual(issue['uuid'], '3c3d67925b108a37f88cc6663f7f7dd493fa818c')
        self.assertEqual(issue['updated_on'], 1457015417)
        self.assertEqual(issue['category'], 'issue')
        self.assertEqual(issue['tag'], 'http://example.com')
        self.assertEqual(issue['data']['key'], 'HELP-6042')
        self.assertEqual(issue['data']['fields']['issuetype']['name'], 'extRequest')
        self.assertEqual(issue['data']['fields']['creator']['name'], 'user2')
        self.assertEqual(issue['data']['fields']['assignee']['name'], 'user1')
        self.assertEqual(issue['data']['fields']['customfield_10301']['id'],
                         custom_fields['customfield_10301']['id'])
        self.assertEqual(issue['data']['fields']['customfield_10301']['name'],
                         custom_fields['customfield_10301']['name'])
        self.assertEqual(issue['data']['fields']['customfield_10400']['id'],
                         custom_fields['customfield_10400']['id'])
        self.assertEqual(issue['data']['fields']['customfield_10400']['name'],
                         custom_fields['customfield_10400']['name'])
        self.assertEqual(issue['data']['fields']['customfield_10600']['id'],
                         custom_fields['customfield_10600']['id'])
        self.assertEqual(issue['data']['fields']['customfield_10600']['name'],
                         custom_fields['customfield_10600']['name'])
        self.assertEqual(issue['data']['fields']['customfield_10603']['id'],
                         custom_fields['customfield_10603']['id'])
        self.assertEqual(issue['data']['fields']['customfield_10603']['name'],
                         custom_fields['customfield_10603']['name'])
        self.assertEqual(len(issue['data']['comments_data']), 2)
        self.assertEqual(issue['data']['comments_data'][0]['author']['displayName'], 'Tim Monks')
        self.assertEqual(issue['data']['comments_data'][1]['author']['displayName'], 'Scott Monks')

        issue = issues[2]
        self.assertEqual(issue['origin'], 'http://example.com')
        self.assertEqual(issue['uuid'], '1c7765e2a5d27495cf389f5f951c544693c4655f')
        self.assertEqual(issue['updated_on'], 1457006245)
        self.assertEqual(issue['category'], 'issue')
        self.assertEqual(issue['tag'], 'http://example.com')
        self.assertEqual(issue['data']['key'], 'HELP-6041')
        self.assertEqual(issue['data']['fields']['issuetype']['name'], 'extRequest')
        self.assertEqual(issue['data']['fields']['creator']['name'], 'user2')
        self.assertEqual(issue['data']['fields']['assignee']['name'], 'user3')
        self.assertEqual(issue['data']['fields']['customfield_10301']['id'],
                         custom_fields['customfield_10301']['id'])
        self.assertEqual(issue['data']['fields']['customfield_10301']['name'],
                         custom_fields['customfield_10301']['name'])
        self.assertEqual(issue['data']['fields']['customfield_10400']['id'],
                         custom_fields['customfield_10400']['id'])
        self.assertEqual(issue['data']['fields']['customfield_10400']['name'],
                         custom_fields['customfield_10400']['name'])
        self.assertEqual(issue['data']['fields']['customfield_10600']['id'],
                         custom_fields['customfield_10600']['id'])
        self.assertEqual(issue['data']['fields']['customfield_10600']['name'],
                         custom_fields['customfield_10600']['name'])
        self.assertEqual(issue['data']['fields']['customfield_10603']['id'],
                         custom_fields['customfield_10603']['id'])
        self.assertEqual(issue['data']['fields']['customfield_10603']['name'],
                         custom_fields['customfield_10603']['name'])
        self.assertEqual(issue['data']['comments_data'], [])
コード例 #17
0
class JIRAImporter(BugTrackerImporter):
    severity_level_map = {
        'Blocker': 4,
        'Critical': 4,
        'Major': 3,
        'Minor': 2,
        'Optional': 1,
        'Trivial': 1,
    }

    def __init__(self, bt_info):
        super().__init__(bt_info)

        self.backend = Jira(bt_info.bug_tracker.baseurl,
                            user=bt_info.bug_tracker.username,
                            password=bt_info.bug_tracker.password)

    def _import_comment(self, bug, comment_id, author, timestamp):
        """
        Import comment into `bug'.

        @arg bug btinfo.models.Bug object to import comment for
        @arg comment_id String representing comment ID
        @arg author Jira user
        @arg timestamp String timestamp in iso8601 form

        @returns True if comment was created, otherwise false
        """
        timestamp = str_to_datetime(timestamp)

        name = author['displayName']
        email = author.get('emailAddress', None)

        author = get_participant(name, email)

        _, created = bug.comments.get_or_create(comment_id=comment_id,
                                                defaults={
                                                    'author': author,
                                                    'timestamp': timestamp
                                                })

        if created:
            self.record_timestamp(timestamp)

        return created

    def iter_bugs(self):
        issues = self.backend.fetch()

        for issue in issues:
            yield issue

    def _run(self):
        for bug in self.iter_bugs():
            issue = bug['data']
            cl_date = issue['fields']['resolutiondate']

            if cl_date:
                close_date = str_to_datetime(cl_date)
            else:
                close_date = None

            try:
                with transaction.atomic():
                    bug, created = self.object.bugs.get_or_create(
                        bug_id=issue['key'],
                        defaults={'close_date': close_date})

                    logger.info("%s bug [%s]",
                                "Imported" if created else "Found",
                                issue['key'])

                    # Create first comment, since that seems to be merged into
                    # the issue
                    if created:
                        self._import_comment(bug, 'VIRTUAL-1',
                                             issue['fields']['reporter'],
                                             issue['fields']['created'])

                    # We didn't import a new bug, so set the .close_date
                    else:
                        bug.close_date = close_date
                        bug.save()

                    # TODO: comments not supported yet
                    comments = []

                    for comment in comments:
                        created_comment = self._import_comment(
                            bug, comment.id, comment.author, comment.created)

                        logger.info("%s comment [%s]",
                                    "Imported" if created_comment else "Found",
                                    comment.id)
            except:
                logger.info("Couldn't import issue [%s], skipping",
                            issue,
                            exc_info=True)
コード例 #18
0
    def __init__(self, bt_info):
        super().__init__(bt_info)

        self.backend = Jira(bt_info.bug_tracker.baseurl,
                            user=bt_info.bug_tracker.username,
                            password=bt_info.bug_tracker.password)
コード例 #19
0
ファイル: test_jira.py プロジェクト: celan/perceval
    def test_fetch_from_cache(self):
        """Test whether a list of issues is returned from cache"""

        requests = []

        bodies_json = [read_file('data/jira/jira_issues_page_1.json'),
                       read_file('data/jira/jira_issues_page_2.json')]

        body = read_file('data/jira/jira_fields.json')

        def request_callback(method, uri, headers):
            body = bodies_json.pop(0)
            requests.append(httpretty.last_request())
            return (200, headers, body)

        httpretty.register_uri(httpretty.GET,
                               JIRA_SEARCH_URL,
                               responses=[httpretty.Response(body=request_callback) \
                                          for _ in range(2)])
        httpretty.register_uri(httpretty.GET,
                               JIRA_FIELDS_URL,
                               body=body, status=200)

        # First, we fetch the issues from the server, storing them
        # in a cache
        cache = Cache(self.tmp_path)
        jira = Jira(JIRA_SERVER_URL, cache=cache)

        issues = [issue for issue in jira.fetch()]
        del issues[0]['timestamp']

        # Now, we get the issues from the cache.
        # The contents should be the same and there won't be
        # any new request to the server
        cache_issues = [cache_issue for cache_issue in jira.fetch_from_cache()]

        expected_req = [{
                            'expand': ['renderedFields,transitions,operations,changelog'],
                            'jql': ['updated > 0 order by updated asc'],
                            'startAt': ['0']
                        },
                        {
                            'expand': ['renderedFields,transitions,operations,changelog'],
                            'jql': ['updated > 0 order by updated asc'],
                            'startAt': ['2']
                        }]

        for i in range(len(expected_req)):
            self.assertEqual(requests[i].method, 'GET')
            self.assertRegex(requests[i].path, '/rest/api/2/search')
            self.assertDictEqual(requests[i].querystring, expected_req[i])

        self.assertEqual(len(issues), len(cache_issues))

        for i in range(len(cache_issues)):
            self.assertEqual(issues[i]['origin'], cache_issues[i]['origin'])
            self.assertEqual(issues[i]['uuid'], cache_issues[i]['uuid'])
            self.assertEqual(issues[i]['updated_on'], cache_issues[i]['updated_on'])
            self.assertEqual(issues[i]['category'], cache_issues[i]['category'])
            self.assertEqual(issues[1]['tag'], cache_issues[i]['tag'])
            self.assertEqual(issues[i]['data']['key'], cache_issues[i]['data']['key'])
            self.assertEqual(issues[i]['data']['fields']['issuetype']['name'],
                             cache_issues[i]['data']['fields']['issuetype']['name'])
            self.assertEqual(issues[i]['data']['fields']['creator']['name'],
                             cache_issues[i]['data']['fields']['creator']['name'])
            self.assertEqual(issues[i]['data']['fields']['assignee']['name'],
                             cache_issues[i]['data']['fields']['assignee']['name'])
コード例 #20
0
 def setUp(self):
     super().setUp()
     self.backend_write_archive = Jira(JIRA_SERVER_URL,
                                       archive=self.archive)
     self.backend_read_archive = Jira(JIRA_SERVER_URL, archive=self.archive)
コード例 #21
0
                    help="Use created date instead of update date",
                    type=lambda s: s.lower() in ['true', 't', 'yes', 'y', '1'])
parser.add_argument("-D",
                    "--updated-diff",
                    help="If >=0 skip objects where created + diff > updated",
                    type=int,
                    default=-1)
args = parser.parse_args()
# print(args)
# print ((args.date_from, args.date_to))

jira = Jira(args.url,
            project=args.project,
            user=args.user,
            password=args.password,
            verify=False,
            cert=None,
            max_issues=args.issues,
            tag=None,
            archive=None)
# print(jira)

oids = set()
for issue in jira.fetch(category=args.category, from_date=args.date_from):
    # print(issue.keys())
    # print(issue['data'].keys())
    # print(issue['data']['fields'].keys())
    # print(datetime.datetime.fromtimestamp(issue['data']['fields']['created']).strftime('%Y-%m-%d %H:%M:%S.%f'))
    # dtu = dateutil.parser.parse(issue['data']['fields']['updated'])
    dtu = utc.localize(
        datetime.datetime.fromtimestamp(jira.metadata_updated_on(