Example #1
0
    def testIndexOrLexicalList_ApprovalStatus(self):
        art = fake.MakeTestIssue(789, 1, 'sum 2', 'New', 111)
        art.labels = ['samename-value1']
        art.approval_values = [tracker_pb2.ApprovalValue(approval_id=4)]

        all_field_defs = [
            tracker_bizobj.MakeFieldDef(3, 789, 'samename',
                                        tracker_pb2.FieldTypes.INT_TYPE, None,
                                        None, False, False, False, None, None,
                                        None, False, None, None, None, None,
                                        'cow spots', False),
            tracker_bizobj.MakeFieldDef(4, 788, 'samename',
                                        tracker_pb2.FieldTypes.APPROVAL_TYPE,
                                        None, None, False, False, False, None,
                                        None, None, False, None, None, None,
                                        None, 'cow spots', False)
        ]

        accessor = sorting._IndexOrLexicalList([], all_field_defs, 'samename',
                                               {})
        self.assertEqual([0, 'value1'], accessor(art))
        neg_accessor = MakeDescending(accessor)
        self.assertEqual(
            [sorting.DescendingValue('value1'),
             sorting.DescendingValue(0)], neg_accessor(art))
 def testShiftEnumFieldsIntoLabels_FoundSomeEnumFields(self):
     self.config.field_defs.append(
         tracker_bizobj.MakeFieldDef(
             123, 789, 'Component', tracker_pb2.FieldTypes.ENUM_TYPE, None,
             '', False, False, False, None, None, '', False, '', '',
             tracker_pb2.NotifyTriggers.NEVER, 'no_action',
             'What HW part is affected?', False))
     self.config.field_defs.append(
         tracker_bizobj.MakeFieldDef(
             234, 789, 'Size', tracker_pb2.FieldTypes.ENUM_TYPE, None, '',
             False, False, False, None, None, '', False, '', '',
             tracker_pb2.NotifyTriggers.NEVER, 'no_action',
             'How big is this work item?', False))
     labels = ['Security', 'Performance', 'Pri-1', 'M-2']
     labels_remove = ['ReleaseBlock']
     field_val_strs = {123: ['CPU']}
     field_val_strs_remove = {234: ['Small']}
     field_helpers.ShiftEnumFieldsIntoLabels(labels, labels_remove,
                                             field_val_strs,
                                             field_val_strs_remove,
                                             self.config)
     self.assertEqual(
         ['Security', 'Performance', 'Pri-1', 'M-2', 'Component-CPU'],
         labels)
     self.assertEqual(['ReleaseBlock', 'Size-Small'], labels_remove)
     self.assertEqual({}, field_val_strs)
     self.assertEqual({}, field_val_strs_remove)
