diff options
author | Stephen Finucane <stephen@that.guru> | 2017-02-07 11:29:59 +0000 |
---|---|---|
committer | Stephen Finucane <stephen@that.guru> | 2017-04-04 16:24:03 +0100 |
commit | abfb6a97967530d6efc248a95ddef2c9fd85efb5 (patch) | |
tree | 3dbc97ffcdc8c1892383c318a7d6a5633b3f5442 | |
parent | bd99cce784e7d36dfe13bb9d7c5360d8842a7835 (diff) | |
download | patchwork-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.py | 21 | ||||
-rw-r--r-- | patchwork/views/bundle.py | 5 | ||||
-rw-r--r-- | patchwork/views/utils.py | 12 |
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()]) |