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()
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 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)
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 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()
def setUp(self): self.project1 = Project(linkname='test-project-1', name='Project 1', listid='list.example.com', listemail='*****@*****.**') self.project1.save() self.project2 = Project(linkname='test-project-2', name='Project 2', listid='list.example.com', listemail='*****@*****.**') self.project2.save()
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 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 test_get_numeric_linkname(self): """Validate we try to do the right thing for numeric linkname""" project = Project(linkname='12345', name='Test Project', listid='test.example.com') project.save() resp = self.client.get(self.api_url('12345')) self.assertEqual(status.HTTP_200_OK, resp.status_code) self.assertEqual(project.name, resp.data['name'])
def setUp(self): project = Project(linkname='test-project', name='Test Project', use_tags=True) project.save() defaults.patch_author_person.save() self.patch = Patch(project=project, msgid='x', name=defaults.patch_name, submitter=defaults.patch_author_person, content='') self.patch.save() self.tagger = 'Test Tagger <*****@*****.**>'
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()
def create_project(**kwargs): """Create a 'Project' object.""" num = Project.objects.count() values = { 'linkname': 'test-project-%d' % num, 'name': 'Test Project %d' % num, 'listid': 'test%d.example.com' % num, } values.update(kwargs) project = Project(**values) project.save() return project
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 defaults(object): project = Project(linkname='test-project', name='Test Project', listid='test.example.com') patch_author = 'Patch Author <*****@*****.**>' patch_author_person = Person(name='Patch Author', email='*****@*****.**') comment_author = 'Comment Author <*****@*****.**>' sender = 'Test Author <*****@*****.**>' subject = 'Test Subject' series_name = 'Test Series' series_cover_letter = """This is the test series cover letter. I hope you'll like it.""" patch_name = 'Test Patch' patch = """--- /dev/null 2011-01-01 00:00:00.000000000 +0800 +++ a 2011-01-01 00:00:00.000000000 +0800 @@ -0,0 +1 @@ +a """ review = """This is a great addition!"""
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()
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")
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()
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 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)
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()
def setUp(self): self.project = Project( linkname="test-project-1", name="Project 1", listid="1.example.com", listemail="*****@*****.**" ) self.project.save()
class MultipleProjectsPerMailingListTest(TestCase): """Do we handle hosting multiple projects on the same mailing-list?""" fixtures = ['default_states', 'default_events'] def setUp(self): self.project1 = Project(linkname='test-project-1', name='Project 1', listid='list.example.com', listemail='*****@*****.**') self.project1.save() self.project2 = Project(linkname='test-project-2', name='Project 2', listid='list.example.com', listemail='*****@*****.**') self.project2.save() def testTagList(self): self.project1.subject_prefix_tags = '' self.assertEquals(self.project1.get_subject_prefix_tags(), []) self.project1.subject_prefix_tags = ' ' self.assertEquals(self.project1.get_subject_prefix_tags(), []) self.project1.subject_prefix_tags = 'i-g-t' self.assertEquals(self.project1.get_subject_prefix_tags(), ['i-g-t']) self.project1.subject_prefix_tags = 'a,b' self.assertEquals(self.project1.get_subject_prefix_tags(), ['a', 'b']) self.project1.subject_prefix_tags = 'a, ,b,' self.assertEquals(self.project1.get_subject_prefix_tags(), ['a', 'b']) def testSingleTag(self): self.project2.subject_prefix_tags = 'i-g-t' self.project2.save() email = create_email(defaults.patch, project=self.project1, subject='[PATCH] Subject') self.assertEquals(find_project(email), self.project1) email = create_email(defaults.patch, project=self.project1, subject='[PATCH i-g-t] Subject') self.assertEquals(find_project(email), self.project2) def testSingleTagInverted(self): """To test the order_by()""" self.project1.subject_prefix_tags = 'i-g-t' self.project1.save() self.project2.subject_prefix_tags = ' ' self.project2.save() email = create_email(defaults.patch, project=self.project1, subject='[PATCH i-g-t] Subject') self.assertEquals(find_project(email), self.project1) email = create_email(defaults.patch, project=self.project1, subject='[PATCH] Subject') self.assertEquals(find_project(email), self.project2) def testMultipleTags(self): self.project2.subject_prefix_tags = 'i-g-t,intel-gpu-tools' self.project2.save() email = create_email(defaults.patch, project=self.project1, subject='[PATCH] Subject') self.assertEquals(find_project(email), self.project1) email = create_email(defaults.patch, project=self.project1, subject='[PATCH i-g-t] Subject') self.assertEquals(find_project(email), self.project2) email = create_email(defaults.patch, project=self.project1, subject='[PATCH intel-gpu-tools] Subject') self.assertEquals(find_project(email), self.project2) def testStripTag(self): self.project2.subject_prefix_tags = 'i-g-t' self.project2.save() email = create_email(defaults.patch, project=self.project1, subject='[PATCH i-g-t] Subject') parse_mail(email) patch = Patch.objects.all()[0] self.assertEquals(patch.name, 'Subject')
def setUp(self): self.project = Project(linkname='test-project-1', name='Project 1', listid='1.example.com', listemail='*****@*****.**') self.project.save()
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()
class IntelGfxTest(SeriesTest): project = Project(linkname='intel-gfx', name='Intel Gfx', listid='intel-gfx.lists.freedesktop.org', listemail='*****@*****.**')