Example #3
0
    def testIndexOrLexicalList_CustomFields(self):
        art = fake.MakeTestIssue(789, 1, 'sum 2', 'New', 111)
        art.labels = ['samename-value1']
        art.field_values = [
            tracker_bizobj.MakeFieldValue(3, 6078, None, None, None, None,
                                          False)
        ]

        all_field_defs = [
            tracker_bizobj.MakeFieldDef(3, 789, 'samename',
                                        tracker_pb2.FieldTypes.INT_TYPE, None,
                                        None, False, False, False, None, None,
                                        None, False, None, None, None, None,
                                        'cow spots', False),
            tracker_bizobj.MakeFieldDef(4, 788, 'samename',
                                        tracker_pb2.FieldTypes.APPROVAL_TYPE,
                                        None, None, False, False, False, None,
                                        None, None, False, None, None, None,
                                        None, 'cow spots', False),
            tracker_bizobj.MakeFieldDef(4, 788, 'notsamename',
                                        tracker_pb2.FieldTypes.APPROVAL_TYPE,
                                        None, None, False, False, False, None,
                                        None, None, False, None, None, None,
                                        None, 'should get filtered out', False)
        ]

        accessor = sorting._IndexOrLexicalList([], all_field_defs, 'samename',
                                               {})
        self.assertEqual([6078, 'value1'], accessor(art))
        neg_accessor = MakeDescending(accessor)
        self.assertEqual([sorting.DescendingValue('value1'), -6078],
                         neg_accessor(art))
 def testParseFieldValues_Normal(self):
     fd_int = tracker_bizobj.MakeFieldDef(123, 789, 'CPU',
                                          tracker_pb2.FieldTypes.INT_TYPE,
                                          None, '', False, False, False,
                                          None, None, '', False, '', '',
                                          tracker_pb2.NotifyTriggers.NEVER,
                                          'no_action', 'doc', False)
     fd_date = tracker_bizobj.MakeFieldDef(124, 789, 'Deadline',
                                           tracker_pb2.FieldTypes.DATE_TYPE,
                                           None, '', False, False, False,
                                           None, None, '', False, '', '',
                                           tracker_pb2.NotifyTriggers.NEVER,
                                           'no_action', 'doc', False)
     self.config.field_defs.extend([fd_int, fd_date])
     field_val_strs = {123: ['80386', '68040'], 124: ['2009-02-13']}
     field_values = field_helpers.ParseFieldValues(self.mr.cnxn,
                                                   self.services.user,
                                                   field_val_strs,
                                                   self.config)
     fv1 = tracker_bizobj.MakeFieldValue(123, 80386, None, None, None,
                                         False)
     fv2 = tracker_bizobj.MakeFieldValue(123, 68040, None, None, None,
                                         False)
     fv3 = tracker_bizobj.MakeFieldValue(124, None, None, None, 1234483200,
                                         False)
     self.assertEqual([fv1, fv2, fv3], field_values)
  def testGatherPageData_Approvals(self):
    user = self.services.user.TestAddUser('user@invalid', 100)
    mr = testing_helpers.MakeMonorailRequest(
        path='/p/proj/issues/entry', services=self.services)
    mr.auth.user_view = framework_views.MakeUserView(
        'cnxn', self.services.user, 100)
    mr.template_name = 'rutabaga'

    self.mox.StubOutWithMock(self.services.user, 'GetUser')
    self.services.user.GetUser(
        mox.IgnoreArg(), mox.IgnoreArg()).MultipleTimes().AndReturn(user)
    self.mox.ReplayAll()
    config = self.services.config.GetProjectConfig(mr.cnxn, mr.project_id)
    config.field_defs = [
    tracker_bizobj.MakeFieldDef(
        24, mr.project_id, 'UXReview',
        tracker_pb2.FieldTypes.APPROVAL_TYPE, None, '', False, False,
        False, None, None, '', False, '', '',
        tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False)]
    self.services.config.StoreConfig(mr.cnxn, config)
    template = tracker_pb2.TemplateDef()
    template.phases = [tracker_pb2.Phase(
        phase_id=1, rank=4, name='Stable')]
    template.approval_values = [tracker_pb2.ApprovalValue(
        approval_id=24, phase_id=1,
        status=tracker_pb2.ApprovalStatus.NEEDS_REVIEW)]
    self.services.template.GetTemplateByName.return_value = template

    page_data = self.servlet.GatherPageData(mr)
    self.mox.VerifyAll()
    self.assertEqual(page_data['approvals'][0].field_name, 'UXReview')
    self.assertEqual(page_data['initial_phases'][0],
                          tracker_pb2.Phase(phase_id=1, name='Stable', rank=4))
    self.assertEqual(page_data['prechecked_approvals'], ['24_phase_0'])
    self.assertEqual(page_data['required_approval_ids'], [24])

    # phase fields row shown when config contains phase fields.
    config.field_defs.append(tracker_bizobj.MakeFieldDef(
        26, mr.project_id, 'GateTarget',
        tracker_pb2.FieldTypes.INT_TYPE, None, '', False, False, False,
        None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER,
        'no_action', 'doc', False, is_phase_field=True))
    self.services.config.StoreConfig(mr.cnxn, config)
    page_data = self.servlet.GatherPageData(mr)
    self.assertEqual(page_data['issue_phase_names'], ['stable'])

    # approval subfields in config hidden when chosen template does not contain
    # its parent approval
    template = tracker_pb2.TemplateDef()
    self.services.template.GetTemplateByName.return_value = template
    page_data = self.servlet.GatherPageData(mr)
    self.assertEqual(page_data['approvals'], [])
    # phase fields row hidden when template has no phases
    self.assertEqual(page_data['issue_phase_names'], [])
  def testConvertApprovals(self):
    """Test we can convert ApprovalValues."""
    cnxn = None
    config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
    config.field_defs = [
      tracker_bizobj.MakeFieldDef(
            1, 789, 'DesignReview', tracker_pb2.FieldTypes.APPROVAL_TYPE, None,
            None, False, False, False, None, None, None, False, None, None,
            None, None, 'doc', False),
        tracker_bizobj.MakeFieldDef(
            2, 789, 'PrivacyReview', tracker_pb2.FieldTypes.APPROVAL_TYPE, None,
            None, False, False, False, 0, 99, None, False, None, None, None,
            None, 'doc', False),
        tracker_bizobj.MakeFieldDef(
            5, 789, 'UXReview', tracker_pb2.FieldTypes.APPROVAL_TYPE, None,
            None, False, False, False, None, None, None, False, None, None,
            None, None, 'doc', False),
        tracker_bizobj.MakeFieldDef(
            6, 789, 'Homepage', tracker_pb2.FieldTypes.URL_TYPE, None, None,
            False, False, False, None, None, None, False, None, None, None,
            None, 'doc', False),
        ]
    phases = [
        tracker_pb2.Phase(phase_id=1),
        tracker_pb2.Phase(phase_id=2, name="JustAPhase", rank=3),
    ]
    ts = 1536260059
    expected = [
        api_pb2_v1.Approval(
            approvalName="DesignReview",
            approvers=[self.person_1],
            setter=self.person_1,
            status=api_pb2_v1.ApprovalStatus.needsReview,
            setOn=datetime.datetime.fromtimestamp(ts),
        ),
        api_pb2_v1.Approval(
            approvalName="UXReview",
            approvers=[self.person_1],
            status=api_pb2_v1.ApprovalStatus.notSet,
            phaseName="JustAPhase",
        ),
    ]
    avs = [
        tracker_pb2.ApprovalValue(
            approval_id=1, approver_ids=[111], setter_id=111,
            status=tracker_pb2.ApprovalStatus.NEEDS_REVIEW, set_on=ts),
        tracker_pb2.ApprovalValue(
            approval_id=5, approver_ids=[111], phase_id=2)
    ]
    actual = api_pb2_v1_helpers.convert_approvals(
        cnxn, avs, self.services, config, phases)

    self.assertEqual(actual, expected)
