[PATCH 25/25] tests: Remove 'default_states' fixture requirement

Stephen Finucane stephen.finucane at intel.com
Fri Jun 24 07:53:46 AEST 2016


The 'default_states' fixture is used in many tests. However, the
'default_states' are merely suggestions for various States, and the
names themselves have no meaning from a patchwork perspective. In
addition, these fixtures significantly increase run time of the tests.

Resolve this by creating new State objects on demand, rather than
using versions provided by the fixture.

Signed-off-by: Stephen Finucane <stephen.finucane at intel.com>
---
 patchwork/tests/test_bundles.py       |    2 --
 patchwork/tests/test_checks.py        |    1 -
 patchwork/tests/test_detail.py        |    2 --
 patchwork/tests/test_encodings.py     |    4 ----
 patchwork/tests/test_expiry.py        |    2 --
 patchwork/tests/test_list.py          |    2 --
 patchwork/tests/test_mboxviews.py     |    8 --------
 patchwork/tests/test_notifications.py |   19 +++++++++----------
 patchwork/tests/test_parser.py        |   20 +++++++++++---------
 patchwork/tests/test_tags.py          |    4 ++--
 patchwork/tests/test_updates.py       |    1 -
 patchwork/tests/test_user.py          |    2 --
 patchwork/tests/test_xmlrpc.py        |    2 --
 patchwork/tests/utils.py              |   24 +++++++++++++++++++++++-
 14 files changed, 45 insertions(+), 48 deletions(-)

diff --git a/patchwork/tests/test_bundles.py b/patchwork/tests/test_bundles.py
index 08fc885..c185110 100644
--- a/patchwork/tests/test_bundles.py
+++ b/patchwork/tests/test_bundles.py
@@ -64,8 +64,6 @@ class BundleListTest(TestCase):
 
 class BundleTestBase(TestCase):
 
