From 776a917e8be36689085d280df97c65c970d5f47d Mon Sep 17 00:00:00 2001 From: vyaslav Date: Sun, 20 May 2018 17:23:48 +0200 Subject: [PATCH] JiraIssue: set issue due to sprint endDate (#549) JiraIssue: set issue due to sprint endDate --- bugwarrior/services/jira.py | 23 +++++++++++++++++------ tests/test_jira.py | 17 ++++++++++++++++- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/bugwarrior/services/jira.py b/bugwarrior/services/jira.py index 027637ce6..5774e753f 100644 --- a/bugwarrior/services/jira.py +++ b/bugwarrior/services/jira.py @@ -111,6 +111,7 @@ def to_taskwarrior(self): 'priority': self.get_priority(), 'annotations': self.get_annotations(), 'tags': self.get_tags(), + 'due': self.get_due(), 'entry': self.get_entry(), self.URL: self.get_url(), @@ -130,6 +131,12 @@ def get_entry(self): def get_tags(self): return self._get_tags_from_labels() + self._get_tags_from_sprints() + def get_due(self): + sprints = self.__get_sprints() + for sprint in sprints: + endDate = sprint['endDate'] + return '' if endDate == '' else self.parse_date(endDate) + def _get_tags_from_sprints(self): tags = [] @@ -138,7 +145,16 @@ def _get_tags_from_sprints(self): context = self.record.copy() label_template = Template(self.origin['label_template']) + + sprints = self.__get_sprints() + for sprint in sprints: + # Extract the name and render it into a label + context.update({'label': sprint['name'].replace(' ', '')}) + tags.append(label_template.render(context)) + return tags + + def __get_sprints(self): fields = self.record.get('fields', {}) sprints = sum([ fields.get(key) or [] @@ -146,12 +162,7 @@ def _get_tags_from_sprints(self): ], []) for sprint in sprints: # Parse this big ugly string. - sprint = _parse_sprint_string(sprint) - # Extract the name and render it into a label - context.update({'label': sprint['name'].replace(' ', '')}) - tags.append(label_template.render(context)) - - return tags + yield _parse_sprint_string(sprint) def _get_tags_from_labels(self): tags = [] diff --git a/tests/test_jira.py b/tests/test_jira.py index 9ea17be2a..c3f8b7de0 100644 --- a/tests/test_jira.py +++ b/tests/test_jira.py @@ -1,6 +1,7 @@ from builtins import next from builtins import object from collections import namedtuple +from dateutil.tz import tzutc import mock from dateutil.tz import tzoffset, datetime @@ -21,7 +22,6 @@ def search_issues(self, *args, **kwargs): def comments(self, *args, **kwargs): return None - class TestJiraIssue(AbstractServiceTest, ServiceTest): SERVICE_CONFIG = { 'jira.username': 'one', @@ -45,6 +45,12 @@ class TestJiraIssue(AbstractServiceTest, ServiceTest): 'key': '%s-%s' % (arbitrary_project, arbitrary_id, ), } + arbitrary_record_with_due = arbitrary_record.copy() + arbitrary_record_with_due['fields']=arbitrary_record_with_due['fields'].copy() + arbitrary_record_with_due['fields']['Sprint']=['com.atlassian.greenhopper.service.sprint.Sprint@4c9c41a5[id=2322,rapidViewId=1173,\ + state=ACTIVE,name=Sprint 1,startDate=2016-09-06T16:08:07.4\ + 55Z,endDate=2016-09-23T16:08:00.000Z,completeDate=,sequence=2322]'] + def setUp(self): super(TestJiraIssue, self).setUp() with mock.patch('jira.client.JIRA._get_json'): @@ -53,6 +59,7 @@ def setUp(self): def get_mock_service(self, *args, **kwargs): service = super(TestJiraIssue, self).get_mock_service(*args, **kwargs) service.jira = FakeJiraClient(self.arbitrary_record) + service.sprint_field_names = ['Sprint'] return service def test_to_taskwarrior(self): @@ -72,6 +79,7 @@ def test_to_taskwarrior(self): issue.PRIORITY_MAP[self.arbitrary_record['fields']['priority']] ), 'annotations': arbitrary_extra['annotations'], + 'due': None, 'tags': [], 'entry': datetime.datetime(2016, 6, 6, 13, 7, 8, tzinfo=tzutc()), 'jirafixversion': '1.2.3', @@ -96,6 +104,7 @@ def test_issues(self): expected = { 'annotations': [], + 'due': None, 'description': '(bw)Is#10 - lkjaldsfjaldf .. two/browse/DONUT-10', 'entry': datetime.datetime(2016, 6, 6, 13, 7, 8, tzinfo=tzutc()), 'jiradescription': None, @@ -109,3 +118,9 @@ def test_issues(self): 'tags': []} self.assertEqual(issue.get_taskwarrior_record(), expected) + + def test_get_due(self): + issue = self.service.get_issue_for_record( + self.arbitrary_record_with_due + ) + self.assertEqual(issue.get_due(), datetime.datetime(2016, 9, 23, 16, 8, tzinfo=tzutc()))