Example #7
0
 def testConvertFieldValues_ClearAndRemove(self):
     """The client wants to clear and remove some custom fields."""
     mar = mock.Mock()
     mar.config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
     mar.config.field_defs = [
         tracker_bizobj.MakeFieldDef(1, 789, 'Priority',
                                     tracker_pb2.FieldTypes.ENUM_TYPE, None,
                                     None, False, False, False, None, None,
                                     None, False, None, None, None, None,
                                     'doc', False),
         tracker_bizobj.MakeFieldDef(11, 789, 'OS',
                                     tracker_pb2.FieldTypes.ENUM_TYPE, None,
                                     None, False, False, False, None, None,
                                     None, False, None, None, None, None,
                                     'doc', False),
         tracker_bizobj.MakeFieldDef(2, 789, 'EstDays',
                                     tracker_pb2.FieldTypes.INT_TYPE, None,
                                     None, False, False, False, 0, 99, None,
                                     False, None, None, None, None, 'doc',
                                     False),
         tracker_bizobj.MakeFieldDef(3, 789, 'Nickname',
                                     tracker_pb2.FieldTypes.STR_TYPE, None,
                                     None, False, False, False, None, None,
                                     None, False, None, None, None, None,
                                     'doc', False),
     ]
     field_values = [
         api_pb2_v1.FieldValue(
             fieldName='Priority',
             fieldValue='High',
             operator=api_pb2_v1.FieldValueOperator.remove),
         api_pb2_v1.FieldValue(
             fieldName='OS', operator=api_pb2_v1.FieldValueOperator.clear),
         api_pb2_v1.FieldValue(
             fieldName='EstDays',
             operator=api_pb2_v1.FieldValueOperator.clear),
         api_pb2_v1.FieldValue(
             fieldName='Nickname',
             fieldValue='Scout',
             operator=api_pb2_v1.FieldValueOperator.remove),
     ]
     actual = api_pb2_v1_helpers.convert_field_values(
         field_values, mar, self.services)
     (fv_list_add, fv_list_remove, fv_list_clear, label_list_add,
      label_list_remove) = actual
     self.assertEquals([], fv_list_add)
     self.assertEquals([
         tracker_bizobj.MakeFieldValue(3, None, 'Scout', None, None, None,
                                       False)
     ], fv_list_remove)
     self.assertEquals([11, 2], fv_list_clear)
     self.assertEquals([], label_list_add)
     self.assertEquals(['Priority-High'], label_list_remove)
    def setUp(self):
        self.approval_fd = tracker_bizobj.MakeFieldDef(
            1, 789, 'LaunchApproval', tracker_pb2.FieldTypes.APPROVAL_TYPE,
            None, None, True, True, False, 3, 99, None, False, None, None,
            None, 'no_action', 'descriptive docstring', False, None, False)

        self.approval_def = tracker_pb2.ApprovalDef(approval_id=1,
                                                    approver_ids=[111],
                                                    survey='question?')

        self.field_def = tracker_bizobj.MakeFieldDef(
            2, 789, 'AffectedUsers', tracker_pb2.FieldTypes.INT_TYPE, None,
            None, True, True, False, 3, 99, None, False, None, None, None,
            'no_action', 'descriptive docstring', False, 1, False)
  def testMakeFieldDef_Full(self):
    fd = tracker_bizobj.MakeFieldDef(
        1, 789, 'Size', tracker_pb2.FieldTypes.INT_TYPE, None, None,
        False, False, False, 1, 100, None, False,
        None, None, None, 'no_action', 'Some field', False)
    self.assertEqual(1, fd.min_value)
    self.assertEqual(100, fd.max_value)

    fd = tracker_bizobj.MakeFieldDef(
        1, 789, 'Size', tracker_pb2.FieldTypes.STR_TYPE, None, None,
        False, False, False, None, None, 'A.*Z', False,
        'EditIssue', None, None, 'no_action', 'Some field', False)
    self.assertEqual('A.*Z', fd.regex)
    self.assertEqual('EditIssue', fd.needs_perm)
