Index: appengine/monorail/tracker/test/issueoriginal_test.py |
diff --git a/appengine/monorail/tracker/test/issueoriginal_test.py b/appengine/monorail/tracker/test/issueoriginal_test.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..aa179543a300fcfaf9811cd4a4e39e1d5742e6b4 |
--- /dev/null |
+++ b/appengine/monorail/tracker/test/issueoriginal_test.py |
@@ -0,0 +1,220 @@ |
+# Copyright 2016 The Chromium Authors. All rights reserved. |
+# Use of this source code is govered by a BSD-style |
+# license that can be found in the LICENSE file or at |
+# https://developers.google.com/open-source/licenses/bsd |
+ |
+"""Tests for the issueoriginal module.""" |
+ |
+import unittest |
+ |
+import webapp2 |
+ |
+from framework import framework_helpers |
+from framework import permissions |
+from services import service_manager |
+from testing import fake |
+from testing import testing_helpers |
+from tracker import issueoriginal |
+ |
+ |
+STRIPPED_MSG = 'Are you sure that it is plugged in?\n' |
+ORIG_MSG = ('Are you sure that it is plugged in?\n' |
+ '\n' |
+ '> Issue 1 entered by user foo:\n' |
+ '> http://blah blah\n' |
+ '> The screen is just dark when I press power on\n') |
+XXX_GOOD_UNICODE_MSG = u'Thanks,\n\342\230\206*username*'.encode('utf-8') |
+GOOD_UNICODE_MSG = u'Thanks,\n XXX *username*' |
+XXX_BAD_UNICODE_MSG = ORIG_MSG + ('\xff' * 1000) |
+BAD_UNICODE_MSG = ORIG_MSG + 'XXX' |
+GMAIL_CRUFT_MSG = ORIG_MSG # XXX .replace(' ', ' \xa0 ') |
+ |
+ |
+class IssueOriginalTest(unittest.TestCase): |
+ |
+ def setUp(self): |
+ self.services = service_manager.Services( |
+ project=fake.ProjectService(), |
+ config=fake.ConfigService(), |
+ issue=fake.IssueService(), |
+ user=fake.UserService()) |
+ self.servlet = issueoriginal.IssueOriginal( |
+ 'req', 'res', services=self.services) |
+ |
+ self.proj = self.services.project.TestAddProject('proj', project_id=789) |
+ summary = 'System wont boot' |
+ status = 'New' |
+ cnxn = 'fake connection' |
+ self.local_id_1 = self.services.issue.CreateIssue( |
+ cnxn, self.services, |
+ 789, summary, status, 111L, [], [], [], [], 111L, |
+ 'The screen is just dark when I press power on') |
+ _amendments, comment_0 = self.services.issue.ApplyIssueComment( |
+ cnxn, self.services, 222L, 789, 1, |
+ summary, status, 222L, [], [], [], [], [], [], [], [], 0, |
+ comment=STRIPPED_MSG, inbound_message=ORIG_MSG) |
+ _amendments, comment_1 = self.services.issue.ApplyIssueComment( |
+ cnxn, self.services, 222L, 789, 1, |
+ summary, status, 222L, [], [], [], [], [], [], [], [], None, |
+ comment=STRIPPED_MSG, inbound_message=BAD_UNICODE_MSG) |
+ _amendments, comment_2 = self.services.issue.ApplyIssueComment( |
+ cnxn, self.services, 222L, 789, 1, |
+ summary, status, 222L, [], [], [], [], [], [], [], [], 0, |
+ comment=STRIPPED_MSG, inbound_message=GMAIL_CRUFT_MSG) |
+ _amendments, comment_3 = self.services.issue.ApplyIssueComment( |
+ cnxn, self.services, 222L, 789, 1, |
+ summary, status, 222L, [], [], [], [], [], [], [], [], 0, |
+ comment=STRIPPED_MSG, inbound_message=GOOD_UNICODE_MSG) |
+ self.issue_1 = self.services.issue.GetIssueByLocalID( |
+ cnxn, 789, self.local_id_1) |
+ self.comments = [comment_0, comment_1, comment_2, comment_3] |
+ |
+ def testAssertBasePermission(self): |
+ """Permit users who can view issue, view inbound message and delete.""" |
+ _request, mr = testing_helpers.GetRequestObjects( |
+ path='/p/proj/issues/original?id=1&seq=1', |
+ project=self.proj) |
+ mr.perms = permissions.EMPTY_PERMISSIONSET |
+ self.assertRaises(permissions.PermissionException, |
+ self.servlet.AssertBasePermission, mr) |
+ mr.perms = permissions.CONTRIBUTOR_ACTIVE_PERMISSIONSET |
+ self.assertRaises(permissions.PermissionException, |
+ self.servlet.AssertBasePermission, mr) |
+ mr.perms = permissions.OWNER_ACTIVE_PERMISSIONSET |
+ self.servlet.AssertBasePermission(mr) |
+ |
+ def testGatherPageData_Normal(self): |
+ _request, mr = testing_helpers.GetRequestObjects( |
+ path='/p/proj/issues/original?id=1&seq=1', |
+ project=self.proj) |
+ page_data = self.servlet.GatherPageData(mr) |
+ self.assertEqual(1, page_data['local_id']) |
+ self.assertEqual(1, page_data['seq']) |
+ self.assertFalse(page_data['is_binary']) |
+ self.assertEqual(ORIG_MSG, page_data['message_body']) |
+ |
+ def testGatherPageData_GoodUnicode(self): |
+ _request, mr = testing_helpers.GetRequestObjects( |
+ path='/p/proj/issues/original?id=1&seq=4', |
+ project=self.proj) |
+ page_data = self.servlet.GatherPageData(mr) |
+ self.assertEqual(1, page_data['local_id']) |
+ self.assertEqual(4, page_data['seq']) |
+ self.assertEqual(GOOD_UNICODE_MSG, page_data['message_body']) |
+ self.assertFalse(page_data['is_binary']) |
+ |
+ def testGatherPageData_BadUnicode(self): |
+ _request, mr = testing_helpers.GetRequestObjects( |
+ path='/p/proj/issues/original?id=1&seq=2', |
+ project=self.proj) |
+ page_data = self.servlet.GatherPageData(mr) |
+ self.assertEqual(1, page_data['local_id']) |
+ self.assertEqual(2, page_data['seq']) |
+ # xxx: should be true if cruft was there. |
+ # self.assertTrue(page_data['is_binary']) |
+ |
+ def testGatherPageData_GmailCruft(self): |
+ _request, mr = testing_helpers.GetRequestObjects( |
+ path='/p/proj/issues/original?id=1&seq=3', |
+ project=self.proj) |
+ page_data = self.servlet.GatherPageData(mr) |
+ self.assertEqual(1, page_data['local_id']) |
+ self.assertEqual(3, page_data['seq']) |
+ self.assertFalse(page_data['is_binary']) |
+ self.assertEqual(ORIG_MSG, page_data['message_body']) |
+ |
+ def testGatherPageData_404(self): |
+ _request, mr = testing_helpers.GetRequestObjects( |
+ path='/p/proj/issues/original', |
+ project=self.proj) |
+ try: |
+ self.servlet.GatherPageData(mr) |
+ self.fail() |
+ except webapp2.HTTPException as e: |
+ self.assertEquals(404, e.code) |
+ |
+ _request, mr = testing_helpers.GetRequestObjects( |
+ path='/p/proj/issues/original?id=1&seq=999', |
+ project=self.proj) |
+ try: |
+ self.servlet.GatherPageData(mr) |
+ self.fail() |
+ except webapp2.HTTPException as e: |
+ self.assertEquals(404, e.code) |
+ |
+ _request, mr = testing_helpers.GetRequestObjects( |
+ path='/p/proj/issues/original?id=999&seq=1', |
+ project=self.proj) |
+ try: |
+ self.servlet.GatherPageData(mr) |
+ self.fail() |
+ except webapp2.HTTPException as e: |
+ self.assertEquals(404, e.code) |
+ |
+ def testGetIssueAndComment_Normal(self): |
+ _request, mr = testing_helpers.GetRequestObjects( |
+ path='/p/proj/issues/original?id=1&seq=1', |
+ project=self.proj) |
+ issue, comment = self.servlet._GetIssueAndComment(mr) |
+ self.assertEqual(self.issue_1, issue) |
+ self.assertEqual(self.comments[1].content, comment.content) |
+ |
+ def testGetIssueAndComment_NoSuchComment(self): |
+ _request, mr = testing_helpers.GetRequestObjects( |
+ path='/p/proj/issues/original?id=1&seq=99', |
+ project=self.proj) |
+ try: |
+ self.servlet._GetIssueAndComment(mr) |
+ self.fail() |
+ except webapp2.HTTPException as e: |
+ self.assertEquals(404, e.code) |
+ |
+ def testGetIssueAndComment_Malformed(self): |
+ _request, mr = testing_helpers.GetRequestObjects( |
+ path='/p/proj/issues/original', |
+ project=self.proj) |
+ try: |
+ self.servlet._GetIssueAndComment(mr) |
+ self.fail() |
+ except webapp2.HTTPException as e: |
+ self.assertEquals(404, e.code) |
+ |
+ _request, mr = testing_helpers.GetRequestObjects( |
+ path='/p/proj/issues/original?id=1', |
+ project=self.proj) |
+ try: |
+ self.servlet._GetIssueAndComment(mr) |
+ self.fail() |
+ except webapp2.HTTPException as e: |
+ self.assertEquals(404, e.code) |
+ |
+ _request, mr = testing_helpers.GetRequestObjects( |
+ path='/p/proj/issues/original?seq=1', |
+ project=self.proj) |
+ try: |
+ self.servlet._GetIssueAndComment(mr) |
+ self.fail() |
+ except webapp2.HTTPException as e: |
+ self.assertEquals(404, e.code) |
+ |
+ _request, mr = testing_helpers.GetRequestObjects( |
+ path='/p/proj/issues/original?id=abc', |
+ project=self.proj) |
+ try: |
+ self.servlet._GetIssueAndComment(mr) |
+ self.fail() |
+ except webapp2.HTTPException as e: |
+ self.assertEquals(404, e.code) |
+ |
+ _request, mr = testing_helpers.GetRequestObjects( |
+ path='/p/proj/issues/original?seq=abc', |
+ project=self.proj) |
+ try: |
+ self.servlet._GetIssueAndComment(mr) |
+ self.fail() |
+ except webapp2.HTTPException as e: |
+ self.assertEquals(404, e.code) |
+ |
+ |
+if __name__ == '__main__': |
+ unittest.main() |