aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Finucane <stephen@that.guru>2017-02-07 11:29:59 +0000
committerStephen Finucane <stephen@that.guru>2017-04-04 16:24:03 +0100
commitabfb6a97967530d6efc248a95ddef2c9fd85efb5 (patch)
tree3dbc97ffcdc8c1892383c318a7d6a5633b3f5442
parentbd99cce784e7d36dfe13bb9d7c5360d8842a7835 (diff)
downloadpatchwork-abfb6a97967530d6efc248a95ddef2c9fd85efb5.tar
patchwork-abfb6a97967530d6efc248a95ddef2c9fd85efb5.tar.gz
utils: Add 'bundle_to_mbox' helper
This includes unit tests to validate correct behavior and prevent regressions. Signed-off-by: Stephen Finucane <stephen@that.guru> Reviewed-by: Daniel Axtens <dja@axtens.net>
-rw-r--r--patchwork/tests/test_bundles.py21
-rw-r--r--patchwork/views/bundle.py5
-rw-r--r--patchwork/views/utils.py12
3 files changed, 35 insertions, 3 deletions
diff --git a/patchwork/tests/test_bundles.py b/patchwork/tests/test_bundles.py
index c185110..7f98d36 100644
--- a/patchwork/tests/test_bundles.py
+++ b/patchwork/tests/test_bundles.py
@@ -26,6 +26,7 @@ from django.conf import settings
from django.core.urlresolvers import reverse
from django.test import TestCase
from django.utils.http import urlencode
+from django.utils import six
from django.utils.six.moves import range
from django.utils.six.moves import zip
@@ -42,6 +43,11 @@ def bundle_url(bundle):
'username': bundle.owner.username, 'bundlename': bundle.name})
+def bundle_mbox_url(bundle):
+ return reverse('bundle-mbox', kwargs={
+ 'username': bundle.owner.username, 'bundlename': bundle.name})
+
+
class BundleListTest(TestCase):
def setUp(self):
@@ -120,6 +126,21 @@ class BundleViewTest(BundleTestBase):
pos = next_pos
+class BundleMboxTest(BundleTestBase):
+
+ def test_empty_bundle(self):
+ response = self.client.get(bundle_mbox_url(self.bundle))
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.content, six.b(''))
+
+ def test_non_empty_bundle(self):
+ self.bundle.append_patch(self.patches[0])
+
+ response = self.client.get(bundle_mbox_url(self.bundle))
+ self.assertEqual(response.status_code, 200)
+ self.assertNotEqual(response.content, six.b(''))
+
+
class BundleUpdateTest(BundleTestBase):
def test_no_action(self):
diff --git a/patchwork/views/bundle.py b/patchwork/views/bundle.py
index 3e8d034..89acb34 100644
--- a/patchwork/views/bundle.py
+++ b/patchwork/views/bundle.py
@@ -33,7 +33,7 @@ from patchwork.models import Bundle
from patchwork.models import BundlePatch
from patchwork.models import Project
from patchwork.views import generic_list
-from patchwork.views.utils import patch_to_mbox
+from patchwork.views.utils import bundle_to_mbox
if settings.ENABLE_REST_API:
from rest_framework.authentication import BasicAuthentication # noqa
@@ -149,8 +149,7 @@ def bundle_mbox(request, username, bundlename):
response = HttpResponse(content_type='text/plain')
response['Content-Disposition'] = \
'attachment; filename=bundle-%d-%s.mbox' % (bundle.id, bundle.name)
- response.write('\n'.join(
- [patch_to_mbox(p) for p in bundle.ordered_patches()]))
+ response.write(bundle_to_mbox(bundle))
return response
diff --git a/patchwork/views/utils.py b/patchwork/views/utils.py
index c998647..900480b 100644
--- a/patchwork/views/utils.py
+++ b/patchwork/views/utils.py
@@ -104,3 +104,15 @@ def patch_to_mbox(patch):
mail = mail.as_string(True)
return mail
+
+
+def bundle_to_mbox(bundle):
+ """Get an mbox representation of a bundle.
+
+ Arguments:
+ patch: The Bundle object to convert.
+
+ Returns:
+ A string for the mbox file.
+ """
+ return '\n'.join([patch_to_mbox(p) for p in bundle.ordered_patches()])