Example #10
0
 def testConvertFieldValues_Errors(self):
     """We don't crash on bad requests."""
     mar = mock.Mock()
     mar.config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
     mar.config.field_defs = [
         tracker_bizobj.MakeFieldDef(2, 789, 'EstDays',
                                     tracker_pb2.FieldTypes.INT_TYPE, None,
                                     None, False, False, False, 0, 99, None,
                                     False, None, None, None, None, 'doc',
                                     False),
     ]
     field_values = [
         api_pb2_v1.FieldValue(
             fieldName='Unknown',
             operator=api_pb2_v1.FieldValueOperator.clear),
     ]
     actual = api_pb2_v1_helpers.convert_field_values(
         field_values, mar, self.services)
     (fv_list_add, fv_list_remove, fv_list_clear, label_list_add,
      label_list_remove) = actual
     self.assertEquals([], fv_list_add)
     self.assertEquals([], fv_list_remove)
     self.assertEquals([], fv_list_clear)
     self.assertEquals([], label_list_add)
     self.assertEquals([], label_list_remove)
Example #11
0
 def testParseFieldValues_EmptyPhases(self):
     field_val_strs = {126: ['70']}
     phase_field_val_strs = {}
     fd_phase = tracker_bizobj.MakeFieldDef(
         126,
         789,
         'Target',
         tracker_pb2.FieldTypes.INT_TYPE,
         None,
         '',
         False,
         False,
         False,
         None,
         None,
         '',
         False,
         '',
         '',
         tracker_pb2.NotifyTriggers.NEVER,
         'no_action',
         'milestone target',
         False,
         is_phase_field=True)
     self.config.field_defs.extend([fd_phase])
     field_values = field_helpers.ParseFieldValues(self.mr.cnxn,
                                                   self.services.user,
                                                   field_val_strs,
                                                   phase_field_val_strs,
                                                   self.config)
     self.assertEqual([], field_values)
Example #12
0
    def testProcessFormData_BadUserField(self):
        """Test PFD when a nonexistent user is added as a field value."""
        local_id_1, _ = self.services.issue.CreateIssue(
            self.cnxn, self.services, 789, 'issue summary', 'New', 111, [], [],
            [], [], 111, 'test issue')
        mr = testing_helpers.MakeMonorailRequest(
            project=self.project,
            perms=permissions.OWNER_ACTIVE_PERMISSIONSET,
            user_info={'user_id': 111})
        mr.local_id_list = [local_id_1]

        fd = tracker_bizobj.MakeFieldDef(12345, 789, 'PM',
                                         tracker_pb2.FieldTypes.USER_TYPE,
                                         None, '', False, False, False, None,
                                         None, '', False, '', '',
                                         tracker_pb2.NotifyTriggers.NEVER,
                                         'no_action', 'doc', False)
        self.config.field_defs.append(fd)

        post_data = fake.PostData(custom_12345=['*****@*****.**'],
                                  owner=['*****@*****.**'],
                                  can=[1],
                                  q=[''],
                                  colspec=[''],
                                  sort=[''],
                                  groupby=[''],
                                  start=[0],
                                  num=[100])
        self._MockMethods()
        self.servlet.ProcessFormData(mr, post_data)
        self.assertEqual('User not found', mr.errors.custom_fields[0].message)
Example #13
0
    def testProcessFormData_CustomFields(self):
        """Test PFD processes edits to custom fields."""
        local_id_1, _ = self.services.issue.CreateIssue(
            self.cnxn, self.services, 789, 'issue summary', 'New', 111, [], [],
            [], [], 111, 'test issue')
        mr = testing_helpers.MakeMonorailRequest(
            project=self.project,
            perms=permissions.OWNER_ACTIVE_PERMISSIONSET,
            user_info={'user_id': 111})
        mr.local_id_list = [local_id_1]

        fd = tracker_bizobj.MakeFieldDef(12345, 789, 'CPU',
                                         tracker_pb2.FieldTypes.INT_TYPE, None,
                                         '', False, False, False, None, None,
                                         '', False, '', '',
                                         tracker_pb2.NotifyTriggers.NEVER,
                                         'no_action', 'doc', False)
        self.config.field_defs.append(fd)

        post_data = fake.PostData(custom_12345=['111'],
                                  owner=['*****@*****.**'],
                                  can=[1],
                                  q=[''],
                                  colspec=[''],
                                  sort=[''],
                                  groupby=[''],
                                  start=[0],
                                  num=[100])
        self._MockMethods()
        self.servlet.ProcessFormData(mr, post_data)
        self.assertEqual((tracker_pb2.FieldID.CUSTOM, '111'),
                         self.GetFirstAmendment(789, local_id_1))
