Index: appengine/monorail/tracker/test/issuereindex_test.py |
diff --git a/appengine/monorail/tracker/test/issuereindex_test.py b/appengine/monorail/tracker/test/issuereindex_test.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5474f5d5734ae02763407e26d9f59e06f6a7878e |
--- /dev/null |
+++ b/appengine/monorail/tracker/test/issuereindex_test.py |
@@ -0,0 +1,128 @@ |
+# 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 |
+ |
+"""Unittests for monorail.tracker.issuereindex.""" |
+ |
+import unittest |
+ |
+import mox |
+ |
+import settings |
+from framework import permissions |
+from framework import template_helpers |
+from services import service_manager |
+from services import tracker_fulltext |
+from testing import fake |
+from testing import testing_helpers |
+from tracker import issuereindex |
+ |
+ |
+class IssueReindexTest(unittest.TestCase): |
+ |
+ def setUp(self): |
+ self.cnxn = 'fake cnxn' |
+ self.services = service_manager.Services( |
+ config=fake.ConfigService(), |
+ issue=fake.IssueService(), |
+ user=fake.UserService(), |
+ project=fake.ProjectService()) |
+ self.project = self.services.project.TestAddProject('proj', project_id=987) |
+ self.mox = mox.Mox() |
+ |
+ def tearDown(self): |
+ self.mox.UnsetStubs() |
+ self.mox.ResetAll() |
+ |
+ def testAssertBasePermission_NoAccess(self): |
+ # Non-members and contributors do not have permission to view this page. |
+ for permission in (permissions.USER_PERMISSIONSET, |
+ permissions.COMMITTER_ACTIVE_PERMISSIONSET): |
+ request, mr = testing_helpers.GetRequestObjects( |
+ project=self.project, perms=permission) |
+ servlet = issuereindex.IssueReindex( |
+ request, 'res', services=self.services) |
+ try: |
+ servlet.AssertBasePermission(mr) |
+ self.fail('Expected PermissisonException not thrown.') |
+ except permissions.PermissionException, e: |
+ self.assertEqual('You are not allowed to administer this project', |
+ e.message) |
+ |
+ def testAssertBasePermission_WithAccess(self): |
+ # Owners and admins have permission to view this page. |
+ for permission in (permissions.OWNER_ACTIVE_PERMISSIONSET, |
+ permissions.ADMIN_PERMISSIONSET): |
+ request, mr = testing_helpers.GetRequestObjects( |
+ project=self.project, perms=permission) |
+ servlet = issuereindex.IssueReindex( |
+ request, 'res', services=self.services) |
+ servlet.AssertBasePermission(mr) |
+ |
+ def testGatherPageData(self): |
+ servlet = issuereindex.IssueReindex('req', 'res', services=self.services) |
+ |
+ mr = testing_helpers.MakeMonorailRequest() |
+ mr.auto_submit = True |
+ ret = servlet.GatherPageData(mr) |
+ |
+ self.assertTrue(ret['auto_submit']) |
+ self.assertIsNone(ret['issue_tab_mode']) |
+ self.assertTrue(ret['page_perms'].CreateIssue) |
+ |
+ def _callProcessFormData(self, post_data, index_issue_1=True): |
+ servlet = issuereindex.IssueReindex('req', 'res', services=self.services) |
+ |
+ mr = testing_helpers.MakeMonorailRequest(project=self.project) |
+ mr.cnxn = self.cnxn |
+ |
+ issue1 = fake.MakeTestIssue( |
+ project_id=self.project.project_id, local_id=1, summary='sum', |
+ status='New', owner_id=111L) |
+ issue1.project_name = self.project.project_name |
+ self.services.issue.TestAddIssue(issue1) |
+ |
+ self.mox.StubOutWithMock(tracker_fulltext, 'IndexIssues') |
+ if index_issue_1: |
+ tracker_fulltext.IndexIssues( |
+ self.cnxn, [issue1], self.services.user, self.services.issue, |
+ self.services.config) |
+ |
+ self.mox.ReplayAll() |
+ |
+ ret = servlet.ProcessFormData(mr, post_data) |
+ self.mox.VerifyAll() |
+ return ret |
+ |
+ def testProcessFormData_NormalInputs(self): |
+ post_data = {'start': 1, 'num': 5} |
+ ret = self._callProcessFormData(post_data) |
+ self.assertEquals( |
+ '/p/None/issues/reindex?start=6&auto_submit=False&num=5', ret) |
+ |
+ def testProcessFormData_LargeInputs(self): |
+ post_data = {'start': 0, 'num': 10000000} |
+ ret = self._callProcessFormData(post_data) |
+ self.assertEquals( |
+ '/p/None/issues/reindex?start=%s&auto_submit=False&num=%s' % ( |
+ settings.max_artifact_search_results_per_page, |
+ settings.max_artifact_search_results_per_page), |
+ ret) |
+ |
+ def testProcessFormData_WithAutoSubmit(self): |
+ post_data = {'start': 1, 'num': 5, 'auto_submit': 1} |
+ ret = self._callProcessFormData(post_data) |
+ self.assertEquals( |
+ '/p/None/issues/reindex?start=6&auto_submit=True&num=5', ret) |
+ |
+ def testProcessFormData_WithAutoSubmitButNoMoreIssues(self): |
+ """This project has no issues 6-10, so stop autosubmitting.""" |
+ post_data = {'start': 6, 'num': 5, 'auto_submit': 1} |
+ ret = self._callProcessFormData(post_data, index_issue_1=False) |
+ self.assertEquals( |
+ '/p/None/issues/reindex?start=11&auto_submit=False&num=5', ret) |
+ |
+ |
+if __name__ == '__main__': |
+ unittest.main() |