From: Stephen Finucane Date: Thu, 30 Jun 2016 17:30:26 +0000 (+0100) Subject: tests: Remove 'default_states' fixture requirement X-Git-Tag: v2.0.0-rc1~302 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1fa6756bbfc251fe069ad68b358b32b5181992c3;p=thirdparty%2Fpatchwork.git tests: Remove 'default_states' fixture requirement 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 Reviewed-by: Andy Doan --- diff --git a/patchwork/tests/test_bundles.py b/patchwork/tests/test_bundles.py index 08fc8853..c1851105 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 ea347bc2..cb3dfcc7 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 e7412eed..0890c7c0 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 a7961d69..fd49578f 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 fd62c404..76224649 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 54eefd1c..73b2b78f 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@nRbqkQV.wBw', diff --git a/patchwork/tests/test_mboxviews.py b/patchwork/tests/test_mboxviews.py index a772c348..164de3a7 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 ' @@ -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 6bd67552..5c426fce 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 ba0ba5a2..eca05a0a 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,12 @@ def create_email(content, msgid=None, sender=None, listid=None): return _create_email(msg, msgid, sender, listid) -class PatchTest(TestCase): +def parse_mail(*args, **kwargs): + create_state() + return _parse_mail(*args, **kwargs) + - fixtures = ['default_states'] +class PatchTest(TestCase): def setUp(self): self.project = create_project() @@ -330,7 +333,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@example.com>' @@ -510,7 +512,6 @@ class PatchParseTest(PatchTest): class DelegateRequestTest(TestCase): - fixtures = ['default_states'] patch_filename = '0001-add-line.patch' msgid = '<1@example.com>' invalid_delegate_email = "nobody" @@ -552,17 +553,17 @@ class DelegateRequestTest(TestCase): class InitialPatchStateTest(TestCase): - fixtures = ['default_states'] patch_filename = '0001-add-line.patch' msgid = '<1@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( @@ -607,7 +608,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 \n' + diff --git a/patchwork/tests/test_rest_api.py b/patchwork/tests/test_rest_api.py index 8ff34c3b..7ae7f272 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 e6de112b..e7d7fadf 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@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 6e6f8a0f..ec5816c3 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): @@ -95,8 +95,7 @@ class MultipleUpdateTest(TestCase): return response 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 a93d4795..b2cc8252 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 e63e7136..ec804ac6 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 dc87679b..ba25b547 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):