Example #14
0
    def testIndexOrLexicalList_ApprovalApprover(self):
        art = art = fake.MakeTestIssue(789, 1, 'sum 2', 'New', 111)
        art.labels = ['samename-approver-value1']
        art.approval_values = [
            tracker_pb2.ApprovalValue(approval_id=4, approver_ids=[333])
        ]

        all_field_defs = [
            tracker_bizobj.MakeFieldDef(4, 788, 'samename',
                                        tracker_pb2.FieldTypes.APPROVAL_TYPE,
                                        None, None, False, False, False, None,
                                        None, None, False, None, None, None,
                                        None, 'cow spots', False)
        ]
        users_by_id = {
            333: framework_views.StuffUserView(333, '*****@*****.**', True)
        }

        accessor = sorting._IndexOrLexicalList([], all_field_defs,
                                               'samename-approver',
                                               users_by_id)
        self.assertEqual(['*****@*****.**', 'value1'], accessor(art))
        neg_accessor = MakeDescending(accessor)
        self.assertEqual([
            sorting.DescendingValue('value1'),
            sorting.DescendingValue('*****@*****.**')
        ], neg_accessor(art))
Example #15
0
 def testParseOneFieldValue(self):
     fd = tracker_bizobj.MakeFieldDef(123,
                                      789,
                                      'Target',
                                      tracker_pb2.FieldTypes.INT_TYPE,
                                      None,
                                      '',
                                      False,
                                      False,
                                      False,
                                      None,
                                      None,
                                      '',
                                      False,
                                      '',
                                      '',
                                      tracker_pb2.NotifyTriggers.NEVER,
                                      'no_action',
                                      'milestone target',
                                      False,
                                      is_phase_field=True)
     phase_fvs = field_helpers.ParseOnePhaseFieldValue(
         self.mr.cnxn, self.services.user, fd, '70', [30, 40])
     self.assertEqual(len(phase_fvs), 2)
     self.assertEqual(phase_fvs[0].phase_id, 30)
     self.assertEqual(phase_fvs[1].phase_id, 40)
Example #16
0
    def test_UrlType(self):
        fd = tracker_bizobj.MakeFieldDef(123, 789, 'CPU',
                                         tracker_pb2.FieldTypes.URL_TYPE, None,
                                         '', False, False, False, None, None,
                                         '', False, '', '',
                                         tracker_pb2.NotifyTriggers.NEVER,
                                         'no_action', 'doc', False)

        fv = tracker_bizobj.MakeFieldValue(123, None, None, None, None,
                                           'www.google.com', False)
        msg = field_helpers.ValidateCustomField(self.mr, self.mr.project,
                                                self.services, fd, fv)
        self.assertIsNone(msg)

        fv.url_value = 'go/puppies'
        msg = field_helpers.ValidateCustomField(self.mr, self.mr.project,
                                                self.services, fd, fv)
        self.assertIsNone(msg)

        fv.url_value = 'go/213'
        msg = field_helpers.ValidateCustomField(self.mr, self.mr.project,
                                                self.services, fd, fv)
        self.assertIsNone(msg)

        fv.url_value = 'puppies'
        msg = field_helpers.ValidateCustomField(self.mr, self.mr.project,
                                                self.services, fd, fv)
        self.assertEqual('Value must be a valid url', msg)
