class GitPullEventTest(PatchTest): def setUp(self): self.mail = read_mail('0001-git-pull-request.mbox', project=self.project) self.p1 = Project(linkname='oss-dev', name='OSS Dev', listid='cbe-oss-dev.ozlabs.org', listemail='cbe-oss-dev.ozlabs.org') self.p1.save() def testGitPullRequest(self): self.assertEqual(parse_mail(self.mail), 0) self.patch = Patch.objects.filter(project=self.p1)[0] self.assertTrue(self.patch.pull_url is not None) events = EventLog.objects.filter(patch=self.patch) self.assertEqual(len(events), 1) el = events[0] self.assertEqual(Event.objects.get(name='pull-request-new'), el.event) self.assertEqual(self.patch.pull_url, el.parameters['pull_url']) def tearDown(self): self.p1.delete() if self.patch: self.patch.delete()
class MailFromPatchTest(TestCase): fixtures = ['default_states', 'default_events'] patch_filename = '0001-add-line.patch' msgid = '<*****@*****.**>' def get_email(self, multipart=False): if multipart: email = create_email('See attached patch!', multipart=multipart) attachment = MIMEText(self.patch, _subtype='x-patch') email.attach(attachment) else: email = create_email(self.patch) del email['List-ID'] email['List-ID'] = '<' + self.p1.listid + '>' email['Message-Id'] = self.msgid return email 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='*****@*****.**') self.p1.save() def tearDown(self): self.p1.delete() self.user.delete()
class InitialPatchStateTest(TestCase): fixtures = ['default_states'] patch_filename = '0001-add-line.patch' msgid = '<*****@*****.**>' invalid_state_name = "Nonexistent Test State" 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='*****@*****.**') self.p1.save() self.default_state = get_default_initial_patch_state() self.nondefault_state = State.objects.get(name="Accepted") def get_email(self): email = create_email(self.patch) del email['List-ID'] email['List-ID'] = '<' + self.p1.listid + '>' email['Message-Id'] = self.msgid return email def _assertState(self, state): query = Patch.objects.filter(project=self.p1) self.assertEqual(query.count(), 1) self.assertEqual(query[0].state, state) def testNonDefaultStateIsActuallyNotTheDefaultState(self): self.assertNotEqual(self.default_state, self.nondefault_state) def testExplicitNonDefaultStateRequest(self): email = self.get_email() email['X-Patchwork-State'] = self.nondefault_state.name parse_mail(email) self._assertState(self.nondefault_state) def testExplicitDefaultStateRequest(self): email = self.get_email() email['X-Patchwork-State'] = self.default_state.name parse_mail(email) self._assertState(self.default_state) def testImplicitDefaultStateRequest(self): email = self.get_email() parse_mail(email) self._assertState(self.default_state) def testInvalidTestStateDoesNotExist(self): with self.assertRaises(State.DoesNotExist): State.objects.get(name=self.invalid_state_name) def testInvalidStateRequestFallsBackToDefaultState(self): 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()
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='*****@*****.**') self.project.save() def testNoListId(self): email = MIMEText('') project = find_project(email) self.assertEqual(project, None) def testBlankListId(self): email = MIMEText('') email['List-Id'] = '' project = find_project(email) self.assertEqual(project, None) def testWhitespaceListId(self): email = MIMEText('') email['List-Id'] = ' ' project = find_project(email) self.assertEqual(project, None) def testSubstringListId(self): email = MIMEText('') email['List-Id'] = 'example.com' project = find_project(email) self.assertEqual(project, None) def testShortListId(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('') email['List-Id'] = self.project.listid project = find_project(email) self.assertEqual(project, self.project) def testLongListId(self): email = MIMEText('') email['List-Id'] = 'Test text <%s>' % self.project.listid project = find_project(email) self.assertEqual(project, self.project) def tearDown(self): self.project.delete()
class ListIdHeaderTest(unittest.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="*****@*****.**" ) self.project.save() def testNoListId(self): email = MIMEText("") project = find_project(email) self.assertEquals(project, None) def testBlankListId(self): email = MIMEText("") email["List-Id"] = "" project = find_project(email) self.assertEquals(project, None) def testWhitespaceListId(self): email = MIMEText("") email["List-Id"] = " " project = find_project(email) self.assertEquals(project, None) def testSubstringListId(self): email = MIMEText("") email["List-Id"] = "example.com" project = find_project(email) self.assertEquals(project, None) def testShortListId(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("") email["List-Id"] = self.project.listid project = find_project(email) self.assertEquals(project, self.project) def testLongListId(self): email = MIMEText("") email["List-Id"] = "Test text <%s>" % self.project.listid project = find_project(email) self.assertEquals(project, self.project) def tearDown(self): self.project.delete()
class DelegateRequestTest(TestCase): fixtures = ['default_states', 'default_events'] patch_filename = '0001-add-line.patch' msgid = '<*****@*****.**>' invalid_delegate_email = "nobody" 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='*****@*****.**') self.p1.save() def get_email(self): email = create_email(self.patch) del email['List-ID'] email['List-ID'] = '<' + self.p1.listid + '>' email['Message-Id'] = self.msgid return email def _assertDelegate(self, delegate): query = Patch.objects.filter(project=self.p1) self.assertEquals(query.count(), 1) self.assertEquals(query[0].delegate, delegate) def testDelegate(self): email = self.get_email() email['X-Patchwork-Delegate'] = self.user.email parse_mail(email) self._assertDelegate(self.user) def testNoDelegate(self): email = self.get_email() parse_mail(email) self._assertDelegate(None) def testInvalidDelegateFallsBackToNoDelegate(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()
class DelegateRequestTest(TestCase): fixtures = ['default_states', 'default_events'] patch_filename = '0001-add-line.patch' msgid = '<*****@*****.**>' invalid_delegate_email = "nobody" 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='*****@*****.**') self.p1.save() def get_email(self): email = create_email(self.patch) del email['List-ID'] email['List-ID'] = '<' + self.p1.listid + '>' email['Message-Id'] = self.msgid return email def _assertDelegate(self, delegate): query = Patch.objects.filter(project=self.p1) self.assertEqual(query.count(), 1) self.assertEqual(query[0].delegate, delegate) def testDelegate(self): email = self.get_email() email['X-Patchwork-Delegate'] = self.user.email parse_mail(email) self._assertDelegate(self.user) def testNoDelegate(self): email = self.get_email() parse_mail(email) self._assertDelegate(None) def testInvalidDelegateFallsBackToNoDelegate(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()
class MultipleProjectPatchTest(TestCase): """ Test that patches sent to multiple patchwork projects are handled correctly """ fixtures = ['default_states', 'default_events'] test_comment = 'Test Comment' patch_filename = '0001-add-line.patch' msgid = '<*****@*****.**>' def setUp(self): self.p1 = Project(linkname='test-project-1', name='Project 1', listid='1.example.com', listemail='*****@*****.**') self.p2 = Project(linkname='test-project-2', name='Project 2', listid='2.example.com', listemail='*****@*****.**') self.p1.save() self.p2.save() patch = read_patch(self.patch_filename) email = create_email(self.test_comment + '\n' + patch) del email['Message-Id'] email['Message-Id'] = self.msgid del email['List-ID'] email['List-ID'] = '<' + self.p1.listid + '>' parse_mail(email) del email['List-ID'] email['List-ID'] = '<' + self.p2.listid + '>' parse_mail(email) def testParsedProjects(self): self.assertEquals(Patch.objects.filter(project=self.p1).count(), 1) self.assertEquals(Patch.objects.filter(project=self.p2).count(), 1) def tearDown(self): self.p1.delete() self.p2.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 = '<*****@*****.**>' def setUp(self): self.p1 = Project(linkname='test-project-1', name='Project 1', listid='1.example.com', listemail='*****@*****.**') self.p2 = Project(linkname='test-project-2', name='Project 2', listid='2.example.com', listemail='*****@*****.**') self.p1.save() self.p2.save() patch = read_patch(self.patch_filename) email = create_email(self.test_content + '\n' + patch) del email['Message-Id'] email['Message-Id'] = self.msgid del email['List-ID'] email['List-ID'] = '<' + self.p1.listid + '>' parse_mail(email) del email['List-ID'] email['List-ID'] = '<' + self.p2.listid + '>' parse_mail(email) def testParsedProjects(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 MultipleProjectPatchTest(unittest.TestCase): """ Test that patches sent to multiple patchwork projects are handled correctly """ test_comment = "Test Comment" patch_filename = "0001-add-line.patch" msgid = "<*****@*****.**>" def setUp(self): self.p1 = Project( linkname="test-project-1", name="Project 1", listid="1.example.com", listemail="*****@*****.**" ) self.p2 = Project( linkname="test-project-2", name="Project 2", listid="2.example.com", listemail="*****@*****.**" ) self.p1.save() self.p2.save() patch = read_patch(self.patch_filename) email = create_email(self.test_comment + "\n" + patch) email["Message-Id"] = self.msgid del email["List-ID"] email["List-ID"] = "<" + self.p1.listid + ">" parse_mail(email) del email["List-ID"] email["List-ID"] = "<" + self.p2.listid + ">" parse_mail(email) def testParsedProjects(self): self.assertEquals(Patch.objects.filter(project=self.p1).count(), 1) self.assertEquals(Patch.objects.filter(project=self.p2).count(), 1) def tearDown(self): self.p1.delete() self.p2.delete()
class ReplyPatchTest(TestCase): """ Test that replies to patches are handed correctly """ fixtures = ['default_states', 'default_events'] test_comment = 'Test Comment' patch_filename = '0001-add-line.patch' def setUp(self): self.p = Project(linkname='test-project-1', name='Project 1', listid='1.example.com', listemail='*****@*****.**') self.p.save() patch = read_patch(self.patch_filename) patch1 = create_email(self.test_comment + '\n' + patch, subject="[PATCH 1/2] Meep Meep]") patch2 = create_email(self.test_comment + '\n' + patch, subject="[PATCH 2/2] Meep Meep2]", in_reply_to=patch1['Message-Id']) self.patch_update = create_email(self.test_comment + '\n' + patch, subject="[PATCH v2] Meep Meep2", in_reply_to=patch2['Message-Id']) self.comment = create_email(self.test_comment, subject="Re: [PATCH] Meep Meep2", in_reply_to=patch2['Message-Id']) for email in [patch1, patch2, self.patch_update, self.comment]: del email['List-ID'] email['List-ID'] = '<' + self.p.listid + '>' parse_mail(patch1) parse_mail(patch2) def testPatchUpdateShouldCreateNewRevision(self): revisions_num = SeriesRevision.objects.count() parse_mail(self.patch_update) self.assertEqual(revisions_num + 1, SeriesRevision.objects.count()) def testHintedCommentShouldNOTCreateNewRevision(self): revisions_num = SeriesRevision.objects.count() self.patch_update['X-Patchwork-Hint'] = 'comment' parse_mail(self.patch_update) self.assertEqual(revisions_num, SeriesRevision.objects.count()) def testNormalCommentShouldNOTCreateNewRevision(self): revisions_num = SeriesRevision.objects.count() parse_mail(self.comment) self.assertEqual(revisions_num, SeriesRevision.objects.count()) def tearDown(self): self.p.delete()