Skip to content

Commit

Permalink
JiraIssue: set issue due to sprint endDate (#549)
Browse files Browse the repository at this point in the history
JiraIssue: set issue due to sprint endDate
  • Loading branch information
vyaslav authored and ryneeverett committed May 20, 2018
1 parent 58da68f commit 776a917
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 7 deletions.
23 changes: 17 additions & 6 deletions bugwarrior/services/jira.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
Expand All @@ -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 == '<null>' else self.parse_date(endDate)

def _get_tags_from_sprints(self):
tags = []

Expand All @@ -138,20 +145,24 @@ 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 []
for key in self.origin['sprint_field_names']
], [])
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 = []
Expand Down
17 changes: 16 additions & 1 deletion tests/test_jira.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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',
Expand All @@ -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=<null>,sequence=2322]']

def setUp(self):
super(TestJiraIssue, self).setUp()
with mock.patch('jira.client.JIRA._get_json'):
Expand All @@ -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):
Expand All @@ -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',
Expand All @@ -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,
Expand All @@ -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()))

0 comments on commit 776a917

Please sign in to comment.