Example #17
0
  def setUp(self):
    self.services = service_manager.Services(
        user=fake.UserService(),
        config=fake.ConfigService(),
        project=fake.ProjectService(),
        usergroup=fake.UserGroupService())
    self.project = self.services.project.TestAddProject('proj')
    self.mr = testing_helpers.MakeMonorailRequest(
        project=self.project)
    self.config = self.services.config.GetProjectConfig(
        'fake cnxn', self.project.project_id)
    self.fd_1 =  tracker_bizobj.MakeFieldDef(
        1, 789, 'UXReview', tracker_pb2.FieldTypes.STR_TYPE, None,
        '', False, False, False, None, None, '', False, '', '',
        tracker_pb2.NotifyTriggers.NEVER, 'no_action',
        'Approval for UX review', False)
    self.fd_2 =  tracker_bizobj.MakeFieldDef(
        2, 789, 'UXReview', tracker_pb2.FieldTypes.STR_TYPE, None,
        '', False, False, False, None, None, '', False, '', '',
        tracker_pb2.NotifyTriggers.NEVER, 'no_action',
        'Approval for UX review', False)
    self.fd_3 = tracker_bizobj.MakeFieldDef(
        3, 789, 'UXApproval', tracker_pb2.FieldTypes.APPROVAL_TYPE, None,
        '', False, False, False, None, None, '', False, '', '',
        tracker_pb2.NotifyTriggers.NEVER, 'no_action',
        'Approval for UX review', False)
    self.fd_4 = tracker_bizobj.MakeFieldDef(
        4, 789, 'TestApproval', tracker_pb2.FieldTypes.APPROVAL_TYPE, None,
        '', False, False, False, None, None, '', False, '', '',
        tracker_pb2.NotifyTriggers.NEVER, 'no_action',
        'Approval for Test review', False)
    self.fd_5 = tracker_bizobj.MakeFieldDef(
        5, 789, 'SomeApproval', tracker_pb2.FieldTypes.APPROVAL_TYPE, None,
        '', False, False, False, None, None, '', False, '', '',
        tracker_pb2.NotifyTriggers.NEVER, 'no_action',
        'Approval for Test review', False)
    self.ad_3 = tracker_pb2.ApprovalDef(approval_id=3)
    self.ad_4 = tracker_pb2.ApprovalDef(approval_id=4)
    self.ad_5 = tracker_pb2.ApprovalDef(approval_id=5)
    self.cd_1 = tracker_bizobj.MakeComponentDef(
        1, 789, 'BackEnd', 'doc', False, [111], [], 100000, 222)

    self.services.user.TestAddUser('*****@*****.**', 111)
    self.services.user.TestAddUser('*****@*****.**', 222)
    self.services.user.TestAddUser('*****@*****.**', 333)
    self.services.project.TestAddProjectMembers(
        [111], self.project, 'OWNER_ROLE')
  def setUp(self):
    self.config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
    self.config.field_defs = [
        tracker_bizobj.MakeFieldDef(
            1, 789, 'Goats', tracker_pb2.FieldTypes.INT_TYPE, None, None,
            False, False, False, None, None, None, False, None, None, None,
            None, 'Num of Goats in the season', False, is_phase_field=True),
        tracker_bizobj.MakeFieldDef(
            2, 789, 'DogNames', tracker_pb2.FieldTypes.STR_TYPE, None, None,
            False, False, False, None, None, None, False, None, None, None,
            None, 'good dog names', False),
        tracker_bizobj.MakeFieldDef(
            3, 789, 'Approval', tracker_pb2.FieldTypes.APPROVAL_TYPE,
            None, None, False, False, False, None, None, None, False, None,
            None, None, None, 'Tracks review from cows', False)
    ]
    self.config.approval_defs = [tracker_pb2.ApprovalDef(approval_id=3)]
    self.issue = MakeTestIssue(
        local_id=1, issue_id=100001, summary='One')
    self.issue.field_values = [
        tracker_bizobj.MakeFieldValue(
            1, 34, None, None, None, None, False, phase_id=23),
        tracker_bizobj.MakeFieldValue(
            1, 35, None, None, None, None, False, phase_id=24),
        tracker_bizobj.MakeFieldValue(
            2, None, 'Waffles', None, None, None, False),
    ]
    self.issue.phases = [
        tracker_pb2.Phase(phase_id=23, name='winter'),
        tracker_pb2.Phase(phase_id=24, name='summer')]
    self.issue.approval_values = [
        tracker_pb2.ApprovalValue(
            approval_id=3, approver_ids=[111, 222, 333])]
    self.users_by_id = {
        111: framework_views.StuffUserView(111, '*****@*****.**', False),
        222: framework_views.StuffUserView(222, '*****@*****.**', True),
    }

    self.summary_table_cell_kws = {
        'col': None,
        'users_by_id': {},
        'non_col_labels': [('lab', False)],
        'label_values': {},
        'related_issues': {},
        'config': 'fake_config',
        }
Example #19
0
    def setUp(self):
        self.services = service_manager.Services(user=fake.UserService(),
                                                 config=fake.ConfigService(),
                                                 project=fake.ProjectService())
        self.servlet = fielddetail.FieldDetail('req',
                                               'res',
                                               services=self.services)
        self.project = self.services.project.TestAddProject('proj')
        self.mr = testing_helpers.MakeMonorailRequest(
            project=self.project, perms=permissions.OWNER_ACTIVE_PERMISSIONSET)
        self.config = self.services.config.GetProjectConfig(
            'fake cnxn', self.project.project_id)
        self.services.config.StoreConfig('fake cnxn', self.config)
        self.fd = tracker_bizobj.MakeFieldDef(123, 789, 'CPU',
                                              tracker_pb2.FieldTypes.INT_TYPE,
                                              None, '', False, False, False,
                                              None, None, '', False, '', '',
                                              tracker_pb2.NotifyTriggers.NEVER,
                                              'no_action', 'doc', False)
        self.config.field_defs.append(self.fd)
        self.services.user.TestAddUser('*****@*****.**', 111)
        self.services.user.TestAddUser('*****@*****.**', 222)
        self.mr.field_name = 'CPU'

        # Approvals
        self.approval_def = tracker_pb2.ApprovalDef(approval_id=234,
                                                    approver_ids=[111],
                                                    survey='Question 1?')
        self.sub_fd = tracker_pb2.FieldDef(field_name='UIMocks',
                                           approval_id=234,
                                           applicable_type='')
        self.sub_fd_deleted = tracker_pb2.FieldDef(field_name='UIMocksDeleted',
                                                   approval_id=234,
                                                   applicable_type='',
                                                   is_deleted=True)
        self.config.field_defs.extend([self.sub_fd, self.sub_fd_deleted])
        self.config.approval_defs.append(self.approval_def)
        self.approval_fd = tracker_bizobj.MakeFieldDef(
            234, 789, 'UIReview', tracker_pb2.FieldTypes.APPROVAL_TYPE, None,
            '', False, False, False, None, None, '', False, '', '',
            tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False)
        self.config.field_defs.append(self.approval_fd)

        self.mox = mox.Mox()
