[PATCH 5/6] tests: Remove 'default_states' fixture requirement
Stephen Finucane
stephen.finucane at intel.com
Fri Jul 1 03:30:26 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>
Reviewed-by: Andy Doan <andy.doan at linaro.org>
---
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 | 20 +++++++++-----------
patchwork/tests/test_parser.py | 20 +++++++++++---------
patchwork/tests/test_rest_api.py | 7 ++-----
patchwork/tests/test_tags.py | 4 ++--
patchwork/tests/test_updates.py | 4 ++--
patchwork/tests/test_user.py | 2 --
patchwork/tests/test_xmlrpc.py | 2 --
patchwork/tests/utils.py | 24 +++++++++++++++++++++++-
15 files changed, 49 insertions(+), 55 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 ea347bc..cb3dfcc 100644
--- a/patchwork/tests/test_checks.py
+++ b/patchwork/tests/test_checks.py
@@ -29,7 +29,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..5c426fc 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()
@@ -109,8 +107,7 @@ class PatchNotificationModelTest(TestCase):
"""Ensure we don't see notifications created when a project is
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 +116,6 @@ class PatchNotificationModelTest(TestCase):
class PatchNotificationEmailTest(TestCase):
- fixtures = ['default_states']
-
def setUp(self):
self.project = create_project(send_notifications=True)
@@ -212,11 +207,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..ba260f1 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):
+ 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_rest_api.py b/patchwork/tests/test_rest_api.py
index 8ff34c3..7ae7f27 100644
--- a/patchwork/tests/test_rest_api.py
+++ b/patchwork/tests/test_rest_api.py
@@ -38,7 +38,6 @@ from patchwork.tests.utils import create_user
@unittest.skipUnless(settings.ENABLE_REST_API, 'requires ENABLE_REST_API')
class TestProjectAPI(APITestCase):
- fixtures = ['default_states']
@staticmethod
def api_url(item=None):
@@ -148,7 +147,6 @@ class TestProjectAPI(APITestCase):
@unittest.skipUnless(settings.ENABLE_REST_API, 'requires ENABLE_REST_API')
class TestPersonAPI(APITestCase):
- fixtures = ['default_states']
@staticmethod
def api_url(item=None):
@@ -204,7 +202,6 @@ class TestPersonAPI(APITestCase):
@unittest.skipUnless(settings.ENABLE_REST_API, 'requires ENABLE_REST_API')
class TestUserAPI(APITestCase):
- fixtures = ['default_states']
@staticmethod
def api_url(item=None):
@@ -247,7 +244,7 @@ class TestUserAPI(APITestCase):
@unittest.skipUnless(settings.ENABLE_REST_API, 'requires ENABLE_REST_API')
class TestPatchAPI(APITestCase):
- fixtures = ['default_states', 'default_tags']
+ fixtures = ['default_tags']
@staticmethod
def api_url(item=None):
@@ -395,7 +392,7 @@ class TestPatchAPI(APITestCase):
@unittest.skipUnless(settings.ENABLE_REST_API, 'requires ENABLE_REST_API')
class TestCheckAPI(APITestCase):
- fixtures = ['default_states', 'default_tags']
+ fixtures = ['default_tags']
def setUp(self):
super(TestCheckAPI, self).setUp()
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..e30b07f 100644
--- a/patchwork/tests/test_updates.py
+++ b/patchwork/tests/test_updates.py
@@ -24,12 +24,12 @@ from patchwork.models import Patch
from patchwork.models import State
from patchwork.tests.utils import create_patches
from patchwork.tests.utils import create_project
+from patchwork.tests.utils import create_state
from patchwork.tests.utils import create_maintainer
class MultipleUpdateTest(TestCase):
- fixtures = ['default_states']
properties_form_id = 'patchform-properties'
def setUp(self):
@@ -96,7 +96,7 @@ class MultipleUpdateTest(TestCase):
def test_state_change_valid(self):
states = [patch.state.pk for patch in self.patches]
- state = State.objects.exclude(pk__in=states)[0]
+ state = create_state()
self._test_state_change(state.pk)
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 dc87679..ba25b54 100644
--- a/patchwork/tests/utils.py
+++ b/patchwork/tests/utils.py
@@ -31,6 +31,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
@@ -129,6 +130,23 @@ def create_maintainer(project=None, **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_bundle(**kwargs):
"""Create 'Bundle' object."""
num = Bundle.objects.count()
@@ -155,6 +173,7 @@ def create_patch(**kwargs):
'delegate': None,
'project': create_project(),
'msgid': make_msgid(),
+ 'state': create_state(),
'name': 'testpatch%d' % num,
'headers': '',
'content': '',
@@ -256,7 +275,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