From: Stephen Finucane Date: Tue, 21 Jun 2016 20:45:06 +0000 (+0100) Subject: tests: Clean up 'test_patchparser' X-Git-Tag: v2.0.0-rc1~307 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aa3099375eb0005e0c782849eb9f20e84a57e629;p=thirdparty%2Fpatchwork.git tests: Clean up 'test_patchparser' * Make use of 'create_' helper functions * Include every import on its own line * Use underscore_case, rather than camelCase * Rename some functions to make more sense Signed-off-by: Stephen Finucane Reviewed-by: Andy Doan --- diff --git a/patchwork/tests/test_patchparser.py b/patchwork/tests/test_patchparser.py index 7cc61eca..47a2e5a0 100644 --- a/patchwork/tests/test_patchparser.py +++ b/patchwork/tests/test_patchparser.py @@ -23,24 +23,35 @@ from email.utils import make_msgid from django.test import TestCase -from patchwork.bin.parsemail import (find_content, find_author, - find_project_by_header, parse_mail, - find_pull_request, split_prefixes, - clean_subject, parse_series_marker) -from patchwork.models import (Project, Person, Patch, Comment, State, - get_default_initial_patch_state) -from patchwork.tests.utils import (read_patch, read_mail, create_email, - defaults, create_user) +from patchwork.bin.parsemail import clean_subject +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_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_email +from patchwork.tests.utils import create_project +from patchwork.tests.utils import create_user +from patchwork.tests.utils import read_patch +from patchwork.tests.utils import read_mail +from patchwork.tests.utils import SAMPLE_DIFF class PatchTest(TestCase): + fixtures = ['default_states'] - default_sender = defaults.sender - default_subject = defaults.subject - project = defaults.project + project = create_project() class InlinePatchTest(PatchTest): + patch_filename = '0001-add-line.patch' test_content = 'Test for attached patch' @@ -49,14 +60,15 @@ class InlinePatchTest(PatchTest): email = create_email(self.test_content + '\n' + self.orig_patch) self.diff, self.message = find_content(self.project, email) - def testPatchContent(self): + def test_patch_content(self): self.assertEqual(self.diff, self.orig_patch) - def testCommentContent(self): + def test_patch_diff(self): self.assertEqual(self.message, self.test_content) class AttachmentPatchTest(InlinePatchTest): + patch_filename = '0001-add-line.patch' test_comment = 'Test for attached patch' content_subtype = 'x-patch' @@ -70,10 +82,12 @@ class AttachmentPatchTest(InlinePatchTest): class AttachmentXDiffPatchTest(AttachmentPatchTest): + content_subtype = 'x-diff' class UTF8InlinePatchTest(InlinePatchTest): + patch_filename = '0002-utf-8.patch' patch_encoding = 'utf-8' @@ -86,6 +100,7 @@ class UTF8InlinePatchTest(InlinePatchTest): class NoCharsetInlinePatchTest(InlinePatchTest): """Test mails with no content-type or content-encoding header.""" + patch_filename = '0001-add-line.patch' def setUp(self): @@ -97,6 +112,7 @@ class NoCharsetInlinePatchTest(InlinePatchTest): class SignatureCommentTest(InlinePatchTest): + patch_filename = '0001-add-line.patch' test_content = 'Test comment\nmore comment' @@ -109,6 +125,7 @@ class SignatureCommentTest(InlinePatchTest): class ListFooterTest(InlinePatchTest): + patch_filename = '0001-add-line.patch' test_content = 'Test comment\nmore comment' @@ -123,23 +140,27 @@ class ListFooterTest(InlinePatchTest): class DiffWordInCommentTest(InlinePatchTest): + test_content = 'Lines can start with words beginning in "diff"\n' + \ 'difficult\nDifferent' class UpdateCommentTest(InlinePatchTest): """Test for '---\nUpdate: v2' style comments to patches.""" + patch_filename = '0001-add-line.patch' test_content = 'Test comment\nmore comment\n---\nUpdate: test update' class UpdateSigCommentTest(SignatureCommentTest): """Test for '---\nUpdate: v2' style comments to patches, with a sig.""" + patch_filename = '0001-add-line.patch' test_content = 'Test comment\nmore comment\n---\nUpdate: test update' class SenderEncodingTest(TestCase): + sender_name = u'example user' sender_email = 'user@example.com' from_header = 'example user ' @@ -153,39 +174,40 @@ class SenderEncodingTest(TestCase): self.person = find_author(self.email) self.person.save() - def tearDown(self): - self.person.delete() - - def testName(self): + def test_name(self): self.assertEqual(self.person.name, self.sender_name) - def testEmail(self): + def test_email(self): self.assertEqual(self.person.email, self.sender_email) - def testDBQueryName(self): + def test_db_query_name(self): db_person = Person.objects.get(name=self.sender_name) self.assertEqual(self.person, db_person) - def testDBQueryEmail(self): + def test_db_query_email(self): db_person = Person.objects.get(email=self.sender_email) self.assertEqual(self.person, db_person) class SenderUTF8QPEncodingTest(SenderEncodingTest): + sender_name = u'\xe9xample user' from_header = '=?utf-8?q?=C3=A9xample=20user?= ' class SenderUTF8QPSplitEncodingTest(SenderEncodingTest): + sender_name = u'\xe9xample user' from_header = '=?utf-8?q?=C3=A9xample?= user ' class SenderUTF8B64EncodingTest(SenderUTF8QPEncodingTest): + from_header = '=?utf-8?B?w6l4YW1wbGUgdXNlcg==?= ' class SubjectEncodingTest(PatchTest): + sender = 'example user ' subject = 'test subject' subject_header = 'test subject' @@ -194,20 +216,22 @@ class SubjectEncodingTest(PatchTest): mail = 'Message-Id: %s\n' % make_msgid() + \ 'From: %s\n' % self.sender + \ 'Subject: %s\n\n' % self.subject_header + \ - 'test\n\n' + defaults.patch + 'test\n\n' + SAMPLE_DIFF self.email = message_from_string(mail) - def testSubjectEncoding(self): + def test_subject_encoding(self): name, _ = clean_subject(self.email.get('Subject')) self.assertEqual(name, self.subject) class SubjectUTF8QPEncodingTest(SubjectEncodingTest): + subject = u'test s\xfcbject' subject_header = '=?utf-8?q?test=20s=c3=bcbject?=' class SubjectUTF8QPMultipleEncodingTest(SubjectEncodingTest): + subject = u'test s\xfcbject' subject_header = 'test =?utf-8?q?s=c3=bcbject?=' @@ -219,6 +243,7 @@ class SenderCorrelationTest(TestCase): http://stackoverflow.com/a/19379636/613428 """ + existing_sender = 'Existing Sender ' non_existing_sender = 'Non-existing Sender ' @@ -235,48 +260,41 @@ class SenderCorrelationTest(TestCase): self.person = find_author(self.existing_sender_mail) self.person.save() - def testExistingSender(self): + def test_existing_sender(self): person = find_author(self.existing_sender_mail) self.assertEqual(person._state.adding, False) self.assertEqual(person.id, self.person.id) - def testNonExistingSender(self): + def test_non_existing_sender(self): person = find_author(self.non_existing_sender_mail) self.assertEqual(person._state.adding, True) self.assertEqual(person.id, None) - def testExistingDifferentFormat(self): + def test_existing_different_format(self): mail = self.mail('existing@example.com') person = find_author(mail) self.assertEqual(person._state.adding, False) self.assertEqual(person.id, self.person.id) - def testExistingDifferentCase(self): + def test_existing_different_case(self): mail = self.mail(self.existing_sender.upper()) person = find_author(mail) self.assertEqual(person._state.adding, False) self.assertEqual(person.id, self.person.id) - def tearDown(self): - self.person.delete() - class MultipleProjectPatchTest(TestCase): """Test that patches sent to multiple patchwork projects are handled correctly.""" + fixtures = ['default_states'] test_content = 'Test Comment' patch_filename = '0001-add-line.patch' msgid = '<1@example.com>' def setUp(self): - self.p1 = Project(linkname='test-project-1', name='Project 1', - listid='1.example.com', listemail='1@example.com') - self.p2 = Project(linkname='test-project-2', name='Project 2', - listid='2.example.com', listemail='2@example.com') - - self.p1.save() - self.p2.save() + self.p1 = create_project() + self.p2 = create_project() patch = read_patch(self.patch_filename) email = create_email(self.test_content + '\n' + patch) @@ -291,18 +309,15 @@ class MultipleProjectPatchTest(TestCase): email['List-ID'] = '<' + self.p2.listid + '>' parse_mail(email) - def testParsedProjects(self): + def test_parsed_projects(self): self.assertEqual(Patch.objects.filter(project=self.p1).count(), 1) self.assertEqual(Patch.objects.filter(project=self.p2).count(), 1) - def tearDown(self): - self.p1.delete() - self.p2.delete() - class MultipleProjectPatchCommentTest(MultipleProjectPatchTest): """Test that followups to multiple-project patches end up on the correct patch.""" + comment_msgid = '<2@example.com>' comment_content = 'test comment' @@ -311,14 +326,14 @@ class MultipleProjectPatchCommentTest(MultipleProjectPatchTest): for project in [self.p1, self.p2]: email = MIMEText(self.comment_content) - email['From'] = defaults.sender - email['Subject'] = defaults.subject + email['From'] = 'Patch Author ' + email['Subject'] = 'Test Subject' email['Message-Id'] = self.comment_msgid email['List-ID'] = '<' + project.listid + '>' email['In-Reply-To'] = self.msgid parse_mail(email) - def testParsedComment(self): + def test_parsed_comment(self): for project in [self.p1, self.p2]: patch = Patch.objects.filter(project=project)[0] # we should see the reply comment only @@ -328,37 +343,34 @@ class MultipleProjectPatchCommentTest(MultipleProjectPatchTest): class ListIdHeaderTest(TestCase): """Test that we parse List-Id headers from mails correctly.""" + def setUp(self): - self.project = Project(linkname='test-project-1', - name='Project 1', - listid='1.example.com', - listemail='1@example.com') - self.project.save() + self.project = create_project() - def testNoListId(self): + def test_no_list_id(self): email = MIMEText('') project = find_project_by_header(email) self.assertEqual(project, None) - def testBlankListId(self): + def test_blank_list_id(self): email = MIMEText('') email['List-Id'] = '' project = find_project_by_header(email) self.assertEqual(project, None) - def testWhitespaceListId(self): + def test_whitespace_list_id(self): email = MIMEText('') email['List-Id'] = ' ' project = find_project_by_header(email) self.assertEqual(project, None) - def testSubstringListId(self): + def test_substring_list_id(self): email = MIMEText('') email['List-Id'] = 'example.com' project = find_project_by_header(email) self.assertEqual(project, None) - def testShortListId(self): + def test_short_list_id(self): """Some mailing lists have List-Id headers in short formats, where it is only the list ID itself (without enclosing angle-brackets). """ email = MIMEText('') @@ -366,25 +378,24 @@ class ListIdHeaderTest(TestCase): project = find_project_by_header(email) self.assertEqual(project, self.project) - def testLongListId(self): + def test_long_list_id(self): email = MIMEText('') email['List-Id'] = 'Test text <%s>' % self.project.listid project = find_project_by_header(email) self.assertEqual(project, self.project) - def tearDown(self): - self.project.delete() - class MBoxPatchTest(PatchTest): + def setUp(self): self.mail = read_mail(self.mail_file, project=self.project) class GitPullTest(MBoxPatchTest): + mail_file = '0001-git-pull-request.mbox' - def testGitPullRequest(self): + def test_git_pull_request(self): diff, message = find_content(self.project, self.mail) pull_url = find_pull_request(message) self.assertTrue(diff is None) @@ -393,13 +404,15 @@ class GitPullTest(MBoxPatchTest): class GitPullWrappedTest(GitPullTest): + mail_file = '0002-git-pull-request-wrapped.mbox' class GitPullWithDiffTest(MBoxPatchTest): + mail_file = '0003-git-pull-request-with-diff.mbox' - def testGitPullWithDiff(self): + def test_git_pull_with_diff(self): diff, message = find_content(self.project, self.mail) pull_url = find_pull_request(message) self.assertEqual('git://git.kernel.org/pub/scm/linux/kernel/git/tip/' @@ -412,21 +425,25 @@ class GitPullWithDiffTest(MBoxPatchTest): class GitPullGitSSHUrlTest(GitPullTest): + mail_file = '0004-git-pull-request-git+ssh.mbox' class GitPullSSHUrlTest(GitPullTest): + mail_file = '0005-git-pull-request-ssh.mbox' class GitPullHTTPUrlTest(GitPullTest): + mail_file = '0006-git-pull-request-http.mbox' class GitRenameOnlyTest(MBoxPatchTest): + mail_file = '0008-git-rename.mbox' - def testGitRename(self): + def test_git_rename(self): diff, _ = find_content(self.project, self.mail) self.assertTrue(diff is not None) self.assertEqual(diff.count("\nrename from "), 2) @@ -434,9 +451,10 @@ class GitRenameOnlyTest(MBoxPatchTest): class GitRenameWithDiffTest(MBoxPatchTest): + mail_file = '0009-git-rename-with-diff.mbox' - def testGitRename(self): + def test_git_rename(self): diff, message = find_content(self.project, self.mail) self.assertTrue(diff is not None) self.assertTrue(message is not None) @@ -446,9 +464,10 @@ class GitRenameWithDiffTest(MBoxPatchTest): class CVSFormatPatchTest(MBoxPatchTest): + mail_file = '0007-cvs-format-diff.mbox' - def testPatch(self): + def test_patch(self): diff, message = find_content(self.project, self.mail) self.assertTrue(diff.startswith('Index')) @@ -456,18 +475,20 @@ class CVSFormatPatchTest(MBoxPatchTest): class CharsetFallbackPatchTest(MBoxPatchTest): """Test mail with and invalid charset name, and check that we can parse with one of the fallback encodings.""" + mail_file = '0010-invalid-charset.mbox' - def testPatch(self): + def test_patch(self): diff, message = find_content(self.project, self.mail) self.assertTrue(diff is not None) self.assertTrue(message is not None) class NoNewlineAtEndOfFilePatchTest(MBoxPatchTest): + mail_file = '0011-no-newline-at-end-of-file.mbox' - def testPatch(self): + def test_patch(self): diff, message = find_content(self.project, self.mail) self.assertTrue(diff is not None) self.assertTrue(message is not None) @@ -484,6 +505,7 @@ class NoNewlineAtEndOfFilePatchTest(MBoxPatchTest): class DelegateRequestTest(TestCase): + fixtures = ['default_states'] patch_filename = '0001-add-line.patch' msgid = '<1@example.com>' @@ -492,45 +514,40 @@ class DelegateRequestTest(TestCase): def setUp(self): self.patch = read_patch(self.patch_filename) self.user = create_user() - self.p1 = Project(linkname='test-project-1', name='Project 1', - listid='1.example.com', listemail='1@example.com') - self.p1.save() + self.project = create_project() - def get_email(self): + def _get_email(self): email = create_email(self.patch) del email['List-ID'] - email['List-ID'] = '<' + self.p1.listid + '>' + email['List-ID'] = '<' + self.project.listid + '>' email['Message-Id'] = self.msgid return email - def _assertDelegate(self, delegate): - query = Patch.objects.filter(project=self.p1) + def assertDelegate(self, delegate): + query = Patch.objects.filter(project=self.project) self.assertEqual(query.count(), 1) self.assertEqual(query[0].delegate, delegate) - def testDelegate(self): - email = self.get_email() + def test_delegate(self): + email = self._get_email() email['X-Patchwork-Delegate'] = self.user.email parse_mail(email) - self._assertDelegate(self.user) + self.assertDelegate(self.user) - def testNoDelegate(self): - email = self.get_email() + def test_no_delegate(self): + email = self._get_email() parse_mail(email) - self._assertDelegate(None) + self.assertDelegate(None) - def testInvalidDelegateFallsBackToNoDelegate(self): - email = self.get_email() + def test_invalid_delegate(self): + email = self._get_email() email['X-Patchwork-Delegate'] = self.invalid_delegate_email parse_mail(email) - self._assertDelegate(None) - - def tearDown(self): - self.p1.delete() - self.user.delete() + self.assertDelegate(None) class InitialPatchStateTest(TestCase): + fixtures = ['default_states'] patch_filename = '0001-add-line.patch' msgid = '<1@example.com>' @@ -539,77 +556,70 @@ class InitialPatchStateTest(TestCase): def setUp(self): self.patch = read_patch(self.patch_filename) self.user = create_user() - self.p1 = Project(linkname='test-project-1', name='Project 1', - listid='1.example.com', listemail='1@example.com') - self.p1.save() + self.project = create_project() self.default_state = get_default_initial_patch_state() self.nondefault_state = State.objects.get(name="Accepted") - def get_email(self): + def _get_email(self): email = create_email(self.patch) del email['List-ID'] - email['List-ID'] = '<' + self.p1.listid + '>' + email['List-ID'] = '<' + self.project.listid + '>' email['Message-Id'] = self.msgid return email - def _assertState(self, state): - query = Patch.objects.filter(project=self.p1) + def assertState(self, state): + query = Patch.objects.filter(project=self.project) self.assertEqual(query.count(), 1) self.assertEqual(query[0].state, state) - def testNonDefaultStateIsActuallyNotTheDefaultState(self): + def test_non_default_state(self): self.assertNotEqual(self.default_state, self.nondefault_state) - def testExplicitNonDefaultStateRequest(self): - email = self.get_email() + def test_explicit_non_default_state_request(self): + email = self._get_email() email['X-Patchwork-State'] = self.nondefault_state.name parse_mail(email) - self._assertState(self.nondefault_state) + self.assertState(self.nondefault_state) - def testExplicitDefaultStateRequest(self): - email = self.get_email() + def test_explicit_default_state_request(self): + email = self._get_email() email['X-Patchwork-State'] = self.default_state.name parse_mail(email) - self._assertState(self.default_state) + self.assertState(self.default_state) - def testImplicitDefaultStateRequest(self): - email = self.get_email() + def test_implicit_default_state_request(self): + email = self._get_email() parse_mail(email) - self._assertState(self.default_state) + self.assertState(self.default_state) - def testInvalidTestStateDoesNotExist(self): + def test_invalid_state(self): + # make sure it's actually invalid with self.assertRaises(State.DoesNotExist): State.objects.get(name=self.invalid_state_name) - def testInvalidStateRequestFallsBackToDefaultState(self): - email = self.get_email() + email = self._get_email() email['X-Patchwork-State'] = self.invalid_state_name parse_mail(email) - self._assertState(self.default_state) - - def tearDown(self): - self.p1.delete() - self.user.delete() + self.assertState(self.default_state) class ParseInitialTagsTest(PatchTest): + + fixtures = ['default_tags', 'default_states'] patch_filename = '0001-add-line.patch' test_content = ('test comment\n\n' + 'Tested-by: Test User \n' + 'Reviewed-by: Test User \n') - fixtures = ['default_tags', 'default_states'] def setUp(self): - project = defaults.project - project.listid = 'test.example.com' - project.save() + project = create_project(listid='test.example.com') self.orig_patch = read_patch(self.patch_filename) email = create_email(self.test_content + '\n' + self.orig_patch, project=project) email['Message-Id'] = '<1@example.com>' parse_mail(email) - def testTags(self): + def test_tags(self): self.assertEqual(Patch.objects.count(), 1) patch = Patch.objects.all()[0] self.assertEqual(patch.patchtag_set.filter( @@ -622,7 +632,7 @@ class ParseInitialTagsTest(PatchTest): class PrefixTest(TestCase): - def testSplitPrefixes(self): + def test_split_prefixes(self): self.assertEqual(split_prefixes('PATCH'), ['PATCH']) self.assertEqual(split_prefixes('PATCH,RFC'), ['PATCH', 'RFC']) self.assertEqual(split_prefixes(''), []) @@ -631,7 +641,7 @@ class PrefixTest(TestCase): self.assertEqual(split_prefixes('PATCH,RFC'), ['PATCH', 'RFC']) self.assertEqual(split_prefixes('PATCH 1/2'), ['PATCH', '1/2']) - def testSeriesMarkers(self): + def test_series_markers(self): self.assertEqual(parse_series_marker([]), (None, None)) self.assertEqual(parse_series_marker(['bar']), (None, None)) self.assertEqual(parse_series_marker(['bar', '1/2']), (1, 2)) @@ -640,7 +650,7 @@ class PrefixTest(TestCase): class SubjectTest(TestCase): - def testCleanSubject(self): + def test_clean_subject(self): self.assertEqual(clean_subject('meep'), ('meep', [])) self.assertEqual(clean_subject('Re: meep'), ('meep', [])) self.assertEqual(clean_subject('[PATCH] meep'), ('meep', []))