Example #20
0
 def testProcessDeleteField_subfields(self):
     approval_fd = tracker_bizobj.MakeFieldDef(
         3, 789, 'Legal', tracker_pb2.FieldTypes.APPROVAL_TYPE, None, '',
         False, False, False, None, None, '', False, '', '',
         tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False)
     self.fd.approval_id = 3
     self.config.field_defs.append(approval_fd)
     self.servlet._ProcessDeleteField(self.mr, self.config, approval_fd)
     self.assertTrue(self.fd.is_deleted)
     self.assertTrue(approval_fd.is_deleted)
 def testFieldNameErrorMessage_AlreadyInUse(self):
     fd = tracker_bizobj.MakeFieldDef(123, 789, 'CPU',
                                      tracker_pb2.FieldTypes.INT_TYPE, None,
                                      '', False, False, False, None, None,
                                      '', False, '', '',
                                      tracker_pb2.NotifyTriggers.NEVER,
                                      'no_action', 'doc', False)
     self.config.field_defs.append(fd)
     self.assertEqual('That name is already in use.',
                      fieldcreate.FieldNameErrorMessage('CPU', self.config))
 def testFieldNameErrorMessage_IncludesExisting(self):
     fd = tracker_bizobj.MakeFieldDef(123, 789, 'opt',
                                      tracker_pb2.FieldTypes.INT_TYPE, None,
                                      '', False, False, False, None, None,
                                      '', False, '', '',
                                      tracker_pb2.NotifyTriggers.NEVER,
                                      'no_action', 'doc', False)
     self.config.field_defs.append(fd)
     self.assertEqual(
         'An existing field name is a prefix of that name.',
         fieldcreate.FieldNameErrorMessage('opt-in', self.config))
Example #23
0
 def testParseOneFieldValue_UrlType(self):
     fd = tracker_bizobj.MakeFieldDef(123, 789, 'Design Doc',
                                      tracker_pb2.FieldTypes.URL_TYPE, None,
                                      '', False, False, False, None, None,
                                      '', False, '', '',
                                      tracker_pb2.NotifyTriggers.NEVER,
                                      'no_action', 'doc', False)
     fv = field_helpers.ParseOneFieldValue(self.mr.cnxn, self.services.user,
                                           fd, 'www.google.com')
     self.assertEqual(fv.field_id, 123)
     self.assertEqual(fv.url_value, 'http://www.google.com')
Example #24
0
 def testParseOneFieldValue_DateType(self):
     fd = tracker_bizobj.MakeFieldDef(123, 789, 'Deadline',
                                      tracker_pb2.FieldTypes.DATE_TYPE,
                                      None, '', False, False, False, None,
                                      None, '', False, '', '',
                                      tracker_pb2.NotifyTriggers.NEVER,
                                      'no_action', 'doc', False)
     fv = field_helpers.ParseOneFieldValue(self.mr.cnxn, self.services.user,
                                           fd, '2009-02-13')
     self.assertEqual(fv.field_id, 123)
     self.assertEqual(fv.date_value, 1234483200)
Example #25
0
 def testParseOneFieldValue_StrType(self):
     fd = tracker_bizobj.MakeFieldDef(123, 789, 'Foo',
                                      tracker_pb2.FieldTypes.STR_TYPE, None,
                                      '', False, False, False, None, None,
                                      '', False, '', '',
                                      tracker_pb2.NotifyTriggers.NEVER,
                                      'no_action', 'doc', False)
     fv = field_helpers.ParseOneFieldValue(self.mr.cnxn, self.services.user,
                                           fd, '8675309')
     self.assertEqual(fv.field_id, 123)
     self.assertEqual(fv.str_value, '8675309')