-    fixtures = ['default_states']
-
     def setUp(self, count=3):
         self.user = create_user()
         self.client.login(username=self.user.username,
diff --git a/patchwork/tests/test_checks.py b/patchwork/tests/test_checks.py
index 193cd6b..be48771 100644
--- a/patchwork/tests/test_checks.py
+++ b/patchwork/tests/test_checks.py
@@ -28,7 +28,6 @@ from patchwork.tests.utils import create_user
 
 
 class PatchChecksTest(TransactionTestCase):
-    fixtures = ['default_tags', 'default_states']
 
     def setUp(self):
         self.patch = create_patches()[0]
diff --git a/patchwork/tests/test_detail.py b/patchwork/tests/test_detail.py
index e7412ee..0890c7c 100644
--- a/patchwork/tests/test_detail.py
+++ b/patchwork/tests/test_detail.py
@@ -27,7 +27,6 @@ from patchwork.tests.utils import create_patches
 
 
 class CoverLetterViewTest(TestCase):
-    fixtures = ['default_states']
 
     def test_redirect(self):
         patches = create_patches()
@@ -41,7 +40,6 @@ class CoverLetterViewTest(TestCase):
 
 
 class PatchViewTest(TestCase):
-    fixtures = ['default_states']
 
     def test_redirect(self):
         covers = create_covers()
diff --git a/patchwork/tests/test_encodings.py b/patchwork/tests/test_encodings.py
index a7961d6..fd49578 100644
--- a/patchwork/tests/test_encodings.py
+++ b/patchwork/tests/test_encodings.py
@@ -26,8 +26,6 @@ from patchwork.tests.utils import read_patch
 
 class UTF8PatchViewTest(TestCase):
 
-    fixtures = ['default_states']
-
     def setUp(self):
         patch_content = read_patch('0002-utf-8.patch', encoding='utf-8')
         self.patch = create_patch(diff=patch_content)
@@ -50,8 +48,6 @@ class UTF8PatchViewTest(TestCase):
 
 class UTF8HeaderPatchViewTest(UTF8PatchViewTest):
 
-    fixtures = ['default_states']
-
     def setUp(self):
         author = create_person(name=u'P\xe4tch Author')
         patch_content = read_patch('0002-utf-8.patch', encoding='utf-8')
diff --git a/patchwork/tests/test_expiry.py b/patchwork/tests/test_expiry.py
index fd62c40..7622464 100644
--- a/patchwork/tests/test_expiry.py
+++ b/patchwork/tests/test_expiry.py
@@ -32,8 +32,6 @@ from patchwork.utils import do_expiry
 
 class TestRegistrationExpiry(TestCase):
 
-    fixtures = ['default_states']
-
     def register(self, date):
         user = create_user()
         user.is_active = False
diff --git a/patchwork/tests/test_list.py b/patchwork/tests/test_list.py
index 54eefd1..73b2b78 100644
--- a/patchwork/tests/test_list.py
+++ b/patchwork/tests/test_list.py
@@ -44,8 +44,6 @@ class EmptyPatchListTest(TestCase):
 
 class PatchOrderTest(TestCase):
 
-    fixtures = ['default_states']
-
     d = datetime.datetime
     patchmeta = [
         ('AlCMyjOsx', 'AlxMyjOsx at nRbqkQV.wBw',
diff --git a/patchwork/tests/test_mboxviews.py b/patchwork/tests/test_mboxviews.py
index a772c34..164de3a 100644
--- a/patchwork/tests/test_mboxviews.py
+++ b/patchwork/tests/test_mboxviews.py
@@ -38,8 +38,6 @@ class MboxPatchResponseTest(TestCase):
 
     """Test that the mbox view appends the Acked-by from a patch comment."""
 
-    fixtures = ['default_states']
-
     def setUp(self):
         project = create_project()
         self.person = create_person()
@@ -62,8 +60,6 @@ class MboxPatchSplitResponseTest(TestCase):
     """Test that the mbox view appends the Acked-by from a patch comment,
        and places it before an '---' update line."""
 
-    fixtures = ['default_states']
-
     def setUp(self):
         project = create_project()
         self.person = create_person()
@@ -86,8 +82,6 @@ class MboxHeaderTest(TestCase):
 
     """Test the passthrough and generation of various headers."""
 
-    fixtures = ['default_states']
-
     def test_header_passthrough_cc(self):
         """Validate passthrough of 'Cc' header."""
         header = 'Cc: CC Person <cc at example.com>'
@@ -164,8 +158,6 @@ class MboxHeaderTest(TestCase):
 
 class MboxCommentPostcriptUnchangedTest(TestCase):
 
-    fixtures = ['default_states']
-
     def test_comment_unchanged(self):
         """Validate postscript part of mail is unchanged.
 
diff --git a/patchwork/tests/test_notifications.py b/patchwork/tests/test_notifications.py
index 6bd6755..05dc074 100644
--- a/patchwork/tests/test_notifications.py
+++ b/patchwork/tests/test_notifications.py
@@ -25,10 +25,10 @@ from django.test import TestCase
 
 from patchwork.models import EmailOptout
 from patchwork.models import PatchChangeNotification
-from patchwork.models import State
 from patchwork.tests.utils import create_patch
 from patchwork.tests.utils import create_patches
 from patchwork.tests.utils import create_project
+from patchwork.tests.utils import create_state
 from patchwork.utils import send_notifications
 
 
@@ -36,8 +36,6 @@ class PatchNotificationModelTest(TestCase):
 
     """Tests for the creation and update of the PatchChangeNotifications."""
 
-    fixtures = ['default_states']
-
     def setUp(self):
         self.project = create_project(send_notifications=True)
 
@@ -59,7 +57,7 @@ class PatchNotificationModelTest(TestCase):
         """Ensure we get a notification for interesting patch changes"""
         patch = create_patch(project=self.project)
         oldstate = patch.state
-        state = State.objects.exclude(pk=oldstate.pk)[0]
+        state = create_state()
 
         patch.state = state
         patch.save()
@@ -73,7 +71,7 @@ class PatchNotificationModelTest(TestCase):
         """Ensure we cancel notifications that are no longer valid"""
         patch = create_patch(project=self.project)
         oldstate = patch.state
-        state = State.objects.exclude(pk=oldstate.pk)[0]
+        state = create_state()
 
         patch.state = state
         patch.save()
@@ -88,7 +86,7 @@ class PatchNotificationModelTest(TestCase):
            but keep the original patch details"""
         patch = create_patch(project=self.project)
         oldstate = patch.state
-        newstates = State.objects.exclude(pk=oldstate.pk)[:2]
+        newstates = [create_state(), create_state()]
 
         patch.state = newstates[0]
         patch.save()
@@ -110,7 +108,7 @@ class PatchNotificationModelTest(TestCase):
            configured not to send them"""
         patch = create_patch()  # don't use self.project
         oldstate = patch.state
-        state = State.objects.exclude(pk=oldstate.pk)[0]
+        state = create_state()
 
         patch.state = state
         patch.save()
@@ -119,8 +117,6 @@ class PatchNotificationModelTest(TestCase):
 
 class PatchNotificationEmailTest(TestCase):
 
-    fixtures = ['default_states']
-
     def setUp(self):
         self.project = create_project(send_notifications=True)
 
@@ -212,11 +208,14 @@ class PatchNotificationEmailTest(TestCase):
             patch.save()
             PatchChangeNotification(patch=patch, orig_state=patch.state).save()
 
+        state = create_state()
+
         self.assertEqual(PatchChangeNotification.objects.count(), len(patches))
         self._expire_notifications()
 
         # update one notification, to bring it out of the notification delay
-        patches[0].state = State.objects.exclude(pk=patches[0].state.pk)[0]
+
+        patches[0].state = state
         patches[0].save()
 
         # the updated notification should prevent the other from being sent
diff --git a/patchwork/tests/test_parser.py b/patchwork/tests/test_parser.py
index d30254b..e4eb006 100644
--- a/patchwork/tests/test_parser.py
+++ b/patchwork/tests/test_parser.py
@@ -31,15 +31,15 @@ from patchwork.bin.parsemail import find_author
 from patchwork.bin.parsemail import find_content
 from patchwork.bin.parsemail import find_project_by_header
 from patchwork.bin.parsemail import find_pull_request
-from patchwork.bin.parsemail import parse_mail
+from patchwork.bin.parsemail import parse_mail as _parse_mail
 from patchwork.bin.parsemail import parse_series_marker
 from patchwork.bin.parsemail import split_prefixes
 from patchwork.models import Comment
-from patchwork.models import get_default_initial_patch_state
 from patchwork.models import Patch
 from patchwork.models import Person
 from patchwork.models import State
 from patchwork.tests.utils import create_project
+from patchwork.tests.utils import create_state
 from patchwork.tests.utils import create_user
 from patchwork.tests.utils import read_patch
 from patchwork.tests.utils import SAMPLE_DIFF
@@ -74,9 +74,13 @@ def create_email(content, msgid=None, sender=None, listid=None):
     return _create_email(msg, msgid, sender, listid)
 
 
+def parse_mail(*args, **kwargs):
+    state = create_state()
+    return _parse_mail(*args, **kwargs)
+
+
 class PatchTest(TestCase):
 
-    fixtures = ['default_states']
     project = create_project()
 
     def _find_content(self, mbox_filename):
@@ -319,7 +323,6 @@ class MultipleProjectPatchTest(TestCase):
     """Test that patches sent to multiple patchwork projects are
        handled correctly."""
 
-    fixtures = ['default_states']
     orig_content = 'Test Comment'
     patch_filename = '0001-add-line.patch'
     msgid = '<1 at example.com>'
@@ -499,7 +502,6 @@ class PatchParseTest(PatchTest):
 
 class DelegateRequestTest(TestCase):
 
-    fixtures = ['default_states']
     patch_filename = '0001-add-line.patch'
     msgid = '<1 at example.com>'
     invalid_delegate_email = "nobody"
@@ -541,17 +543,17 @@ class DelegateRequestTest(TestCase):
 
 class InitialPatchStateTest(TestCase):
 
-    fixtures = ['default_states']
     patch_filename = '0001-add-line.patch'
     msgid = '<1 at example.com>'
     invalid_state_name = "Nonexistent Test State"
 
     def setUp(self):
+        self.default_state = create_state()
+        self.nondefault_state = create_state()
+
         self.patch = read_patch(self.patch_filename)
         self.user = create_user()
         self.project = create_project()
-        self.default_state = get_default_initial_patch_state()
-        self.nondefault_state = State.objects.get(name="Accepted")
 
     def _get_email(self):
         email = create_email(
@@ -596,7 +598,7 @@ class InitialPatchStateTest(TestCase):
 
 class ParseInitialTagsTest(PatchTest):
 
-    fixtures = ['default_tags', 'default_states']
+    fixtures = ['default_tags']
     patch_filename = '0001-add-line.patch'
     orig_content = ('test comment\n\n' +
                     'Tested-by: Test User <test at example.com>\n' +
diff --git a/patchwork/tests/test_tags.py b/patchwork/tests/test_tags.py
index e6de112..e7d7fad 100644
--- a/patchwork/tests/test_tags.py
+++ b/patchwork/tests/test_tags.py
@@ -30,7 +30,7 @@ from patchwork.tests.utils import create_patch
 
 class ExtractTagsTest(TestCase):
 
-    fixtures = ['default_tags', 'default_states']
+    fixtures = ['default_tags']
     email = 'test at example.com'
     name_email = 'test name <' + email + '>'
 
@@ -83,7 +83,7 @@ class ExtractTagsTest(TestCase):
 
 class PatchTagsTest(TransactionTestCase):
 
-    fixtures = ['default_tags', 'default_states']
+    fixtures = ['default_tags']
     ACK = 1
     REVIEW = 2
     TEST = 3
diff --git a/patchwork/tests/test_updates.py b/patchwork/tests/test_updates.py
index 6e6f8a0..0446464 100644
--- a/patchwork/tests/test_updates.py
+++ b/patchwork/tests/test_updates.py
@@ -29,7 +29,6 @@ from patchwork.tests.utils import create_maintainer
 
 class MultipleUpdateTest(TestCase):
 
-    fixtures = ['default_states']
     properties_form_id = 'patchform-properties'
 
     def setUp(self):
diff --git a/patchwork/tests/test_user.py b/patchwork/tests/test_user.py
index a93d479..b2cc825 100644
--- a/patchwork/tests/test_user.py
+++ b/patchwork/tests/test_user.py
@@ -146,8 +146,6 @@ class UserLoginRedirectTest(TestCase):
 
 class UserProfileTest(_UserTestCase):
 
-    fixtures = ['default_states']
-
     def test_user_profile(self):
         response = self.client.get(reverse('user-profile'))
         self.assertContains(response, 'Your Profile')
diff --git a/patchwork/tests/test_xmlrpc.py b/patchwork/tests/test_xmlrpc.py
index e63e713..ec804ac 100644
--- a/patchwork/tests/test_xmlrpc.py
+++ b/patchwork/tests/test_xmlrpc.py
@@ -32,8 +32,6 @@ from patchwork.tests.utils import create_patches
                      'setting)')
 class XMLRPCTest(LiveServerTestCase):
 
-    fixtures = ['default_states']
-
     def setUp(self):
         self.url = self.live_server_url + reverse('xmlrpc')
         self.rpc = xmlrpc_client.Server(self.url)
diff --git a/patchwork/tests/utils.py b/patchwork/tests/utils.py
index b68f347..0b1f082 100644
--- a/patchwork/tests/utils.py
+++ b/patchwork/tests/utils.py
@@ -29,6 +29,7 @@ from patchwork.models import CoverLetter
 from patchwork.models import Patch
 from patchwork.models import Person
 from patchwork.models import Project
+from patchwork.models import State
 
 SAMPLE_DIFF = """--- /dev/null	2011-01-01 00:00:00.000000000 +0800
 +++ a	2011-01-01 00:00:00.000000000 +0800
@@ -113,6 +114,23 @@ def create_user(link_person=True, **kwargs):
     return user
 
 
+def create_state(**kwargs):
+    """Create 'State' object."""
+    num = State.objects.count()
+
+    values = {
+        'name': 'state_%d' % num,
+        'ordering': num,
+        'action_required': True,
+    }
+    values.update(kwargs)
+
+    state = State(**values)
+    state.save()
+
+    return state
+
+
 def create_maintainer(project, **kwargs):
     """Create a 'User' and set as maintainer for provided project."""
     user = create_user(**kwargs)
@@ -150,6 +168,7 @@ def create_patch(**kwargs):
         'delegate': None,
         'project': create_project(),
         'msgid': make_msgid(),
+        'state': create_state(),
         'name': 'testpatch%d' % num,
         'headers': '',
         'content': '',
@@ -232,7 +251,10 @@ def create_patches(count=1, **kwargs):
         count (int): Number of patches to create
         kwargs (dict): Overrides for various patch fields
     """
-    return _create_submissions(create_patch, count, **kwargs)
+    values = {'state': create_state()}
+    values.update(kwargs)
+
+    return _create_submissions(create_patch, count, **values)
 
 
 def create_covers(count=1, **kwargs):
-- 
1.7.4.1



More information about the Patchwork mailing list