PYTHONPATH=lib/python ./manage.py collectstatic
- If you'd like to use the default tag set (Acked-by, Reviewed-by and
- Tested-by), then load these default tags:
+ You'll also need to load the initial tags and states into the
+ patchwork database:
- PYTHONPATH=lib/python ./manage.py loaddata default_tags
+ PYTHONPATH=lib/python ./manage.py loaddata default_tags default_states
Finally, add privileges for your mail and web users. This is only needed if
you use the ident-based approach. If you use password-based database
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<django-objects version="1.0">
+
+ <!-- default states -->
+ <object pk="1" model="patchwork.state">
+ <field type="CharField" name="name">New</field>
+ <field type="IntegerField" name="ordering">0</field>
+ <field type="BooleanField" name="action_required">True</field>
+ </object>
+ <object pk="2" model="patchwork.state">
+ <field type="CharField" name="name">Under Review</field>
+ <field type="IntegerField" name="ordering">1</field>
+ <field type="BooleanField" name="action_required">True</field>
+ </object>
+ <object pk="3" model="patchwork.state">
+ <field type="CharField" name="name">Accepted</field>
+ <field type="IntegerField" name="ordering">2</field>
+ <field type="BooleanField" name="action_required">False</field>
+ </object>
+ <object pk="4" model="patchwork.state">
+ <field type="CharField" name="name">Rejected</field>
+ <field type="IntegerField" name="ordering">3</field>
+ <field type="BooleanField" name="action_required">False</field>
+ </object>
+ <object pk="5" model="patchwork.state">
+ <field type="CharField" name="name">RFC</field>
+ <field type="IntegerField" name="ordering">4</field>
+ <field type="BooleanField" name="action_required">False</field>
+ </object>
+ <object pk="6" model="patchwork.state">
+ <field type="CharField" name="name">Not Applicable</field>
+ <field type="IntegerField" name="ordering">5</field>
+ <field type="BooleanField" name="action_required">False</field>
+ </object>
+ <object pk="7" model="patchwork.state">
+ <field type="CharField" name="name">Changes Requested</field>
+ <field type="IntegerField" name="ordering">6</field>
+ <field type="BooleanField" name="action_required">False</field>
+ </object>
+ <object pk="8" model="patchwork.state">
+ <field type="CharField" name="name">Awaiting Upstream</field>
+ <field type="IntegerField" name="ordering">7</field>
+ <field type="BooleanField" name="action_required">False</field>
+ </object>
+ <object pk="9" model="patchwork.state">
+ <field type="CharField" name="name">Superseded</field>
+ <field type="IntegerField" name="ordering">8</field>
+ <field type="BooleanField" name="action_required">False</field>
+ </object>
+ <object pk="10" model="patchwork.state">
+ <field type="CharField" name="name">Deferred</field>
+ <field type="IntegerField" name="ordering">9</field>
+ <field type="BooleanField" name="action_required">False</field>
+ </object>
+</django-objects>
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
-
- <!-- default states -->
- <object pk="1" model="patchwork.state">
- <field type="CharField" name="name">New</field>
- <field type="IntegerField" name="ordering">0</field>
- <field type="BooleanField" name="action_required">True</field>
- </object>
- <object pk="2" model="patchwork.state">
- <field type="CharField" name="name">Under Review</field>
- <field type="IntegerField" name="ordering">1</field>
- <field type="BooleanField" name="action_required">True</field>
- </object>
- <object pk="3" model="patchwork.state">
- <field type="CharField" name="name">Accepted</field>
- <field type="IntegerField" name="ordering">2</field>
- <field type="BooleanField" name="action_required">False</field>
- </object>
- <object pk="4" model="patchwork.state">
- <field type="CharField" name="name">Rejected</field>
- <field type="IntegerField" name="ordering">3</field>
- <field type="BooleanField" name="action_required">False</field>
- </object>
- <object pk="5" model="patchwork.state">
- <field type="CharField" name="name">RFC</field>
- <field type="IntegerField" name="ordering">4</field>
- <field type="BooleanField" name="action_required">False</field>
- </object>
- <object pk="6" model="patchwork.state">
- <field type="CharField" name="name">Not Applicable</field>
- <field type="IntegerField" name="ordering">5</field>
- <field type="BooleanField" name="action_required">False</field>
- </object>
- <object pk="7" model="patchwork.state">
- <field type="CharField" name="name">Changes Requested</field>
- <field type="IntegerField" name="ordering">6</field>
- <field type="BooleanField" name="action_required">False</field>
- </object>
- <object pk="8" model="patchwork.state">
- <field type="CharField" name="name">Awaiting Upstream</field>
- <field type="IntegerField" name="ordering">7</field>
- <field type="BooleanField" name="action_required">False</field>
- </object>
- <object pk="9" model="patchwork.state">
- <field type="CharField" name="name">Superseded</field>
- <field type="IntegerField" name="ordering">8</field>
- <field type="BooleanField" name="action_required">False</field>
- </object>
- <object pk="10" model="patchwork.state">
- <field type="CharField" name="name">Deferred</field>
- <field type="IntegerField" name="ordering">9</field>
- <field type="BooleanField" name="action_required">False</field>
- </object>
-</django-objects>
self.user.delete()
class BundleTestBase(TestCase):
+ fixtures = ['default_states']
def setUp(self, patch_count=3):
patch_names = ['testpatch%d' % (i) for i in range(1, patch_count+1)]
self.user = create_user()
from django.test.client import Client
class UTF8PatchViewTest(TestCase):
+ fixtures = ['default_states']
patch_filename = '0002-utf-8.patch'
patch_encoding = 'utf-8'
defaults.project.delete()
class UTF8HeaderPatchViewTest(UTF8PatchViewTest):
+ fixtures = ['default_states']
patch_filename = '0002-utf-8.patch'
patch_encoding = 'utf-8'
patch_author_name = u'P\xe4tch Author'
from patchwork.utils import do_expiry
class TestRegistrationExpiry(TestCase):
+ fixtures = ['default_states']
def register(self, date):
user = create_user()
self.assertNotContains(response, 'tbody')
class PatchOrderTest(TestCase):
+ fixtures = ['default_states']
d = datetime.datetime
patchmeta = [
from patchwork.tests.utils import defaults, create_user, find_in_context
class MboxPatchResponseTest(TestCase):
+ fixtures = ['default_states']
+
""" Test that the mbox view appends the Acked-by from a patch comment """
def setUp(self):
defaults.project.save()
'Acked-by: 1\nAcked-by: 2\n')
class MboxPatchSplitResponseTest(TestCase):
+ fixtures = ['default_states']
+
""" Test that the mbox view appends the Acked-by from a patch comment,
and places it before an '---' update line. """
def setUp(self):
'Acked-by: 1\nAcked-by: 2\n')
class MboxPassThroughHeaderTest(TestCase):
+ fixtures = ['default_states']
+
""" Test that we see 'Cc' and 'To' headers passed through from original
message to mbox view """
self.assertContains(response, self.date_header)
class MboxBrokenFromHeaderTest(TestCase):
+ fixtures = ['default_states']
+
""" Test that a person with characters outside ASCII in his name do
produce correct From header. As RFC 2822 state we must retain the
<user@doamin.tld> format for the mail while the name part may be coded
self.assertContains(response, from_email)
class MboxDateHeaderTest(TestCase):
+ fixtures = ['default_states']
+
""" Test that the date provided in the patch mail view is correct """
def setUp(self):
self.assertEqual(mail_date, date)
class MboxCommentPostcriptUnchangedTest(TestCase):
+ fixtures = ['default_states']
+
""" Test that the mbox view doesn't change the postscript part of a mail.
There where always a missing blank right after the postscript
delimiter '---' and an additional newline right before. """
from patchwork.utils import send_notifications
class PatchNotificationModelTest(TestCase):
+ fixtures = ['default_states']
+
"""Tests for the creation & update of the PatchChangeNotification model"""
def setUp(self):
self.assertEqual(PatchChangeNotification.objects.count(), 0)
class PatchNotificationEmailTest(TestCase):
+ fixtures = ['default_states']
def setUp(self):
self.project = defaults.project
from email.MIMEText import MIMEText
class PatchTest(TestCase):
+ fixtures = ['default_states']
default_sender = defaults.sender
default_subject = defaults.subject
project = defaults.project
""" Test that patches sent to multiple patchwork projects are
handled correctly """
+ fixtures = ['default_states']
test_comment = 'Test Comment'
patch_filename = '0001-add-line.patch'
msgid = '<1@example.com>'
self.assertEqual(2, patch.content.count('\ No newline at end of file'))
class DelegateRequestTest(TestCase):
+ fixtures = ['default_states']
patch_filename = '0001-add-line.patch'
msgid = '<1@example.com>'
invalid_delegate_email = "nobody"
self.user.delete()
class InitialPatchStateTest(TestCase):
+ fixtures = ['default_states']
patch_filename = '0001-add-line.patch'
msgid = '<1@example.com>'
invalid_state_name = "Nonexistent Test State"
test_comment = ('test comment\n\n' +
'Tested-by: Test User <test@example.com>\n' +
'Reviewed-by: Test User <test@example.com>\n')
- fixtures = ['default_tags']
+ fixtures = ['default_tags', 'default_states']
def setUp(self):
project = defaults.project
email = 'test@exmaple.com'
name_email = 'test name <' + email + '>'
- fixtures = ['default_tags']
+ fixtures = ['default_tags', 'default_states']
def assertTagsEqual(self, str, acks, reviews, tests):
counts = extract_tags(str, Tag.objects.all())
ACK = 1
REVIEW = 2
TEST = 3
- fixtures = ['default_tags']
+ fixtures = ['default_tags', 'default_states']
def assertTagsEqual(self, patch, acks, reviews, tests):
patch = Patch.objects.get(pk=patch.pk)
from patchwork.tests.utils import defaults, create_maintainer
class MultipleUpdateTest(TestCase):
+ fixtures = ['default_states']
+
def setUp(self):
defaults.project.save()
self.user = create_maintainer(defaults.project)