Example #26
0
 def testParseUserQuery_PhaseFields(self):
   fd = tracker_bizobj.MakeFieldDef(
       1, self.project_id, 'EstDays', tracker_pb2.FieldTypes.INT_TYPE,
       'applic', 'applic', False, False, False, None, None, None, False, None,
       None, None, 'no_action', 'doc', False, is_phase_field=True)
   self.default_config.field_defs.append(fd)
   ast = query2ast.ParseUserQuery(
       'UXReview.EstDays>3', '', BUILTIN_ISSUE_FIELDS, self.default_config)
   cond1 = ast.conjunctions[0].conds[0]
   self.assertEqual(
       MakeCond(GT, [fd], ['3'], [3], phase_name='uxreview'),
       cond1)
Example #27
0
 def testParseOneFieldValue_UserType(self):
     self.services.user.TestAddUser('*****@*****.**', 111)
     fd = tracker_bizobj.MakeFieldDef(123, 789, 'Foo',
                                      tracker_pb2.FieldTypes.USER_TYPE,
                                      None, '', False, False, False, None,
                                      None, '', False, '', '',
                                      tracker_pb2.NotifyTriggers.NEVER,
                                      'no_action', 'doc', False)
     fv = field_helpers.ParseOneFieldValue(self.mr.cnxn, self.services.user,
                                           fd, '*****@*****.**')
     self.assertEqual(fv.field_id, 123)
     self.assertEqual(fv.user_id, 111)
Example #28
0
 def SetUpFieldDefs(
     self, field_id, project_id, field_name, field_type_int,
     min_value=0, max_value=100, needs_member=False, docstring='doc'):
   self.config = self.services.config.GetProjectConfig(
       'fake cnxn', project_id)
   self.services.config.StoreConfig('fake cnxn', self.config)
   fd = tracker_bizobj.MakeFieldDef(
       field_id, project_id, field_name, field_type_int, '',
       '', False, False, False, min_value, max_value, None, needs_member,
       None, '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', docstring,
       False)
   self.config.field_defs.append(fd)
Example #29
0
    def setUp(self):
        self.services = service_manager.Services(
            user=fake.UserService(),
            usergroup=fake.UserGroupService(),
            features=fake.FeaturesService(),
            issue=fake.IssueService(),
            project=fake.ProjectService(),
            config=fake.ConfigService(),
            issue_star=fake.IssueStarService())
        self.servlet = dateaction.IssueDateActionTask('req',
                                                      'res',
                                                      services=self.services)
        self.mox = mox.Mox()

        self.config = self.services.config.GetProjectConfig('cnxn', 789)
        self.config.field_defs = [
            tracker_bizobj.MakeFieldDef(
                123, 789, 'NextAction', tracker_pb2.FieldTypes.DATE_TYPE, '',
                '', False, False, False, None, None, None, False, '', None,
                None, tracker_pb2.DateAction.PING_OWNER_ONLY,
                'Date of next expected progress update', False),
            tracker_bizobj.MakeFieldDef(124, 789, 'EoL',
                                        tracker_pb2.FieldTypes.DATE_TYPE, '',
                                        '', False, False, False, None, None,
                                        None, False, '', None, None,
                                        tracker_pb2.DateAction.PING_OWNER_ONLY,
                                        'doc', False),
            tracker_bizobj.MakeFieldDef(125, 789, 'TLsBirthday',
                                        tracker_pb2.FieldTypes.DATE_TYPE, '',
                                        '', False, False, False, None, None,
                                        None, False, '', None, None,
                                        tracker_pb2.DateAction.NO_ACTION,
                                        'doc', False),
        ]
        self.services.config.StoreConfig('cnxn', self.config)
        self.project = self.services.project.TestAddProject('proj',
                                                            project_id=789)
        self.owner = self.services.user.TestAddUser('*****@*****.**', 111)
        self.date_action_user = self.services.user.TestAddUser(
            '*****@*****.**', 555)
Example #30
0
 def testParseUserQuery_SearchWithinCustomFields(self):
   """Enums are treated as labels, other fields are kept as fields."""
   fd1 = tracker_bizobj.MakeFieldDef(
       1, self.project_id, 'Size', tracker_pb2.FieldTypes.ENUM_TYPE,
       'applic', 'applic', False, False, False, None, None, None, False, None,
       None, None, 'no_action', 'doc', False)
   fd2 = tracker_bizobj.MakeFieldDef(
       1, self.project_id, 'EstDays', tracker_pb2.FieldTypes.INT_TYPE,
       'applic', 'applic', False, False, False, None, None, None, False, None,
       None, None, 'no_action', 'doc', False)
   self.default_config.field_defs.extend([fd1, fd2])
   ast = query2ast.ParseUserQuery(
       'Size:Small EstDays>3', '', BUILTIN_ISSUE_FIELDS, self.default_config)
   cond1 = ast.conjunctions[0].conds[0]
   cond2 = ast.conjunctions[0].conds[1]
   self.assertEqual(
       MakeCond(KEY_HAS, [BUILTIN_ISSUE_FIELDS['label']],
                ['size-small'], []),
       cond1)
   self.assertEqual(
       MakeCond(GT, [fd2], ['3'], [3]),
       cond2)