Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/release_notes.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
Release Notes
=============

v1.0.0
------
* Added a helper method, maybe_open_issue, to the IssueManager class
* This implements logic that's begun to repeat in my Issue use cases

v1.0.0
------
* Added Django 1.7 compatability
Expand Down
20 changes: 13 additions & 7 deletions issue/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,18 @@ def resolve_issue(self, **kwargs):
"""
self.filter(**kwargs).update(status=IssueStatus.Resolved.value)

def maybe_open_issue(self, name, **kwargs):
"""
Open the specified Issue unless:
1) It is already open
2) It already exists and is marked as Wont_fix
"""
if not self.issue_exists(name=name, **kwargs):
return self.create(name=name, **kwargs)
elif not self.is_wont_fix(name=name, **kwargs):
return self.reopen_issue(name=name, **kwargs)
return None


@six.python_2_unicode_compatible
class BaseIssue(models.Model):
Expand Down Expand Up @@ -340,13 +352,7 @@ def _open_or_update_issue(self, details, **kwargs):
"""
Open (or re-open) an issue with the name unless one exists with a status of Wont_fix.
"""
obj_man = self.issue_class.objects

if not obj_man.issue_exists(name=self.name, **kwargs):
return obj_man.create(name=self.name, **kwargs)

elif not obj_man.is_wont_fix(name=self.name, **kwargs):
return obj_man.reopen_issue(name=self.name, **kwargs)
return self.issue_class.objects.maybe_open_issue(self.name, **kwargs)

def _resolve_open_issue(self, **kwargs):
"""
Expand Down
22 changes: 22 additions & 0 deletions issue/tests/model_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,28 @@ def test_is_wont_fix(self):

self.assertTrue(Issue.objects.is_wont_fix(name=mi.name))

def test_maybe_open_issue_when_none_exists(self):
issue = Issue.objects.maybe_open_issue(name='falafel')
self.assertEqual(IssueStatus.Open.value, Issue.objects.get(name=issue.name).status)

def test_maybe_open_issue_when_it_is_marked_as_wont_fix(self):
issue = G(Issue, status=IssueStatus.Wont_fix.value)
self.assertIsNone(Issue.objects.maybe_open_issue(name=issue.name))
self.assertEqual(IssueStatus.Wont_fix.value, Issue.objects.get(pk=issue.pk).status)
self.assertEqual(1, Issue.objects.filter(name=issue.name).count())

def maybe_open_issue_when_it_is_marked_as_resolved(self):
issue = G(Issue, status=IssueStatus.Resolved.value)
Issue.objects.maybe_open_issue(name=issue.name)
self.assertEqual(IssueStatus.Open.value, Issue.objects.get(pk=issue.pk).status)
self.assertEqual(1, Issue.objects.get(name=issue.name))

def test_resolve_open_issue(self):
a = G(Assertion)
issue = G(Issue, name=a.name, status=IssueStatus.Open.value)
a._resolve_open_issue()
self.assertEqual(IssueStatus.Resolved.value, Issue.objects.get(pk=issue.pk).status)


class ModelIssueManagerTests(TestCase):
def test_replace_record_with_content_type(self):
Expand Down
2 changes: 1 addition & 1 deletion issue/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '1.0.0'
__version__ = '1.0.1'
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ def get_version():
'mock>=1.0.1',
'ipdb>=0.8',
'ipdbplugin>=1.4',
'six>=1.8.0',
],
test_suite='run_tests.run_tests',
include_package_data=True,
Expand Down